1#!/bin/bash
2
3if [[ -z "$AWK" ]]; then
4    printf '$AWK must be set\n' >&2
5    exit 1
6fi
7
8echo T.re: tests of regular expression code
9
10$AWK '
11BEGIN {
12	FS = "\t"
13	awk = ENVIRON["AWK"]
14}
15NF == 0 {
16	next
17}
18$1 != "" {	# new test
19	re = $1
20}
21$2 != "" {	# either ~ or !~
22	op = $2
23	if (op == "~")
24		neg = "!"
25	else if (op == "!~")
26		neg = ""
27}
28$3 != "" {	# new test string
29	str = $3
30}
31$3 == "\"\"" {	# explicit empty line
32	$3 = ""
33}
34NF > 2 {	# generate a test
35	input = $3
36	test = sprintf("printf %%s\\\\n '"'"'%s'"'"' | %s '"'"'%s/%s/ {print \"%d fails %s %s %s\"; exit 1}'"'"'",
37		input, awk, neg, re, NR, re, op, input)
38	# printf(" %3d   %s %s %s:\n", NR, re, op, input)
39	# print "test is |" test "|"
40	tcode = system(test)
41	if (tcode > 0) {
42		ecode = 1
43	}
44	# system("bprint -c ../a.out")
45	nt++
46}
47END {
48	print "	" nt, "tests"
49	exit ecode
50}
51' <<\!!!!
52a	~	a
53		ba
54		bab
55	!~	""
56		x
57		xxxxx
58.	~	x
59		xxx
60	!~	""
61.a	~	xa
62		xxa
63		xax
64	!~	a
65		ax
66		""
67$	~	x
68		""
69.$	~	x
70		xx
71	!~	""
72a$	~	a
73		ba
74		bbba
75	!~	ab
76		x
77		""
78^	~	x
79		""
80		^
81^a$	~	a
82	!~	xa
83		ax
84		xax
85		""
86^a.$	~	ax
87		aa
88	!~	xa
89		aaa
90		axy
91		""
92^$	~	""
93	!~	x
94		^
95^.a	~	xa
96		xaa
97	!~	a
98		""
99^.*a	~	a
100		xa
101		xxxxxxa
102	!~	""
103^.+a	~	xa
104		xxxxxxa
105	!~	""
106		a
107		ax
108a*	~	""
109		a
110		aaaa
111		xa
112		xxxx
113aa*	~	a
114		aaa
115		xa
116	!~	xxxx
117		""
118\$	~	x$
119		$
120		$x
121		x$x
122	!~	""
123		x
124\.	~	.
125	!~	x
126		""
127xr+y	~	xry
128		xrry
129		xrrrrrry
130	!~	ry
131		xy
132		xr
133xr?y	~	xy
134		xry
135	!~	xrry
136a?b?c?	~	""
137		x
138^a?b?x	~	x
139		ax
140		bx
141		abx
142		xa
143	!~	""
144		ab
145		aba
146[0-9]	~	1
147		567
148		x0y
149	!~	abc
150		""
151[^0-9]	!~	1
152		567
153		""
154	~	abc
155		x0y
156[0-25-69]	~	0
157		1
158		2
159		5
160		6
161		9
162	!~	3
163		4
164		7
165		8
166x[0-9]+y	~	x0y
167		x23y
168		x12345y
169	!~	0y
170		xy
171x[0-9]?y	~	xy
172		x1y
173	!~	x23y
174x[[]y	~	x[y
175	!~	xy
176		x[[]y
177		x]y
178x[[-]y	~	x[y
179		x-y
180	!~	xy
181		x[[]y
182		x]y
183x[[-a]y	~	x[y
184		xay
185		x]y
186	!~	xy
187		x[[]y
188		x-y
189x[]]y	~	x]y
190	!~	xy
191		x[]]y
192		x[y
193x[^[]y	~	xay
194	!~	x[y
195x[-]y	~	x-y
196	!~	xy
197		x+y
198x[^-]y	~	x+y
199	!~	x-y
200		xy
201[0\-9]	~	0
202		-
203		9
204	!~	1
205		""
206[-1]	~	-
207		1
208	!~	0
209[0-]	~	0
210		-
211	!~	1
212[^-0]	~	x
213		^
214	!~	-
215		0
216		""
217[^0-]	~	x
218		^
219	!~	-
220		0
221		""
222x|y	~	x
223		y
224		xy
225	!~	a
226		""
227^abc|xyz$	~	abc
228		abcd
229		axyz
230		xyz
231	!~	xabc
232		xyza
233^(abc|xyz)$	~	abc
234		xyz
235	!~	abcxyz
236		abcx
237		cxyz
238^x\|y$	~	x|y
239	!~	xy
240^x\\y$	~	x\y
241	!~	xy
242		x\\y
243		xay
244\141\142	~	ab
245		xab
246		abx
247	!~	a
248		b
249		ax
250		axb
251x\056y	~	x.y
252	!~	x.
253		.x
254		xxx
255		xby  because \056 is not the metacharacter .
256		xcy  ditto
257[\60-\62\65-6\71]	~	0
258		1
259		2
260		5
261		6
262		9
263[\60-2\65-6\71]	~	0
264		1
265		2
266		5
267		6
268		9
269[\x30-\x32\x35-6\71]	~	0
270		1
271		2
272		5
273		6
274		9
275[\x30-2\x35-6\x39]	~	0
276		1
277		2
278		5
279		6
280		9
281\f	!~	x
282\b	!~	x
283\r	!~	x
284\n	!~	x
285!!!!
286