1e6d6c189SCody Peter Mello#!/bin/bash
2e6d6c189SCody Peter Mello
3e6d6c189SCody Peter Melloif [[ -z "$AWK" ]]; then
4e6d6c189SCody Peter Mello    printf '$AWK must be set\n' >&2
5e6d6c189SCody Peter Mello    exit 1
6e6d6c189SCody Peter Mellofi
7e6d6c189SCody Peter Mello
8e6d6c189SCody Peter Melloecho T.re: tests of regular expression code
9e6d6c189SCody Peter Mello
10e6d6c189SCody Peter Mello$AWK '
11e6d6c189SCody Peter MelloBEGIN {
12e6d6c189SCody Peter Mello	FS = "\t"
13e6d6c189SCody Peter Mello	awk = ENVIRON["AWK"]
14e6d6c189SCody Peter Mello}
15e6d6c189SCody Peter MelloNF == 0 {
16e6d6c189SCody Peter Mello	next
17e6d6c189SCody Peter Mello}
18e6d6c189SCody Peter Mello$1 != "" {	# new test
19e6d6c189SCody Peter Mello	re = $1
20e6d6c189SCody Peter Mello}
21e6d6c189SCody Peter Mello$2 != "" {	# either ~ or !~
22e6d6c189SCody Peter Mello	op = $2
23e6d6c189SCody Peter Mello	if (op == "~")
24e6d6c189SCody Peter Mello		neg = "!"
25e6d6c189SCody Peter Mello	else if (op == "!~")
26e6d6c189SCody Peter Mello		neg = ""
27e6d6c189SCody Peter Mello}
28e6d6c189SCody Peter Mello$3 != "" {	# new test string
29e6d6c189SCody Peter Mello	str = $3
30e6d6c189SCody Peter Mello}
31e6d6c189SCody Peter Mello$3 == "\"\"" {	# explicit empty line
32e6d6c189SCody Peter Mello	$3 = ""
33e6d6c189SCody Peter Mello}
34e6d6c189SCody Peter MelloNF > 2 {	# generate a test
35e6d6c189SCody Peter Mello	input = $3
36e6d6c189SCody Peter Mello	test = sprintf("printf %%s\\\\n '"'"'%s'"'"' | %s '"'"'%s/%s/ {print \"%d fails %s %s %s\"; exit 1}'"'"'",
37e6d6c189SCody Peter Mello		input, awk, neg, re, NR, re, op, input)
38e6d6c189SCody Peter Mello	# printf(" %3d   %s %s %s:\n", NR, re, op, input)
39e6d6c189SCody Peter Mello	# print "test is |" test "|"
40e6d6c189SCody Peter Mello	tcode = system(test)
41e6d6c189SCody Peter Mello	if (tcode > 0) {
42e6d6c189SCody Peter Mello		ecode = 1
43e6d6c189SCody Peter Mello	}
44e6d6c189SCody Peter Mello	# system("bprint -c ../a.out")
45e6d6c189SCody Peter Mello	nt++
46e6d6c189SCody Peter Mello}
47e6d6c189SCody Peter MelloEND {
48e6d6c189SCody Peter Mello	print "	" nt, "tests"
49e6d6c189SCody Peter Mello	exit ecode
50e6d6c189SCody Peter Mello}
51e6d6c189SCody Peter Mello' <<\!!!!
52*3ee4fc2aSCody Peter Mello	~	a
53*3ee4fc2aSCody Peter Mello		aa
54*3ee4fc2aSCody Peter Mello		aaa
55*3ee4fc2aSCody Peter Mello		""
56e6d6c189SCody Peter Melloa	~	a
57e6d6c189SCody Peter Mello		ba
58e6d6c189SCody Peter Mello		bab
59e6d6c189SCody Peter Mello	!~	""
60e6d6c189SCody Peter Mello		x
61e6d6c189SCody Peter Mello		xxxxx
62*3ee4fc2aSCody Peter Mello=	~	=
63*3ee4fc2aSCody Peter Mello		b=
64*3ee4fc2aSCody Peter Mello		b=b
65*3ee4fc2aSCody Peter Mello	!~	""
66*3ee4fc2aSCody Peter Mello		x
67*3ee4fc2aSCody Peter Mello		xxxxx
68e6d6c189SCody Peter Mello.	~	x
69e6d6c189SCody Peter Mello		xxx
70e6d6c189SCody Peter Mello	!~	""
71e6d6c189SCody Peter Mello.a	~	xa
72e6d6c189SCody Peter Mello		xxa
73e6d6c189SCody Peter Mello		xax
74e6d6c189SCody Peter Mello	!~	a
75e6d6c189SCody Peter Mello		ax
76e6d6c189SCody Peter Mello		""
77e6d6c189SCody Peter Mello$	~	x
78e6d6c189SCody Peter Mello		""
79e6d6c189SCody Peter Mello.$	~	x
80e6d6c189SCody Peter Mello		xx
81e6d6c189SCody Peter Mello	!~	""
82e6d6c189SCody Peter Melloa$	~	a
83e6d6c189SCody Peter Mello		ba
84e6d6c189SCody Peter Mello		bbba
85e6d6c189SCody Peter Mello	!~	ab
86e6d6c189SCody Peter Mello		x
87e6d6c189SCody Peter Mello		""
88e6d6c189SCody Peter Mello^	~	x
89e6d6c189SCody Peter Mello		""
90e6d6c189SCody Peter Mello		^
91e6d6c189SCody Peter Mello^a$	~	a
92e6d6c189SCody Peter Mello	!~	xa
93e6d6c189SCody Peter Mello		ax
94e6d6c189SCody Peter Mello		xax
95e6d6c189SCody Peter Mello		""
96e6d6c189SCody Peter Mello^a.$	~	ax
97e6d6c189SCody Peter Mello		aa
98e6d6c189SCody Peter Mello	!~	xa
99e6d6c189SCody Peter Mello		aaa
100e6d6c189SCody Peter Mello		axy
101e6d6c189SCody Peter Mello		""
102e6d6c189SCody Peter Mello^$	~	""
103e6d6c189SCody Peter Mello	!~	x
104e6d6c189SCody Peter Mello		^
105e6d6c189SCody Peter Mello^.a	~	xa
106e6d6c189SCody Peter Mello		xaa
107e6d6c189SCody Peter Mello	!~	a
108e6d6c189SCody Peter Mello		""
109e6d6c189SCody Peter Mello^.*a	~	a
110e6d6c189SCody Peter Mello		xa
111e6d6c189SCody Peter Mello		xxxxxxa
112e6d6c189SCody Peter Mello	!~	""
113e6d6c189SCody Peter Mello^.+a	~	xa
114e6d6c189SCody Peter Mello		xxxxxxa
115e6d6c189SCody Peter Mello	!~	""
116e6d6c189SCody Peter Mello		a
117e6d6c189SCody Peter Mello		ax
118e6d6c189SCody Peter Melloa*	~	""
119e6d6c189SCody Peter Mello		a
120e6d6c189SCody Peter Mello		aaaa
121e6d6c189SCody Peter Mello		xa
122e6d6c189SCody Peter Mello		xxxx
123e6d6c189SCody Peter Melloaa*	~	a
124e6d6c189SCody Peter Mello		aaa
125e6d6c189SCody Peter Mello		xa
126e6d6c189SCody Peter Mello	!~	xxxx
127e6d6c189SCody Peter Mello		""
128e6d6c189SCody Peter Mello\$	~	x$
129e6d6c189SCody Peter Mello		$
130e6d6c189SCody Peter Mello		$x
131e6d6c189SCody Peter Mello		x$x
132e6d6c189SCody Peter Mello	!~	""
133e6d6c189SCody Peter Mello		x
134e6d6c189SCody Peter Mello\.	~	.
135e6d6c189SCody Peter Mello	!~	x
136e6d6c189SCody Peter Mello		""
137e6d6c189SCody Peter Melloxr+y	~	xry
138e6d6c189SCody Peter Mello		xrry
139e6d6c189SCody Peter Mello		xrrrrrry
140e6d6c189SCody Peter Mello	!~	ry
141e6d6c189SCody Peter Mello		xy
142e6d6c189SCody Peter Mello		xr
143e6d6c189SCody Peter Melloxr?y	~	xy
144e6d6c189SCody Peter Mello		xry
145e6d6c189SCody Peter Mello	!~	xrry
146e6d6c189SCody Peter Melloa?b?c?	~	""
147e6d6c189SCody Peter Mello		x
148e6d6c189SCody Peter Mello^a?b?x	~	x
149e6d6c189SCody Peter Mello		ax
150e6d6c189SCody Peter Mello		bx
151e6d6c189SCody Peter Mello		abx
152e6d6c189SCody Peter Mello		xa
153e6d6c189SCody Peter Mello	!~	""
154e6d6c189SCody Peter Mello		ab
155e6d6c189SCody Peter Mello		aba
156e6d6c189SCody Peter Mello[0-9]	~	1
157e6d6c189SCody Peter Mello		567
158e6d6c189SCody Peter Mello		x0y
159e6d6c189SCody Peter Mello	!~	abc
160e6d6c189SCody Peter Mello		""
161e6d6c189SCody Peter Mello[^0-9]	!~	1
162e6d6c189SCody Peter Mello		567
163e6d6c189SCody Peter Mello		""
164e6d6c189SCody Peter Mello	~	abc
165e6d6c189SCody Peter Mello		x0y
166e6d6c189SCody Peter Mello[0-25-69]	~	0
167e6d6c189SCody Peter Mello		1
168e6d6c189SCody Peter Mello		2
169e6d6c189SCody Peter Mello		5
170e6d6c189SCody Peter Mello		6
171e6d6c189SCody Peter Mello		9
172e6d6c189SCody Peter Mello	!~	3
173e6d6c189SCody Peter Mello		4
174e6d6c189SCody Peter Mello		7
175e6d6c189SCody Peter Mello		8
176*3ee4fc2aSCody Peter Mello[[:lower:]]	~	a
177*3ee4fc2aSCody Peter Mello		b
178*3ee4fc2aSCody Peter Mello		z
179*3ee4fc2aSCody Peter Mello	!~	A
180*3ee4fc2aSCody Peter Mello		Z
181*3ee4fc2aSCody Peter Mello		1
182*3ee4fc2aSCody Peter Mello		:
183*3ee4fc2aSCody Peter Mello		[
184*3ee4fc2aSCody Peter Mello		]
185*3ee4fc2aSCody Peter Mello[[:upper:]]	~	A
186*3ee4fc2aSCody Peter Mello		B
187*3ee4fc2aSCody Peter Mello		Z
188*3ee4fc2aSCody Peter Mello	!~	a
189*3ee4fc2aSCody Peter Mello		z
190*3ee4fc2aSCody Peter Mello		1
191*3ee4fc2aSCody Peter Mello		:
192*3ee4fc2aSCody Peter Mello		[
193*3ee4fc2aSCody Peter Mello		]
194*3ee4fc2aSCody Peter Mello[[:lower:][:upper:]]	~	A
195*3ee4fc2aSCody Peter Mello		B
196*3ee4fc2aSCody Peter Mello		Z
197*3ee4fc2aSCody Peter Mello		a
198*3ee4fc2aSCody Peter Mello		b
199*3ee4fc2aSCody Peter Mello		z
200*3ee4fc2aSCody Peter Mello	!~	1
201*3ee4fc2aSCody Peter Mello		:
202*3ee4fc2aSCody Peter Mello		[
203*3ee4fc2aSCody Peter Mello		]
204*3ee4fc2aSCody Peter Mello[[:digit:]]	~	0
205*3ee4fc2aSCody Peter Mello		1
206*3ee4fc2aSCody Peter Mello		9
207*3ee4fc2aSCody Peter Mello	!~	d
208*3ee4fc2aSCody Peter Mello		:
209*3ee4fc2aSCody Peter Mello		[
210*3ee4fc2aSCody Peter Mello		]
211*3ee4fc2aSCody Peter Mello[[:xdigit:]]	~	0
212*3ee4fc2aSCody Peter Mello		1
213*3ee4fc2aSCody Peter Mello		9
214*3ee4fc2aSCody Peter Mello		a
215*3ee4fc2aSCody Peter Mello		d
216*3ee4fc2aSCody Peter Mello		f
217*3ee4fc2aSCody Peter Mello	!~	g
218*3ee4fc2aSCody Peter Mello		z
219*3ee4fc2aSCody Peter Mello		:
220*3ee4fc2aSCody Peter Mello		[
221*3ee4fc2aSCody Peter Mello		]
222*3ee4fc2aSCody Peter Mello[[:cntrl:]]	~	
223*3ee4fc2aSCody Peter Mello		
224*3ee4fc2aSCody Peter Mello		
225*3ee4fc2aSCody Peter Mello		
226*3ee4fc2aSCody Peter Mello	!~	.
227*3ee4fc2aSCody Peter Mello		Z
228*3ee4fc2aSCody Peter Mello		G
229*3ee4fc2aSCody Peter Mello		[
230*3ee4fc2aSCody Peter Mello		]
231*3ee4fc2aSCody Peter Mello[[:punct:]]	~	:
232*3ee4fc2aSCody Peter Mello		,
233*3ee4fc2aSCody Peter Mello		-
234*3ee4fc2aSCody Peter Mello		*
235*3ee4fc2aSCody Peter Mello		@
236*3ee4fc2aSCody Peter Mello	!~	a
237*3ee4fc2aSCody Peter Mello		1
238*3ee4fc2aSCody Peter Mello		U
239*3ee4fc2aSCody Peter Mello
240*3ee4fc2aSCody Peter Mello		
241e6d6c189SCody Peter Mellox[0-9]+y	~	x0y
242e6d6c189SCody Peter Mello		x23y
243e6d6c189SCody Peter Mello		x12345y
244e6d6c189SCody Peter Mello	!~	0y
245e6d6c189SCody Peter Mello		xy
246e6d6c189SCody Peter Mellox[0-9]?y	~	xy
247e6d6c189SCody Peter Mello		x1y
248e6d6c189SCody Peter Mello	!~	x23y
249e6d6c189SCody Peter Mellox[[]y	~	x[y
250e6d6c189SCody Peter Mello	!~	xy
251e6d6c189SCody Peter Mello		x[[]y
252e6d6c189SCody Peter Mello		x]y
253e6d6c189SCody Peter Mellox[[-]y	~	x[y
254e6d6c189SCody Peter Mello		x-y
255e6d6c189SCody Peter Mello	!~	xy
256e6d6c189SCody Peter Mello		x[[]y
257e6d6c189SCody Peter Mello		x]y
258e6d6c189SCody Peter Mellox[[-a]y	~	x[y
259e6d6c189SCody Peter Mello		xay
260e6d6c189SCody Peter Mello		x]y
261e6d6c189SCody Peter Mello	!~	xy
262e6d6c189SCody Peter Mello		x[[]y
263e6d6c189SCody Peter Mello		x-y
264*3ee4fc2aSCody Peter Mellox[]-a]y	~	x]y
265*3ee4fc2aSCody Peter Mello		xay
266*3ee4fc2aSCody Peter Mello	!~	xy
267*3ee4fc2aSCody Peter Mello		x[y
268*3ee4fc2aSCody Peter Mello		x-y
269e6d6c189SCody Peter Mellox[]]y	~	x]y
270e6d6c189SCody Peter Mello	!~	xy
271e6d6c189SCody Peter Mello		x[]]y
272e6d6c189SCody Peter Mello		x[y
273e6d6c189SCody Peter Mellox[^[]y	~	xay
274e6d6c189SCody Peter Mello	!~	x[y
275e6d6c189SCody Peter Mellox[-]y	~	x-y
276e6d6c189SCody Peter Mello	!~	xy
277e6d6c189SCody Peter Mello		x+y
278e6d6c189SCody Peter Mellox[^-]y	~	x+y
279e6d6c189SCody Peter Mello	!~	x-y
280e6d6c189SCody Peter Mello		xy
281*3ee4fc2aSCody Peter Mellox[][]y	~	x[y
282*3ee4fc2aSCody Peter Mello		x]y
283*3ee4fc2aSCody Peter Mello	!~	xy
284*3ee4fc2aSCody Peter Mello		x][y
285*3ee4fc2aSCody Peter Mello		x[]y
286*3ee4fc2aSCody Peter Mellox[z-a]y	~	xy
287*3ee4fc2aSCody Peter Mello	!~	x
288*3ee4fc2aSCody Peter Mello		y
289*3ee4fc2aSCody Peter Mello		xay
290*3ee4fc2aSCody Peter Mello		xzy
291*3ee4fc2aSCody Peter Mello		x-y
292e6d6c189SCody Peter Mello[0\-9]	~	0
293e6d6c189SCody Peter Mello		-
294e6d6c189SCody Peter Mello		9
295e6d6c189SCody Peter Mello	!~	1
296e6d6c189SCody Peter Mello		""
297e6d6c189SCody Peter Mello[-1]	~	-
298e6d6c189SCody Peter Mello		1
299e6d6c189SCody Peter Mello	!~	0
300e6d6c189SCody Peter Mello[0-]	~	0
301e6d6c189SCody Peter Mello		-
302e6d6c189SCody Peter Mello	!~	1
303e6d6c189SCody Peter Mello[^-0]	~	x
304e6d6c189SCody Peter Mello		^
305e6d6c189SCody Peter Mello	!~	-
306e6d6c189SCody Peter Mello		0
307e6d6c189SCody Peter Mello		""
308e6d6c189SCody Peter Mello[^0-]	~	x
309e6d6c189SCody Peter Mello		^
310e6d6c189SCody Peter Mello	!~	-
311e6d6c189SCody Peter Mello		0
312e6d6c189SCody Peter Mello		""
313e6d6c189SCody Peter Mellox|y	~	x
314e6d6c189SCody Peter Mello		y
315e6d6c189SCody Peter Mello		xy
316e6d6c189SCody Peter Mello	!~	a
317e6d6c189SCody Peter Mello		""
318e6d6c189SCody Peter Mello^abc|xyz$	~	abc
319e6d6c189SCody Peter Mello		abcd
320e6d6c189SCody Peter Mello		axyz
321e6d6c189SCody Peter Mello		xyz
322e6d6c189SCody Peter Mello	!~	xabc
323e6d6c189SCody Peter Mello		xyza
324e6d6c189SCody Peter Mello^(abc|xyz)$	~	abc
325e6d6c189SCody Peter Mello		xyz
326e6d6c189SCody Peter Mello	!~	abcxyz
327e6d6c189SCody Peter Mello		abcx
328e6d6c189SCody Peter Mello		cxyz
329e6d6c189SCody Peter Mello^x\|y$	~	x|y
330e6d6c189SCody Peter Mello	!~	xy
331e6d6c189SCody Peter Mello^x\\y$	~	x\y
332e6d6c189SCody Peter Mello	!~	xy
333e6d6c189SCody Peter Mello		x\\y
334e6d6c189SCody Peter Mello		xay
335e6d6c189SCody Peter Mello\141\142	~	ab
336e6d6c189SCody Peter Mello		xab
337e6d6c189SCody Peter Mello		abx
338e6d6c189SCody Peter Mello	!~	a
339e6d6c189SCody Peter Mello		b
340e6d6c189SCody Peter Mello		ax
341e6d6c189SCody Peter Mello		axb
342e6d6c189SCody Peter Mellox\056y	~	x.y
343e6d6c189SCody Peter Mello	!~	x.
344e6d6c189SCody Peter Mello		.x
345e6d6c189SCody Peter Mello		xxx
346e6d6c189SCody Peter Mello		xby  because \056 is not the metacharacter .
347e6d6c189SCody Peter Mello		xcy  ditto
348e6d6c189SCody Peter Mello[\60-\62\65-6\71]	~	0
349e6d6c189SCody Peter Mello		1
350e6d6c189SCody Peter Mello		2
351e6d6c189SCody Peter Mello		5
352e6d6c189SCody Peter Mello		6
353e6d6c189SCody Peter Mello		9
354*3ee4fc2aSCody Peter Mello	!~	3
355*3ee4fc2aSCody Peter Mello		4
356*3ee4fc2aSCody Peter Mello		7
357*3ee4fc2aSCody Peter Mello		8
358e6d6c189SCody Peter Mello[\60-2\65-6\71]	~	0
359e6d6c189SCody Peter Mello		1
360e6d6c189SCody Peter Mello		2
361e6d6c189SCody Peter Mello		5
362e6d6c189SCody Peter Mello		6
363e6d6c189SCody Peter Mello		9
364*3ee4fc2aSCody Peter Mello	!~	3
365*3ee4fc2aSCody Peter Mello		4
366*3ee4fc2aSCody Peter Mello		7
367*3ee4fc2aSCody Peter Mello		8
368e6d6c189SCody Peter Mello[\x30-\x32\x35-6\71]	~	0
369e6d6c189SCody Peter Mello		1
370e6d6c189SCody Peter Mello		2
371e6d6c189SCody Peter Mello		5
372e6d6c189SCody Peter Mello		6
373e6d6c189SCody Peter Mello		9
374*3ee4fc2aSCody Peter Mello	!~	3
375*3ee4fc2aSCody Peter Mello		4
376*3ee4fc2aSCody Peter Mello		7
377*3ee4fc2aSCody Peter Mello		8
378e6d6c189SCody Peter Mello[\x30-2\x35-6\x39]	~	0
379e6d6c189SCody Peter Mello		1
380e6d6c189SCody Peter Mello		2
381e6d6c189SCody Peter Mello		5
382e6d6c189SCody Peter Mello		6
383e6d6c189SCody Peter Mello		9
384*3ee4fc2aSCody Peter Mello	!~	3
385*3ee4fc2aSCody Peter Mello		4
386*3ee4fc2aSCody Peter Mello		7
387*3ee4fc2aSCody Peter Mello		8
388e6d6c189SCody Peter Mello\f	!~	x
389e6d6c189SCody Peter Mello\b	!~	x
390e6d6c189SCody Peter Mello\r	!~	x
391e6d6c189SCody Peter Mello\n	!~	x
392e6d6c189SCody Peter Mello!!!!
393