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