| echo T.gawk: tests adapted from gawk test suite |
| # for which thanks. |
| |
| awk=${awk-../a.out} |
| |
| # arrayref: |
| ./echo '1 |
| 1' >foo1 |
| $awk ' |
| BEGIN { # foo[10] = 0 # put this line in and it will work |
| test(foo); print foo[1] |
| test2(foo2); print foo2[1] |
| } |
| function test(foo) { test2(foo) } |
| function test2(bar) { bar[1] = 1 } |
| ' >foo2 |
| cmp -s foo1 foo2 || ./echo 'BAD: T.gawk arrayref' |
| |
| # asgext |
| ./echo '1 2 3 |
| 1 |
| 1 2 3 4' >foo |
| ./echo '3 |
| 1 2 3 a |
| |
| 1 a |
| 3 |
| 1 2 3 a' >foo1 |
| $awk '{ print $3; $4 = "a"; print }' foo >foo2 |
| cmp -s foo1 foo2 || ./echo 'BAD: T.gawk asgext' |
| |
| # backgsub: |
| ./echo 'x\y |
| x\\y' >foo |
| ./echo 'x\y |
| xAy |
| xAy |
| xAAy' >foo1 |
| $awk '{ x = y = $0 |
| gsub( /\\\\/, "A", x); print x |
| gsub( "\\\\", "A", y); print y |
| }' foo >foo2 |
| cmp -s foo1 foo2 || ./echo 'BAD: T.gawk backgsub' |
| |
| |
| # backgsub2: |
| ./echo 'x\y |
| x\\y |
| x\\\y' >foo |
| ./echo ' x\y |
| x\y |
| x\y |
| x\y |
| x\\y |
| x\\\y |
| x\\y |
| x\\\y |
| x\\\\y' >foo1 |
| $awk '{ w = x = y = z = $0 |
| gsub( /\\\\/, "\\", w); print " " w |
| gsub( /\\\\/, "\\\\", x); print " " x |
| gsub( /\\\\/, "\\\\\\", y); print " " y |
| } |
| ' foo >foo2 |
| cmp -s foo1 foo2 || ./echo 'BAD: T.gawk backgsub2' |
| |
| |
| # backgsub3: |
| ./echo 'xax |
| xaax' >foo |
| ./echo ' xax |
| x&x |
| x&x |
| x\ax |
| x\ax |
| x\&x |
| xaax |
| x&&x |
| x&&x |
| x\a\ax |
| x\a\ax |
| x\&\&x' >foo1 |
| $awk '{ w = x = y = z = z1 = z2 = $0 |
| gsub( /a/, "\&", w); print " " w |
| gsub( /a/, "\\&", x); print " " x |
| gsub( /a/, "\\\&", y); print " " y |
| gsub( /a/, "\\\\&", z); print " " z |
| gsub( /a/, "\\\\\&", z1); print " " z1 |
| gsub( /a/, "\\\\\\&", z2); print " " z2 |
| } |
| ' foo >foo2 |
| cmp -s foo1 foo2 || ./echo 'BAD: T.gawk backgsub3' |
| |
| |
| # backsub3: |
| ./echo 'xax |
| xaax' >foo |
| ./echo ' xax |
| x&x |
| x&x |
| x\ax |
| x\ax |
| x\&x |
| xaax |
| x&ax |
| x&ax |
| x\aax |
| x\aax |
| x\&ax' >foo1 |
| $awk '{ w = x = y = z = z1 = z2 = $0 |
| sub( /a/, "\&", w); print " " w |
| sub( /a/, "\\&", x); print " " x |
| sub( /a/, "\\\&", y); print " " y |
| sub( /a/, "\\\\&", z); print " " z |
| sub( /a/, "\\\\\&", z1); print " " z1 |
| sub( /a/, "\\\\\\&", z2); print " " z2 |
| } |
| ' foo >foo2 |
| cmp -s foo1 foo2 || ./echo 'BAD: T.gawk backsub3' |
| |
| |
| # backsub: |
| ./echo 'x\y |
| x\\y' >foo |
| ./echo 'x\y |
| x\\y |
| x\\y |
| x\\\y' >foo1 |
| $awk '{ x = y = $0 |
| sub( /\\\\/, "\\\\", x); print x |
| sub( "\\\\", "\\\\", y); print y |
| }' foo >foo2 |
| cmp -s foo1 foo2 || ./echo 'BAD: T.gawk backsub' |
| |
| |
| |
| |
| # dynlj: |
| ./echo 'hello world' >foo1 |
| $awk 'BEGIN { printf "%*sworld\n", -20, "hello" }' >foo2 |
| cmp -s foo1 foo2 || ./echo 'BAD: T.gawk dynlj' |
| |
| # fsrs: |
| ./echo 'a b |
| c d |
| e f |
| |
| 1 2 |
| 3 4 |
| 5 6' >foo |
| # note -n: |
| ./echo -n 'a b |
| c d |
| e f1 2 |
| 3 4 |
| 5 6' >foo1 |
| $awk ' |
| BEGIN { |
| RS=""; FS="\n"; |
| ORS=""; OFS="\n"; |
| } |
| { |
| split ($2,f," ") |
| print $0; |
| }' foo >foo2 |
| cmp -s foo1 foo2 || ./echo 'BAD: T.gawk fsrs' |
| |
| # intest |
| ./echo '0 1' >foo1 |
| $awk 'BEGIN { |
| bool = ((b = 1) in c); |
| print bool, b # gawk-3.0.1 prints "0 "; should print "0 1" |
| }' >foo2 |
| cmp -s foo1 foo2 || ./echo 'BAD: T.gawk intest' |
| |
| # intprec: |
| ./echo '0000000005:000000000e' >foo1 |
| $awk 'BEGIN { printf "%.10d:%.10x\n", 5, 14 }' >foo2 |
| cmp -s foo1 foo2 || ./echo 'BAD: T.gawk intprec' |
| |
| # litoct: |
| ./echo 'axb |
| ab |
| a*b' >foo |
| ./echo 'no match |
| no match |
| match' >foo1 |
| $awk '{ if (/a\52b/) print "match" ; else print "no match" }' foo >foo2 |
| cmp -s foo1 foo2 || ./echo 'BAD: T.gawk litoct' |
| |
| # math: |
| ./echo 'cos(0.785398) = 0.707107 |
| sin(0.785398) = 0.707107 |
| e = 2.718282 |
| log(e) = 1.000000 |
| sqrt(pi ^ 2) = 3.141593 |
| atan2(1, 1) = 0.785398' >foo1 |
| $awk 'BEGIN { |
| pi = 3.1415927 |
| printf "cos(%f) = %f\n", pi/4, cos(pi/4) |
| printf "sin(%f) = %f\n", pi/4, sin(pi/4) |
| e = exp(1) |
| printf "e = %f\n", e |
| printf "log(e) = %f\n", log(e) |
| printf "sqrt(pi ^ 2) = %f\n", sqrt(pi ^ 2) |
| printf "atan2(1, 1) = %f\n", atan2(1, 1) |
| }' >foo2 |
| cmp -s foo1 foo2 || ./echo 'BAD: T.gawk math' |
| |
| # nlfldsep: |
| ./echo 'some stuff |
| more stuffA |
| junk |
| stuffA |
| final' >foo |
| ./echo '4 |
| some |
| stuff |
| more |
| stuff |
| |
| 2 |
| junk |
| stuff |
| |
| 1 |
| final |
| ' >foo1 |
| $awk 'BEGIN { RS = "A" } |
| {print NF; for (i = 1; i <= NF; i++) print $i ; print ""} |
| ' foo >foo2 |
| cmp -s foo1 foo2 || ./echo 'BAD: T.gawk nlfldsep' |
| |
| # numsubstr: |
| ./echo '5000 |
| 10000 |
| 5000' >foo |
| ./echo '000 |
| 1000 |
| 000' >foo1 |
| $awk '{ print substr(1000+$1, 2) }' foo >foo2 |
| cmp -s foo1 foo2 || ./echo 'BAD: T.gawk numsubstr' |
| |
| # pcntplus: |
| ./echo '+3 4' >foo1 |
| $awk 'BEGIN { printf "%+d %d\n", 3, 4 }' >foo2 |
| cmp -s foo1 foo2 || ./echo 'BAD: T.gawk pcntplus' |
| |
| # prt1eval: |
| ./echo 1 >foo1 |
| $awk 'function tst () { |
| sum += 1 |
| return sum |
| } |
| BEGIN { OFMT = "%.0f" ; print tst() } |
| ' >foo2 |
| cmp -s foo1 foo2 || ./echo 'BAD: T.gawk prt1eval' |
| |
| # reparse: |
| ./echo '1 axbxc 2' >foo |
| ./echo '1 |
| 1 a b c 2 |
| 1 a b' >foo1 |
| $awk '{ gsub(/x/, " ") |
| $0 = $0 |
| print $1 |
| print $0 |
| print $1, $2, $3 |
| }' foo >foo2 |
| cmp -s foo1 foo2 || ./echo 'BAD: T.gawk reparse' |
| |
| # rswhite: |
| ./echo ' a b |
| c d' >foo |
| ./echo '< a b |
| c d>' >foo1 |
| $awk 'BEGIN { RS = "" } |
| { printf("<%s>\n", $0) }' foo >foo2 |
| cmp -s foo1 foo2 || ./echo 'BAD: T.gawk rswhite' |
| |
| # splitvar: |
| ./echo 'Here===Is=Some=====Data' >foo |
| ./echo 4 >foo1 |
| $awk '{ sep = "=+" |
| n = split($0, a, sep) |
| print n |
| }' foo >foo2 |
| cmp -s foo1 foo2 || ./echo 'BAD: T.gawk splitvar' |
| |
| # splitwht: |
| ./echo '4 |
| 5' >foo1 |
| $awk 'BEGIN { |
| str = "a b\t\tc d" |
| n = split(str, a, " ") |
| print n |
| m = split(str, b, / /) |
| print m |
| }' >foo2 |
| cmp -s foo1 foo2 || ./echo 'BAD: T.gawk splitwht' |
| |
| # sprintfc: |
| ./echo '65 |
| 66 |
| foo' >foo |
| ./echo 'A 65 |
| B 66 |
| f foo' >foo1 |
| $awk '{ print sprintf("%c", $1), $1 }' foo >foo2 |
| cmp -s foo1 foo2 || ./echo 'BAD: T.gawk sprintfc' |
| |
| # substr: |
| ./echo 'xxA |
| xxab |
| xxbc |
| xxab |
| xx |
| xx |
| xxab |
| xx |
| xxef |
| xx' >foo1 |
| $awk 'BEGIN { |
| x = "A" |
| printf("xx%-39s\n", substr(x,1,39)) |
| print "xx" substr("abcdef", 0, 2) |
| print "xx" substr("abcdef", 2.3, 2) |
| print "xx" substr("abcdef", -1, 2) |
| print "xx" substr("abcdef", 1, 0) |
| print "xx" substr("abcdef", 1, -3) |
| print "xx" substr("abcdef", 1, 2.3) |
| print "xx" substr("", 1, 2) |
| print "xx" substr("abcdef", 5, 5) |
| print "xx" substr("abcdef", 7, 2) |
| exit (0) |
| }' >foo2 |
| cmp -s foo1 foo2 || ./echo 'BAD: T.gawk substr' |
| |
| # fldchg: |
| ./echo 'aa aab c d e f' >foo |
| ./echo '1: + +b c d e f |
| 2: + +b <c> d e f |
| 2a:%+%+b%<c>%d%e' >foo1 |
| $awk '{ gsub("aa", "+") |
| print "1:", $0 |
| $3 = "<" $3 ">" |
| print "2:", $0 |
| print "2a:" "%" $1 "%" $2 "%" $3 "%" $4 "%" $5 |
| }' foo >foo2 |
| cmp -s foo1 foo2 || ./echo 'BAD: T.gawk fldchg' |
| |
| # fldchgnf: |
| ./echo 'a b c d' >foo |
| ./echo 'a::c:d |
| 4' >foo1 |
| $awk '{ OFS = ":"; $2 = ""; print $0; print NF }' foo >foo2 |
| cmp -s foo1 foo2 || ./echo 'BAD: T.gawk fldchgnf' |
| |
| # funstack: |
| # ./echo ' funstack test takes 5-10 sec, replicates part of T.beebe' |
| $awk -f funstack.awk funstack.in >foo 2>&1 |
| cmp -s foo funstack.ok || ./echo 'BAD: T.gawk funstack' |
| |
| # OFMT from arnold robbins 6/02: |
| # 5.7 with OFMT = %0.f is 6 |
| ./echo '6' >foo1 |
| $awk 'BEGIN { |
| OFMT = "%.0f" |
| print 5.7 |
| }' >foo2 |
| cmp -s foo1 foo2 || ./echo 'BAD: T.gawk ofmt' |
| |
| |
| ### don't know what this is supposed to do now. |
| ### # convfmt: |
| ### ./echo 'a = 123.46 |
| ### a = 123.456 |
| ### a = 123.456' >foo1 |
| ### $awk 'BEGIN { |
| ### CONVFMT = "%2.2f" |
| ### a = 123.456 |
| ### b = a "" # give a string value also |
| ### a += 0 # make a numeric only again |
| ### print "a = ", a |
| ### CONVFMT = "%.6g" |
| ### print "a = ", a |
| ### a += 0 # make a numeric only again |
| ### print "a = ", a # use a as string |
| ### }' >foo2 |
| ### cmp -s foo1 foo2 || ./echo 'BAD: T.gawk convfmt' |