T.gawk revision 1.1 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