|
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 |
}
|