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