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