Home | History | Annotate | Line # | Download | only in testdir
      1  1.1  christos echo T.gawk: tests adapted from gawk test suite
      2  1.1  christos # for which thanks.
      3  1.1  christos 
      4  1.1  christos awk=${awk-../a.out}
      5  1.1  christos 
      6  1.1  christos # arrayref:  
      7  1.1  christos ./echo '1
      8  1.1  christos 1' >foo1
      9  1.1  christos $awk '
     10  1.1  christos 	BEGIN { # foo[10] = 0		# put this line in and it will work
     11  1.1  christos 		test(foo); print foo[1]
     12  1.1  christos 		test2(foo2); print foo2[1]
     13  1.1  christos 	}
     14  1.1  christos 	function test(foo) { test2(foo) }
     15  1.1  christos 	function test2(bar) { bar[1] = 1 }
     16  1.1  christos ' >foo2
     17  1.1  christos cmp -s foo1 foo2 || ./echo 'BAD: T.gawk arrayref'
     18  1.1  christos 
     19  1.1  christos # asgext
     20  1.1  christos ./echo '1 2 3
     21  1.1  christos 1
     22  1.1  christos 1 2 3 4' >foo
     23  1.1  christos ./echo '3
     24  1.1  christos 1 2 3 a
     25  1.1  christos 
     26  1.1  christos 1   a
     27  1.1  christos 3
     28  1.1  christos 1 2 3 a' >foo1
     29  1.1  christos $awk '{ print $3; $4 = "a"; print }' foo >foo2
     30  1.1  christos cmp -s foo1 foo2 || ./echo 'BAD: T.gawk asgext'
     31  1.1  christos 
     32  1.1  christos # backgsub:
     33  1.1  christos ./echo 'x\y
     34  1.1  christos x\\y' >foo
     35  1.1  christos ./echo 'x\y
     36  1.1  christos xAy
     37  1.1  christos xAy
     38  1.1  christos xAAy' >foo1
     39  1.1  christos $awk '{	x = y = $0
     40  1.1  christos         gsub( /\\\\/, "A", x); print x
     41  1.1  christos         gsub( "\\\\", "A", y); print y
     42  1.1  christos }' foo >foo2
     43  1.1  christos cmp -s foo1 foo2 || ./echo 'BAD: T.gawk backgsub'
     44  1.1  christos 
     45  1.1  christos 
     46  1.1  christos # backgsub2:
     47  1.1  christos ./echo 'x\y
     48  1.1  christos x\\y
     49  1.1  christos x\\\y' >foo
     50  1.1  christos ./echo '	x\y
     51  1.1  christos 	x\y
     52  1.1  christos 	x\y
     53  1.1  christos 	x\y
     54  1.1  christos 	x\\y
     55  1.1  christos 	x\\\y
     56  1.1  christos 	x\\y
     57  1.1  christos 	x\\\y
     58  1.1  christos 	x\\\\y' >foo1
     59  1.1  christos $awk '{	w = x = y = z = $0
     60  1.1  christos         gsub( /\\\\/, "\\", w); print "	" w
     61  1.1  christos         gsub( /\\\\/, "\\\\", x); print "	" x
     62  1.1  christos         gsub( /\\\\/, "\\\\\\", y); print "	" y
     63  1.1  christos }
     64  1.1  christos ' foo >foo2
     65  1.1  christos cmp -s foo1 foo2 || ./echo 'BAD: T.gawk backgsub2'
     66  1.1  christos 
     67  1.1  christos 
     68  1.1  christos # backgsub3:
     69  1.1  christos ./echo 'xax
     70  1.1  christos xaax' >foo
     71  1.1  christos ./echo '	xax
     72  1.1  christos 	x&x
     73  1.1  christos 	x&x
     74  1.1  christos 	x\ax
     75  1.1  christos 	x\ax
     76  1.1  christos 	x\&x
     77  1.1  christos 	xaax
     78  1.1  christos 	x&&x
     79  1.1  christos 	x&&x
     80  1.1  christos 	x\a\ax
     81  1.1  christos 	x\a\ax
     82  1.1  christos 	x\&\&x' >foo1
     83  1.1  christos $awk '{	w = x = y = z = z1 = z2 = $0
     84  1.1  christos         gsub( /a/, "\&", w); print "	" w
     85  1.1  christos         gsub( /a/, "\\&", x); print "	" x
     86  1.1  christos         gsub( /a/, "\\\&", y); print "	" y
     87  1.1  christos         gsub( /a/, "\\\\&", z); print "	" z
     88  1.1  christos         gsub( /a/, "\\\\\&", z1); print "	" z1
     89  1.1  christos         gsub( /a/, "\\\\\\&", z2); print "	" z2
     90  1.1  christos }
     91  1.1  christos ' foo >foo2
     92  1.1  christos cmp -s foo1 foo2 || ./echo 'BAD: T.gawk backgsub3'
     93  1.1  christos 
     94  1.1  christos 
     95  1.1  christos # backsub3:
     96  1.1  christos ./echo 'xax
     97  1.1  christos xaax' >foo
     98  1.1  christos ./echo '	xax
     99  1.1  christos 	x&x
    100  1.1  christos 	x&x
    101  1.1  christos 	x\ax
    102  1.1  christos 	x\ax
    103  1.1  christos 	x\&x
    104  1.1  christos 	xaax
    105  1.1  christos 	x&ax
    106  1.1  christos 	x&ax
    107  1.1  christos 	x\aax
    108  1.1  christos 	x\aax
    109  1.1  christos 	x\&ax' >foo1
    110  1.1  christos $awk '{	w = x = y = z = z1 = z2 = $0
    111  1.1  christos         sub( /a/, "\&", w); print "	" w
    112  1.1  christos         sub( /a/, "\\&", x); print "	" x
    113  1.1  christos         sub( /a/, "\\\&", y); print "	" y
    114  1.1  christos         sub( /a/, "\\\\&", z); print "	" z
    115  1.1  christos         sub( /a/, "\\\\\&", z1); print "	" z1
    116  1.1  christos         sub( /a/, "\\\\\\&", z2); print "	" z2
    117  1.1  christos }
    118  1.1  christos ' foo >foo2
    119  1.1  christos cmp -s foo1 foo2 || ./echo 'BAD: T.gawk backsub3'
    120  1.1  christos 
    121  1.1  christos 
    122  1.1  christos # backsub:
    123  1.1  christos ./echo 'x\y
    124  1.1  christos x\\y' >foo
    125  1.1  christos ./echo 'x\y
    126  1.1  christos x\\y
    127  1.1  christos x\\y
    128  1.1  christos x\\\y' >foo1
    129  1.1  christos $awk '{	x = y = $0
    130  1.1  christos         sub( /\\\\/, "\\\\", x); print x
    131  1.1  christos         sub( "\\\\", "\\\\", y); print y
    132  1.1  christos }' foo >foo2
    133  1.1  christos cmp -s foo1 foo2 || ./echo 'BAD: T.gawk backsub'
    134  1.1  christos 
    135  1.1  christos 
    136  1.1  christos 
    137  1.1  christos 
    138  1.1  christos # dynlj:  
    139  1.1  christos ./echo 'hello               world' >foo1
    140  1.1  christos $awk 'BEGIN { printf "%*sworld\n", -20, "hello" }' >foo2
    141  1.1  christos cmp -s foo1 foo2 || ./echo 'BAD: T.gawk dynlj'
    142  1.1  christos 
    143  1.1  christos # fsrs:  
    144  1.1  christos ./echo 'a b
    145  1.1  christos c d
    146  1.1  christos e f
    147  1.1  christos 
    148  1.1  christos 1 2
    149  1.1  christos 3 4
    150  1.1  christos 5 6' >foo
    151  1.1  christos # note -n:
    152  1.1  christos ./echo -n 'a b
    153  1.1  christos c d
    154  1.1  christos e f1 2
    155  1.1  christos 3 4
    156  1.1  christos 5 6' >foo1
    157  1.1  christos $awk '
    158  1.1  christos BEGIN {
    159  1.1  christos        RS=""; FS="\n";
    160  1.1  christos        ORS=""; OFS="\n";
    161  1.1  christos       }
    162  1.1  christos {
    163  1.1  christos         split ($2,f," ")
    164  1.1  christos         print $0;
    165  1.1  christos }' foo >foo2
    166  1.1  christos cmp -s foo1 foo2 || ./echo 'BAD: T.gawk fsrs'
    167  1.1  christos 
    168  1.1  christos # intest
    169  1.1  christos ./echo '0 1' >foo1
    170  1.1  christos $awk 'BEGIN {
    171  1.1  christos 	bool = ((b = 1) in c);
    172  1.1  christos 	print bool, b	# gawk-3.0.1 prints "0 "; should print "0 1"
    173  1.1  christos }' >foo2
    174  1.1  christos cmp -s foo1 foo2 || ./echo 'BAD: T.gawk intest'
    175  1.1  christos 
    176  1.1  christos # intprec:  
    177  1.1  christos ./echo '0000000005:000000000e' >foo1
    178  1.1  christos $awk 'BEGIN { printf "%.10d:%.10x\n", 5, 14 }' >foo2
    179  1.1  christos cmp -s foo1 foo2 || ./echo 'BAD: T.gawk intprec'
    180  1.1  christos 
    181  1.1  christos # litoct:  
    182  1.1  christos ./echo 'axb
    183  1.1  christos ab
    184  1.1  christos a*b' >foo
    185  1.1  christos ./echo 'no match
    186  1.1  christos no match
    187  1.1  christos match' >foo1
    188  1.1  christos $awk '{ if (/a\52b/) print "match" ; else print "no match" }' foo >foo2
    189  1.1  christos cmp -s foo1 foo2 || ./echo 'BAD: T.gawk litoct'
    190  1.1  christos 
    191  1.1  christos # math:  
    192  1.1  christos ./echo 'cos(0.785398) = 0.707107
    193  1.1  christos sin(0.785398) = 0.707107
    194  1.1  christos e = 2.718282
    195  1.1  christos log(e) = 1.000000
    196  1.1  christos sqrt(pi ^ 2) = 3.141593
    197  1.1  christos atan2(1, 1) = 0.785398' >foo1
    198  1.1  christos $awk 'BEGIN {
    199  1.1  christos 	pi = 3.1415927
    200  1.1  christos 	printf "cos(%f) = %f\n", pi/4, cos(pi/4)
    201  1.1  christos 	printf "sin(%f) = %f\n", pi/4, sin(pi/4)
    202  1.1  christos 	e = exp(1)
    203  1.1  christos 	printf "e = %f\n", e
    204  1.1  christos 	printf "log(e) = %f\n", log(e)
    205  1.1  christos 	printf "sqrt(pi ^ 2) = %f\n", sqrt(pi ^ 2)
    206  1.1  christos 	printf "atan2(1, 1) = %f\n", atan2(1, 1)
    207  1.1  christos }' >foo2
    208  1.1  christos cmp -s foo1 foo2 || ./echo 'BAD: T.gawk math'
    209  1.1  christos 
    210  1.1  christos # nlfldsep:  
    211  1.1  christos ./echo 'some stuff
    212  1.1  christos more stuffA
    213  1.1  christos junk
    214  1.1  christos stuffA
    215  1.1  christos final' >foo
    216  1.1  christos ./echo '4
    217  1.1  christos some
    218  1.1  christos stuff
    219  1.1  christos more
    220  1.1  christos stuff
    221  1.1  christos 
    222  1.1  christos 2
    223  1.1  christos junk
    224  1.1  christos stuff
    225  1.1  christos 
    226  1.1  christos 1
    227  1.1  christos final
    228  1.1  christos ' >foo1
    229  1.1  christos $awk 'BEGIN { RS = "A" }
    230  1.1  christos {print NF; for (i = 1; i <= NF; i++) print $i ; print ""}
    231  1.1  christos ' foo >foo2
    232  1.1  christos cmp -s foo1 foo2 || ./echo 'BAD: T.gawk nlfldsep'
    233  1.1  christos 
    234  1.1  christos # numsubstr:  
    235  1.1  christos ./echo '5000
    236  1.1  christos 10000
    237  1.1  christos 5000' >foo
    238  1.1  christos ./echo '000
    239  1.1  christos 1000
    240  1.1  christos 000' >foo1
    241  1.1  christos $awk '{ print substr(1000+$1, 2) }' foo >foo2
    242  1.1  christos cmp -s foo1 foo2 || ./echo 'BAD: T.gawk numsubstr'
    243  1.1  christos 
    244  1.1  christos # pcntplus:  
    245  1.1  christos ./echo '+3 4' >foo1
    246  1.1  christos $awk 'BEGIN { printf "%+d %d\n", 3, 4 }' >foo2
    247  1.1  christos cmp -s foo1 foo2 || ./echo 'BAD: T.gawk pcntplus'
    248  1.1  christos 
    249  1.1  christos # prt1eval:  
    250  1.1  christos ./echo 1 >foo1
    251  1.1  christos $awk 'function tst () {
    252  1.1  christos 	sum += 1
    253  1.1  christos 	return sum
    254  1.1  christos }
    255  1.1  christos BEGIN { OFMT = "%.0f" ; print tst() }
    256  1.1  christos ' >foo2
    257  1.1  christos cmp -s foo1 foo2 || ./echo 'BAD: T.gawk prt1eval'
    258  1.1  christos 
    259  1.1  christos # reparse:  
    260  1.1  christos ./echo '1 axbxc 2' >foo
    261  1.1  christos ./echo '1
    262  1.1  christos 1 a b c 2
    263  1.1  christos 1 a b' >foo1
    264  1.1  christos $awk '{	gsub(/x/, " ")
    265  1.1  christos 	$0 = $0
    266  1.1  christos 	print $1
    267  1.1  christos 	print $0
    268  1.1  christos 	print $1, $2, $3
    269  1.1  christos }' foo >foo2
    270  1.1  christos cmp -s foo1 foo2 || ./echo 'BAD: T.gawk reparse'
    271  1.1  christos 
    272  1.1  christos # rswhite:  
    273  1.1  christos ./echo '    a b
    274  1.1  christos c d' >foo
    275  1.1  christos ./echo '<    a b
    276  1.1  christos c d>' >foo1
    277  1.1  christos $awk 'BEGIN { RS = "" }
    278  1.1  christos { printf("<%s>\n", $0) }' foo  >foo2
    279  1.1  christos cmp -s foo1 foo2 || ./echo 'BAD: T.gawk rswhite'
    280  1.1  christos 
    281  1.1  christos # splitvar:  
    282  1.1  christos ./echo 'Here===Is=Some=====Data' >foo
    283  1.1  christos ./echo 4 >foo1
    284  1.1  christos $awk '{	sep = "=+"
    285  1.1  christos 	n = split($0, a, sep)
    286  1.1  christos 	print n
    287  1.1  christos }' foo >foo2
    288  1.1  christos cmp -s foo1 foo2 || ./echo 'BAD: T.gawk splitvar'
    289  1.1  christos 
    290  1.1  christos # splitwht:  
    291  1.1  christos ./echo '4
    292  1.1  christos 5' >foo1
    293  1.1  christos $awk 'BEGIN {
    294  1.1  christos 	str = "a   b\t\tc d"
    295  1.1  christos 	n = split(str, a, " ")
    296  1.1  christos 	print n
    297  1.1  christos 	m = split(str, b, / /)
    298  1.1  christos 	print m
    299  1.1  christos }' >foo2
    300  1.1  christos cmp -s foo1 foo2 || ./echo 'BAD: T.gawk splitwht'
    301  1.1  christos 
    302  1.1  christos # sprintfc:  
    303  1.1  christos ./echo '65
    304  1.1  christos 66
    305  1.1  christos foo' >foo
    306  1.1  christos ./echo 'A 65
    307  1.1  christos B 66
    308  1.1  christos f foo' >foo1
    309  1.1  christos $awk '{ print sprintf("%c", $1), $1 }' foo >foo2
    310  1.1  christos cmp -s foo1 foo2 || ./echo 'BAD: T.gawk sprintfc'
    311  1.1  christos 
    312  1.1  christos # substr:  
    313  1.1  christos ./echo 'xxA                                      
    314  1.1  christos xxab
    315  1.1  christos xxbc
    316  1.1  christos xxab
    317  1.1  christos xx
    318  1.1  christos xx
    319  1.1  christos xxab
    320  1.1  christos xx
    321  1.1  christos xxef
    322  1.1  christos xx' >foo1
    323  1.1  christos $awk 'BEGIN {
    324  1.1  christos 	x = "A"
    325  1.1  christos 	printf("xx%-39s\n", substr(x,1,39))
    326  1.1  christos 	print "xx" substr("abcdef", 0, 2)
    327  1.1  christos 	print "xx" substr("abcdef", 2.3, 2)
    328  1.1  christos 	print "xx" substr("abcdef", -1, 2)
    329  1.1  christos 	print "xx" substr("abcdef", 1, 0)
    330  1.1  christos 	print "xx" substr("abcdef", 1, -3)
    331  1.1  christos 	print "xx" substr("abcdef", 1, 2.3)
    332  1.1  christos 	print "xx" substr("", 1, 2)
    333  1.1  christos 	print "xx" substr("abcdef", 5, 5)
    334  1.1  christos 	print "xx" substr("abcdef", 7, 2)
    335  1.1  christos 	exit (0)
    336  1.1  christos }' >foo2
    337  1.1  christos cmp -s foo1 foo2 || ./echo 'BAD: T.gawk substr'
    338  1.1  christos 
    339  1.1  christos # fldchg:  
    340  1.1  christos ./echo 'aa aab c d e f' >foo
    341  1.1  christos ./echo '1: + +b c d e f
    342  1.1  christos 2: + +b <c> d e f
    343  1.1  christos 2a:%+%+b%<c>%d%e' >foo1
    344  1.1  christos $awk '{	gsub("aa", "+")
    345  1.1  christos 	print "1:", $0
    346  1.1  christos 	$3 = "<" $3 ">"
    347  1.1  christos 	print "2:", $0
    348  1.1  christos 	print "2a:" "%" $1 "%" $2 "%" $3 "%" $4 "%" $5
    349  1.1  christos }' foo >foo2
    350  1.1  christos cmp -s foo1 foo2 || ./echo 'BAD: T.gawk fldchg'
    351  1.1  christos 
    352  1.1  christos # fldchgnf:  
    353  1.1  christos ./echo 'a b c d' >foo
    354  1.1  christos ./echo 'a::c:d
    355  1.1  christos 4' >foo1
    356  1.1  christos $awk '{ OFS = ":"; $2 = ""; print $0; print NF }' foo >foo2
    357  1.1  christos cmp -s foo1 foo2 || ./echo 'BAD: T.gawk fldchgnf'
    358  1.1  christos 
    359  1.1  christos # funstack:
    360  1.1  christos # ./echo '	funstack test takes 5-10 sec, replicates part of T.beebe'
    361  1.1  christos $awk -f funstack.awk funstack.in >foo 2>&1
    362  1.1  christos cmp -s foo funstack.ok || ./echo 'BAD: T.gawk funstack'
    363  1.1  christos 
    364  1.1  christos # OFMT from arnold robbins 6/02:
    365  1.1  christos #	5.7 with OFMT = %0.f is 6
    366  1.1  christos ./echo '6' >foo1
    367  1.1  christos $awk 'BEGIN {
    368  1.1  christos 	OFMT = "%.0f"
    369  1.1  christos 	print 5.7
    370  1.1  christos }' >foo2
    371  1.1  christos cmp -s foo1 foo2 || ./echo 'BAD: T.gawk ofmt'
    372  1.1  christos 
    373  1.1  christos 
    374  1.1  christos ### don't know what this is supposed to do now.
    375  1.1  christos ### # convfmt:  
    376  1.1  christos ### ./echo 'a =  123.46
    377  1.1  christos ### a =  123.456
    378  1.1  christos ### a =  123.456' >foo1
    379  1.1  christos ### $awk 'BEGIN {
    380  1.1  christos ### 	CONVFMT = "%2.2f"
    381  1.1  christos ### 	a = 123.456
    382  1.1  christos ### 	b = a ""                # give a string value also
    383  1.1  christos ### 	a += 0                  # make a numeric only again
    384  1.1  christos ### 	print "a = ", a
    385  1.1  christos ### 	CONVFMT = "%.6g"
    386  1.1  christos ### 	print "a = ", a
    387  1.1  christos ### 	a += 0                  # make a numeric only again
    388  1.1  christos ### 	print "a = ", a    # use a as string
    389  1.1  christos ### }' >foo2
    390  1.1  christos ### cmp -s foo1 foo2 || ./echo 'BAD: T.gawk convfmt'
    391