Blame test/indirectbuiltin.awk

Packit 575503
function print_result(category, fname, builtin_result, indirect_result)
Packit 575503
{
Packit 575503
	if (builtin_result == indirect_result)
Packit 575503
		printf("%s: %s: pass\n", category, fname)
Packit 575503
	else {
Packit 575503
		printf("%s: %s: fail: builtin: %s \tindirect: %s\n", category, fname,
Packit 575503
				builtin_result, indirect_result)
Packit 575503
		exit 1
Packit 575503
	}
Packit 575503
}
Packit 575503
Packit 575503
Packit 575503
BEGIN {
Packit 575503
# math functions
Packit 575503
Packit 575503
	fun = "and"
Packit 575503
	b1 = and(0x11, 0x01)
Packit 575503
	i1 = @fun(0x11, 0x01)
Packit 575503
	print_result("math", fun, b1, i1)
Packit 575503
Packit 575503
	fun = "atan2"
Packit 575503
	b1 = atan2(-1, 0)
Packit 575503
	i1 = @fun(-1, 0)
Packit 575503
	print_result("math", fun, b1, i1)
Packit 575503
Packit 575503
	fun = "compl"
Packit 575503
	b1 = compl(0x1111)
Packit 575503
	i1 = @fun(0x1111)
Packit 575503
	print_result("math", fun, b1, i1)
Packit 575503
Packit 575503
	fun = "cos"
Packit 575503
	b1 = cos(3.1415927 / 4)
Packit 575503
	i1 = @fun(3.1415927 / 4)
Packit 575503
	print_result("math", fun, b1, i1)
Packit 575503
Packit 575503
	fun = "exp"
Packit 575503
	b1 = exp(2)
Packit 575503
	i1 = @fun(2)
Packit 575503
	print_result("math", fun, b1, i1)
Packit 575503
Packit 575503
	fun = "int"
Packit 575503
	b1 = int(3.1415927)
Packit 575503
	i1 = @fun(3.1415927)
Packit 575503
	print_result("math", fun, b1, i1)
Packit 575503
Packit 575503
	fun = "log"
Packit 575503
	b1 = log(10)
Packit 575503
	i1 = @fun(10)
Packit 575503
	print_result("math", fun, b1, i1)
Packit 575503
Packit 575503
	fun = "lshift"
Packit 575503
	b1 = lshift(1, 2)
Packit 575503
	i1 = @fun(1, 2)
Packit 575503
	print_result("math", fun, b1, i1)
Packit 575503
Packit 575503
	fun = "or"
Packit 575503
	b1 = or(0x10, 0x01)
Packit 575503
	i1 = @fun(0x10, 0x01)
Packit 575503
	print_result("math", fun, b1, i1)
Packit 575503
Packit 575503
	fun = "rand"
Packit 575503
	srand(1)
Packit 575503
	b1 = rand();
Packit 575503
	srand(1)
Packit 575503
	i1 = @fun()
Packit 575503
	print_result("math", fun, b1, i1)
Packit 575503
Packit 575503
	fun = "rshift"
Packit 575503
	b1 = rshift(0x10, 1)
Packit 575503
	i1 = @fun(0x10, 1)
Packit 575503
	print_result("math", fun, b1, i1)
Packit 575503
Packit 575503
	fun = "sin"
Packit 575503
	b1 = sin(3.1415927 / 4)
Packit 575503
	i1 = @fun(3.1415927 / 4)
Packit 575503
	print_result("math", fun, b1, i1)
Packit 575503
Packit 575503
	fun = "sqrt"
Packit 575503
	b1 = sqrt(2)
Packit 575503
	i1 = @fun(2)
Packit 575503
	print_result("math", fun, b1, i1)
Packit 575503
Packit 575503
	srand()
Packit 575503
	fun = "srand"
Packit 575503
	b1 = srand()
Packit 575503
	i1 = @fun()
Packit 575503
	print_result("math", fun, b1, i1)
Packit 575503
Packit 575503
	fun = "xor"
Packit 575503
	b1 = xor(0x11, 0x01)
Packit 575503
	i1 = @fun(0x11, 0x01)
Packit 575503
	print_result("math", fun, b1, i1)
Packit 575503
Packit 575503
# string functions
Packit 575503
Packit 575503
	fun = "gensub"
Packit 575503
	b1 = gensub("f", "q", "g", "ff11bb")
Packit 575503
	i1 = @fun("f", "q", "g", "ff11bb")
Packit 575503
	print_result("string", fun, b1, i1)
Packit 575503
Packit 575503
	fun = "gensub"
Packit 575503
	$0 = "ff11bb"
Packit 575503
	b1 = gensub("f", "q", "g")
Packit 575503
	i1 = @fun("f", "q", "g")
Packit 575503
	print_result("string", fun " (3 args)", b1, i1)
Packit 575503
Packit 575503
	fun = "gsub"
Packit 575503
	$0 = "ff11bb"
Packit 575503
	b1 = gsub("f", "q")
Packit 575503
	b2 = $0
Packit 575503
	$0 = "ff11bb"
Packit 575503
	i1 = @fun("f", "q")
Packit 575503
	i2 = $0
Packit 575503
	print_result("string", fun, b1, i1)
Packit 575503
	if (b2 != i2) {
Packit 575503
		printf("string: %s: fail: $0 (%s) != $0 (%s)\n",
Packit 575503
			fun, b2, i2)
Packit 575503
		exit 1
Packit 575503
	}
Packit 575503
Packit 575503
	fun = "index"
Packit 575503
	b1 = index("hi, how are you", "how")
Packit 575503
	i1 = @fun("hi, how are you", "how")
Packit 575503
	print_result("string", fun, b1, i1)
Packit 575503
Packit 575503
	fun = "dcgettext"
Packit 575503
	b1 = dcgettext("hello, world")
Packit 575503
	i1 = @fun("hello, world")
Packit 575503
	print_result("string", fun, b1, i1)
Packit 575503
Packit 575503
	fun = "dcngettext"
Packit 575503
	b1 = dcngettext("hello, world", "howdy", 2)
Packit 575503
	i1 = @fun("hello, world", "howdy", 2)
Packit 575503
	print_result("string", fun, b1, i1)
Packit 575503
Packit 575503
	fun = "length"
Packit 575503
	b1 = length("hi, how are you")
Packit 575503
	i1 = @fun("hi, how are you")
Packit 575503
	print_result("string", fun, b1, i1)
Packit 575503
Packit 575503
	fun = "sprintf"
Packit 575503
	b1 = sprintf("%s world", "hello")
Packit 575503
	i1 = @fun("%s world", "hello")
Packit 575503
	print_result("string", fun, b1, i1)
Packit 575503
Packit 575503
	fun = "strtonum"
Packit 575503
	b1 = strtonum("0xdeadbeef")
Packit 575503
	i1 = @fun("0xdeadbeef")
Packit 575503
	print_result("string", fun, b1, i1)
Packit 575503
Packit 575503
	fun = "sub"
Packit 575503
	$0 = "ff11bb"
Packit 575503
	b1 = sub("f", "q")
Packit 575503
	b2 = $0
Packit 575503
	$0 = "ff11bb"
Packit 575503
	i1 = @fun("f", "q")
Packit 575503
	i2 = $0
Packit 575503
	print_result("string", fun, b1, i1)
Packit 575503
	if (b2 != i2) {
Packit 575503
		printf("string: %s: fail: $0 (%s) != $0 (%s)\n",
Packit 575503
			fun, b2, i2)
Packit 575503
		exit 1
Packit 575503
	}
Packit 575503
Packit 575503
	fun = "substr"
Packit 575503
	b1 = substr("0xdeadbeef", 7, 4)
Packit 575503
	i1 = @fun("0xdeadbeef", 7, 4)
Packit 575503
	print_result("string", fun, b1, i1)
Packit 575503
Packit 575503
	fun = "tolower"
Packit 575503
	b1 = tolower("0xDeAdBeEf")
Packit 575503
	i1 = @fun("0xDeAdBeEf")
Packit 575503
	print_result("string", fun, b1, i1)
Packit 575503
Packit 575503
	fun = "toupper"
Packit 575503
	b1 = toupper("0xDeAdBeEf")
Packit 575503
	i1 = @fun("0xDeAdBeEf")
Packit 575503
	print_result("string", fun, b1, i1)
Packit 575503
Packit 575503
# time functions
Packit 575503
Packit 575503
	fun = "mktime"
Packit 575503
	b1 = mktime("1990 02 11 12 00 00")
Packit 575503
	i1 = @fun("1990 02 11 12 00 00")
Packit 575503
	print_result("time", fun, b1, i1)
Packit 575503
Packit 575503
	then = b1
Packit 575503
	fun = "strftime"
Packit 575503
	b1 = strftime(PROCINFO["strftime"], then)
Packit 575503
	i1 = @fun(PROCINFO["strftime"], then)
Packit 575503
	print_result("time", fun, b1, i1)
Packit 575503
Packit 575503
	fun = "systime"
Packit 575503
	b1 = systime()
Packit 575503
	i1 = @fun()
Packit 575503
	print_result("time", fun, b1, i1)
Packit 575503
Packit 575503
# regexp functions
Packit 575503
Packit 575503
	fun = "match"
Packit 575503
	b1 = match("o+", "fooob")
Packit 575503
	rstart = RSTART
Packit 575503
	rlength = RLENGTH
Packit 575503
	i1 = @fun("o+", "fooob")
Packit 575503
	print_result("regexp", fun, b1, i1)
Packit 575503
	if (rstart != RSTART) {
Packit 575503
		printf("match: failure: biRSTART (%d) != iRSTART (%d)\n",
Packit 575503
			rstart, RSTART)
Packit 575503
		exit 1
Packit 575503
	}
Packit 575503
	if (rlength != RLENGTH) {
Packit 575503
		printf("match: failure: biRLENGTH (%d) != iRLENGTH (%d)\n",
Packit 575503
			rlength, RLENGTH)
Packit 575503
		exit 1
Packit 575503
	}
Packit 575503
Packit 575503
	############## start patsplit ##############
Packit 575503
	fun = "patsplit"
Packit 575503
	delete data
Packit 575503
	delete data2
Packit 575503
	delete seps
Packit 575503
	delete seps2
Packit 575503
	b1 = patsplit("a:b:c:d", data, ":", seps)
Packit 575503
	i1 = @fun("a:b:c:d", data2, ":", seps2)
Packit 575503
	print_result("regexp", fun, b1, i1)
Packit 575503
	for (i in data) {
Packit 575503
		if ((! (i in data2)) || data[i] != data2[i]) {
Packit 575503
			printf("patsplit1a: fail: builtin data[%d] (%s) != indirect data[%d] (%s)\n",
Packit 575503
				i, data[i], i, data2[i])
Packit 575503
			exit 1
Packit 575503
		}
Packit 575503
	}
Packit 575503
	for (i in seps) {
Packit 575503
		if ((! (i in seps2)) || seps[i] != seps2[i]) {
Packit 575503
			printf("patsplit1b: fail: builtin seps[%d] (%s) != indirect seps[%d] (%s)\n",
Packit 575503
				i, seps[i], i, seps2[i])
Packit 575503
			exit 1
Packit 575503
		}
Packit 575503
	}
Packit 575503
Packit 575503
	fun = "patsplit"
Packit 575503
	delete data
Packit 575503
	delete data2
Packit 575503
	b1 = patsplit("a:b:c:d", data, ":")
Packit 575503
	i1 = @fun("a:b:c:d", data2, ":")
Packit 575503
	print_result("regexp", fun, b1, i1)
Packit 575503
	for (i in data) {
Packit 575503
		if ((! (i in data2)) || data[i] != data2[i]) {
Packit 575503
			printf("patsplit2: fail: builtin data[%d] (%s) != indirect data[%d] (%s)\n",
Packit 575503
				i, data[i], i, data2[i])
Packit 575503
			exit 1
Packit 575503
		}
Packit 575503
	}
Packit 575503
Packit 575503
	fun = "patsplit"
Packit 575503
	delete data
Packit 575503
	delete data2
Packit 575503
	FPAT = "[a-z]+"
Packit 575503
	b1 = patsplit("a b c d", data)
Packit 575503
	i1 = @fun("a b c d", data2)
Packit 575503
	print_result("regexp", fun, b1, i1)
Packit 575503
	for (i in data) {
Packit 575503
		if ((! (i in data2)) || data[i] != data2[i]) {
Packit 575503
			printf("patsplit3: fail: builtin data[%d] (%s) != indirect data[%d] (%s)\n",
Packit 575503
				i, data[i], i, data2[i])
Packit 575503
			exit 1
Packit 575503
		}
Packit 575503
	}
Packit 575503
	############## end patsplit ##############
Packit 575503
Packit 575503
	############## start split ##############
Packit 575503
	fun = "split"
Packit 575503
	delete data
Packit 575503
	delete data2
Packit 575503
	delete seps
Packit 575503
	delete seps2
Packit 575503
	b1 = split("a:b:c:d", data, ":", seps)
Packit 575503
	i1 = @fun("a:b:c:d", data2, ":", seps2)
Packit 575503
	print_result("regexp", fun, b1, i1)
Packit 575503
	for (i in data) {
Packit 575503
		if ((! (i in data2)) || data[i] != data2[i]) {
Packit 575503
			printf("split1a: fail: builtin data[%d] (%s) != indirect data[%d] (%s)\n",
Packit 575503
				i, data[i], i, data2[i])
Packit 575503
			exit 1
Packit 575503
		}
Packit 575503
	}
Packit 575503
	for (i in seps) {
Packit 575503
		if ((! (i in seps2)) || seps[i] != seps2[i]) {
Packit 575503
			printf("split1b: fail: builtin seps[%d] (%s) != indirect seps[%d] (%s)\n",
Packit 575503
				i, seps[i], i, seps2[i])
Packit 575503
			exit 1
Packit 575503
		}
Packit 575503
	}
Packit 575503
Packit 575503
	fun = "split"
Packit 575503
	delete data
Packit 575503
	delete data2
Packit 575503
	b1 = split("a:b:c:d", data, ":")
Packit 575503
	i1 = @fun("a:b:c:d", data2, ":")
Packit 575503
	print_result("regexp", fun, b1, i1)
Packit 575503
	for (i in data) {
Packit 575503
		if ((! (i in data2)) || data[i] != data2[i]) {
Packit 575503
			printf("split2: fail: builtin data[%d] (%s) != indirect data[%d] (%s)\n",
Packit 575503
				i, data[i], i, data2[i])
Packit 575503
			exit 1
Packit 575503
		}
Packit 575503
	}
Packit 575503
Packit 575503
	fun = "split"
Packit 575503
	delete data
Packit 575503
	delete data2
Packit 575503
	b1 = split("a b c d", data)
Packit 575503
	i1 = @fun("a b c d", data2)
Packit 575503
	print_result("regexp", fun, b1, i1)
Packit 575503
	for (i in data) {
Packit 575503
		if ((! (i in data2)) || data[i] != data2[i]) {
Packit 575503
			printf("split3: fail: builtin data[%d] (%s) != indirect data[%d] (%s)\n",
Packit 575503
				i, data[i], i, data2[i])
Packit 575503
			exit 1
Packit 575503
		}
Packit 575503
	}
Packit 575503
	############## end split ##############
Packit 575503
Packit 575503
# array functions
Packit 575503
Packit 575503
	split("z y x w v u t", data)
Packit 575503
	fun = "asort"
Packit 575503
	asort(data, newdata)
Packit 575503
	@fun(data, newdata2)
Packit 575503
	print_result("array", fun, b1, i1)
Packit 575503
	for (i in newdata) {
Packit 575503
		if (! (i in newdata2) || newdata[i] != newdata2[i]) {
Packit 575503
			print fun ": failed, index", i
Packit 575503
			exit
Packit 575503
		}
Packit 575503
	}
Packit 575503
Packit 575503
	for (i in data)
Packit 575503
		data2[data[i]] = i
Packit 575503
Packit 575503
	fun = "asorti"
Packit 575503
	asorti(data2, newdata)
Packit 575503
	@fun(data2, newdata2)
Packit 575503
	print_result("array", fun, b1, i1)
Packit 575503
	for (i in newdata) {
Packit 575503
		if (! (i in newdata2) || newdata[i] != newdata2[i]) {
Packit 575503
			print fun ": failed, index", i, "value", newdata[i], newdata2[i]
Packit 575503
			exit
Packit 575503
		}
Packit 575503
	}
Packit 575503
Packit 575503
	arr[1] = arr[2] = 42
Packit 575503
	fun = "isarray"
Packit 575503
	b1 = isarray(arr)
Packit 575503
	i1 = @fun(arr)
Packit 575503
	print_result("array", fun, b1, i1)
Packit 575503
Packit 575503
# i/o functions
Packit 575503
Packit 575503
	print("hi") > "x1.out"
Packit 575503
	print("hi") > "x2.out"
Packit 575503
Packit 575503
	fun = "fflush"
Packit 575503
	b1 = fflush("x1.out")
Packit 575503
	i1 = @fun("x2.out")
Packit 575503
	print_result("i/o", fun, b1, i1)
Packit 575503
Packit 575503
	fun = "close"
Packit 575503
	b1 = close("x1.out")
Packit 575503
	i1 = @fun("x2.out")
Packit 575503
	print_result("i/o", fun, b1, i1)
Packit 575503
Packit 575503
	fun = "system"
Packit 575503
	b1 = system("rm x1.out")
Packit 575503
	i1 = @fun("rm x2.out")
Packit 575503
	print_result("i/o", fun, b1, i1)
Packit 575503
}