xref: /aosp_15_r20/external/libcups/vcnet/regex/tests (revision 5e7646d21f1134fb0638875d812ef646c12ab91e)
1*5e7646d2SAndroid Build Coastguard Worker# regular expression test set
2*5e7646d2SAndroid Build Coastguard Worker# Lines are at least three fields, separated by one or more tabs.  "" stands
3*5e7646d2SAndroid Build Coastguard Worker# for an empty field.  First field is an RE.  Second field is flags.  If
4*5e7646d2SAndroid Build Coastguard Worker# C flag given, regcomp() is expected to fail, and the third field is the
5*5e7646d2SAndroid Build Coastguard Worker# error name (minus the leading REG_).
6*5e7646d2SAndroid Build Coastguard Worker#
7*5e7646d2SAndroid Build Coastguard Worker# Otherwise it is expected to succeed, and the third field is the string to
8*5e7646d2SAndroid Build Coastguard Worker# try matching it against.  If there is no fourth field, the match is
9*5e7646d2SAndroid Build Coastguard Worker# expected to fail.  If there is a fourth field, it is the substring that
10*5e7646d2SAndroid Build Coastguard Worker# the RE is expected to match.  If there is a fifth field, it is a comma-
11*5e7646d2SAndroid Build Coastguard Worker# separated list of what the subexpressions should match, with - indicating
12*5e7646d2SAndroid Build Coastguard Worker# no match for that one.  In both the fourth and fifth fields, a (sub)field
13*5e7646d2SAndroid Build Coastguard Worker# starting with @ indicates that the (sub)expression is expected to match
14*5e7646d2SAndroid Build Coastguard Worker# a null string followed by the stuff after the @; this provides a way to
15*5e7646d2SAndroid Build Coastguard Worker# test where null strings match.  The character `N' in REs and strings
16*5e7646d2SAndroid Build Coastguard Worker# is newline, `S' is space, `T' is tab, `Z' is NUL.
17*5e7646d2SAndroid Build Coastguard Worker#
18*5e7646d2SAndroid Build Coastguard Worker# The full list of flags:
19*5e7646d2SAndroid Build Coastguard Worker#	-	placeholder, does nothing
20*5e7646d2SAndroid Build Coastguard Worker#	b	RE is a BRE, not an ERE
21*5e7646d2SAndroid Build Coastguard Worker#	&	try it as both an ERE and a BRE
22*5e7646d2SAndroid Build Coastguard Worker#	C	regcomp() error expected, third field is error name
23*5e7646d2SAndroid Build Coastguard Worker#	i	REG_ICASE
24*5e7646d2SAndroid Build Coastguard Worker#	m	("mundane") REG_NOSPEC
25*5e7646d2SAndroid Build Coastguard Worker#	s	REG_NOSUB (not really testable)
26*5e7646d2SAndroid Build Coastguard Worker#	n	REG_NEWLINE
27*5e7646d2SAndroid Build Coastguard Worker#	^	REG_NOTBOL
28*5e7646d2SAndroid Build Coastguard Worker#	$	REG_NOTEOL
29*5e7646d2SAndroid Build Coastguard Worker#	#	REG_STARTEND (see below)
30*5e7646d2SAndroid Build Coastguard Worker#	p	REG_PEND
31*5e7646d2SAndroid Build Coastguard Worker#
32*5e7646d2SAndroid Build Coastguard Worker# For REG_STARTEND, the start/end offsets are those of the substring
33*5e7646d2SAndroid Build Coastguard Worker# enclosed in ().
34*5e7646d2SAndroid Build Coastguard Worker
35*5e7646d2SAndroid Build Coastguard Worker# basics
36*5e7646d2SAndroid Build Coastguard Workera		&	a	a
37*5e7646d2SAndroid Build Coastguard Workerabc		&	abc	abc
38*5e7646d2SAndroid Build Coastguard Workerabc|de		-	abc	abc
39*5e7646d2SAndroid Build Coastguard Workera|b|c		-	abc	a
40*5e7646d2SAndroid Build Coastguard Worker
41*5e7646d2SAndroid Build Coastguard Worker# parentheses and perversions thereof
42*5e7646d2SAndroid Build Coastguard Workera(b)c		-	abc	abc
43*5e7646d2SAndroid Build Coastguard Workera\(b\)c		b	abc	abc
44*5e7646d2SAndroid Build Coastguard Workera(		C	EPAREN
45*5e7646d2SAndroid Build Coastguard Workera(		b	a(	a(
46*5e7646d2SAndroid Build Coastguard Workera\(		-	a(	a(
47*5e7646d2SAndroid Build Coastguard Workera\(		bC	EPAREN
48*5e7646d2SAndroid Build Coastguard Workera\(b		bC	EPAREN
49*5e7646d2SAndroid Build Coastguard Workera(b		C	EPAREN
50*5e7646d2SAndroid Build Coastguard Workera(b		b	a(b	a(b
51*5e7646d2SAndroid Build Coastguard Worker# gag me with a right parenthesis -- 1003.2 goofed here (my fault, partly)
52*5e7646d2SAndroid Build Coastguard Workera)		-	a)	a)
53*5e7646d2SAndroid Build Coastguard Worker)		-	)	)
54*5e7646d2SAndroid Build Coastguard Worker# end gagging (in a just world, those *should* give EPAREN)
55*5e7646d2SAndroid Build Coastguard Workera)		b	a)	a)
56*5e7646d2SAndroid Build Coastguard Workera\)		bC	EPAREN
57*5e7646d2SAndroid Build Coastguard Worker\)		bC	EPAREN
58*5e7646d2SAndroid Build Coastguard Workera()b		-	ab	ab
59*5e7646d2SAndroid Build Coastguard Workera\(\)b		b	ab	ab
60*5e7646d2SAndroid Build Coastguard Worker
61*5e7646d2SAndroid Build Coastguard Worker# anchoring and REG_NEWLINE
62*5e7646d2SAndroid Build Coastguard Worker^abc$		&	abc	abc
63*5e7646d2SAndroid Build Coastguard Workera^b		-	a^b
64*5e7646d2SAndroid Build Coastguard Workera^b		b	a^b	a^b
65*5e7646d2SAndroid Build Coastguard Workera$b		-	a$b
66*5e7646d2SAndroid Build Coastguard Workera$b		b	a$b	a$b
67*5e7646d2SAndroid Build Coastguard Worker^		&	abc	@abc
68*5e7646d2SAndroid Build Coastguard Worker$		&	abc	@
69*5e7646d2SAndroid Build Coastguard Worker^$		&	""	@
70*5e7646d2SAndroid Build Coastguard Worker$^		-	""	@
71*5e7646d2SAndroid Build Coastguard Worker\($\)\(^\)	b	""	@
72*5e7646d2SAndroid Build Coastguard Worker# stop retching, those are legitimate (although disgusting)
73*5e7646d2SAndroid Build Coastguard Worker^^		-	""	@
74*5e7646d2SAndroid Build Coastguard Worker$$		-	""	@
75*5e7646d2SAndroid Build Coastguard Workerb$		&	abNc
76*5e7646d2SAndroid Build Coastguard Workerb$		&n	abNc	b
77*5e7646d2SAndroid Build Coastguard Worker^b$		&	aNbNc
78*5e7646d2SAndroid Build Coastguard Worker^b$		&n	aNbNc	b
79*5e7646d2SAndroid Build Coastguard Worker^$		&n	aNNb	@Nb
80*5e7646d2SAndroid Build Coastguard Worker^$		n	abc
81*5e7646d2SAndroid Build Coastguard Worker^$		n	abcN	@
82*5e7646d2SAndroid Build Coastguard Worker$^		n	aNNb	@Nb
83*5e7646d2SAndroid Build Coastguard Worker\($\)\(^\)	bn	aNNb	@Nb
84*5e7646d2SAndroid Build Coastguard Worker^^		n^	aNNb	@Nb
85*5e7646d2SAndroid Build Coastguard Worker$$		n	aNNb	@NN
86*5e7646d2SAndroid Build Coastguard Worker^a		^	a
87*5e7646d2SAndroid Build Coastguard Workera$		$	a
88*5e7646d2SAndroid Build Coastguard Worker^a		^n	aNb
89*5e7646d2SAndroid Build Coastguard Worker^b		^n	aNb	b
90*5e7646d2SAndroid Build Coastguard Workera$		$n	bNa
91*5e7646d2SAndroid Build Coastguard Workerb$		$n	bNa	b
92*5e7646d2SAndroid Build Coastguard Workera*(^b$)c*	-	b	b
93*5e7646d2SAndroid Build Coastguard Workera*\(^b$\)c*	b	b	b
94*5e7646d2SAndroid Build Coastguard Worker
95*5e7646d2SAndroid Build Coastguard Worker# certain syntax errors and non-errors
96*5e7646d2SAndroid Build Coastguard Worker|		C	EMPTY
97*5e7646d2SAndroid Build Coastguard Worker|		b	|	|
98*5e7646d2SAndroid Build Coastguard Worker*		C	BADRPT
99*5e7646d2SAndroid Build Coastguard Worker*		b	*	*
100*5e7646d2SAndroid Build Coastguard Worker+		C	BADRPT
101*5e7646d2SAndroid Build Coastguard Worker?		C	BADRPT
102*5e7646d2SAndroid Build Coastguard Worker""		&C	EMPTY
103*5e7646d2SAndroid Build Coastguard Worker()		-	abc	@abc
104*5e7646d2SAndroid Build Coastguard Worker\(\)		b	abc	@abc
105*5e7646d2SAndroid Build Coastguard Workera||b		C	EMPTY
106*5e7646d2SAndroid Build Coastguard Worker|ab		C	EMPTY
107*5e7646d2SAndroid Build Coastguard Workerab|		C	EMPTY
108*5e7646d2SAndroid Build Coastguard Worker(|a)b		C	EMPTY
109*5e7646d2SAndroid Build Coastguard Worker(a|)b		C	EMPTY
110*5e7646d2SAndroid Build Coastguard Worker(*a)		C	BADRPT
111*5e7646d2SAndroid Build Coastguard Worker(+a)		C	BADRPT
112*5e7646d2SAndroid Build Coastguard Worker(?a)		C	BADRPT
113*5e7646d2SAndroid Build Coastguard Worker({1}a)		C	BADRPT
114*5e7646d2SAndroid Build Coastguard Worker\(\{1\}a\)	bC	BADRPT
115*5e7646d2SAndroid Build Coastguard Worker(a|*b)		C	BADRPT
116*5e7646d2SAndroid Build Coastguard Worker(a|+b)		C	BADRPT
117*5e7646d2SAndroid Build Coastguard Worker(a|?b)		C	BADRPT
118*5e7646d2SAndroid Build Coastguard Worker(a|{1}b)	C	BADRPT
119*5e7646d2SAndroid Build Coastguard Worker^*		C	BADRPT
120*5e7646d2SAndroid Build Coastguard Worker^*		b	*	*
121*5e7646d2SAndroid Build Coastguard Worker^+		C	BADRPT
122*5e7646d2SAndroid Build Coastguard Worker^?		C	BADRPT
123*5e7646d2SAndroid Build Coastguard Worker^{1}		C	BADRPT
124*5e7646d2SAndroid Build Coastguard Worker^\{1\}		bC	BADRPT
125*5e7646d2SAndroid Build Coastguard Worker
126*5e7646d2SAndroid Build Coastguard Worker# metacharacters, backslashes
127*5e7646d2SAndroid Build Coastguard Workera.c		&	abc	abc
128*5e7646d2SAndroid Build Coastguard Workera[bc]d		&	abd	abd
129*5e7646d2SAndroid Build Coastguard Workera\*c		&	a*c	a*c
130*5e7646d2SAndroid Build Coastguard Workera\\b		&	a\b	a\b
131*5e7646d2SAndroid Build Coastguard Workera\\\*b		&	a\*b	a\*b
132*5e7646d2SAndroid Build Coastguard Workera\bc		&	abc	abc
133*5e7646d2SAndroid Build Coastguard Workera\		&C	EESCAPE
134*5e7646d2SAndroid Build Coastguard Workera\\bc		&	a\bc	a\bc
135*5e7646d2SAndroid Build Coastguard Worker\{		bC	BADRPT
136*5e7646d2SAndroid Build Coastguard Workera\[b		&	a[b	a[b
137*5e7646d2SAndroid Build Coastguard Workera[b		&C	EBRACK
138*5e7646d2SAndroid Build Coastguard Worker# trailing $ is a peculiar special case for the BRE code
139*5e7646d2SAndroid Build Coastguard Workera$		&	a	a
140*5e7646d2SAndroid Build Coastguard Workera$		&	a$
141*5e7646d2SAndroid Build Coastguard Workera\$		&	a
142*5e7646d2SAndroid Build Coastguard Workera\$		&	a$	a$
143*5e7646d2SAndroid Build Coastguard Workera\\$		&	a
144*5e7646d2SAndroid Build Coastguard Workera\\$		&	a$
145*5e7646d2SAndroid Build Coastguard Workera\\$		&	a\$
146*5e7646d2SAndroid Build Coastguard Workera\\$		&	a\	a\
147*5e7646d2SAndroid Build Coastguard Worker
148*5e7646d2SAndroid Build Coastguard Worker# back references, ugh
149*5e7646d2SAndroid Build Coastguard Workera\(b\)\2c	bC	ESUBREG
150*5e7646d2SAndroid Build Coastguard Workera\(b\1\)c	bC	ESUBREG
151*5e7646d2SAndroid Build Coastguard Workera\(b*\)c\1d	b	abbcbbd	abbcbbd	bb
152*5e7646d2SAndroid Build Coastguard Workera\(b*\)c\1d	b	abbcbd
153*5e7646d2SAndroid Build Coastguard Workera\(b*\)c\1d	b	abbcbbbd
154*5e7646d2SAndroid Build Coastguard Worker^\(.\)\1	b	abc
155*5e7646d2SAndroid Build Coastguard Workera\([bc]\)\1d	b	abcdabbd	abbd	b
156*5e7646d2SAndroid Build Coastguard Workera\(\([bc]\)\2\)*d	b	abbccd	abbccd
157*5e7646d2SAndroid Build Coastguard Workera\(\([bc]\)\2\)*d	b	abbcbd
158*5e7646d2SAndroid Build Coastguard Worker# actually, this next one probably ought to fail, but the spec is unclear
159*5e7646d2SAndroid Build Coastguard Workera\(\(b\)*\2\)*d		b	abbbd	abbbd
160*5e7646d2SAndroid Build Coastguard Worker# here is a case that no NFA implementation does right
161*5e7646d2SAndroid Build Coastguard Worker\(ab*\)[ab]*\1	b	ababaaa	ababaaa	a
162*5e7646d2SAndroid Build Coastguard Worker# check out normal matching in the presence of back refs
163*5e7646d2SAndroid Build Coastguard Worker\(a\)\1bcd	b	aabcd	aabcd
164*5e7646d2SAndroid Build Coastguard Worker\(a\)\1bc*d	b	aabcd	aabcd
165*5e7646d2SAndroid Build Coastguard Worker\(a\)\1bc*d	b	aabd	aabd
166*5e7646d2SAndroid Build Coastguard Worker\(a\)\1bc*d	b	aabcccd	aabcccd
167*5e7646d2SAndroid Build Coastguard Worker\(a\)\1bc*[ce]d	b	aabcccd	aabcccd
168*5e7646d2SAndroid Build Coastguard Worker^\(a\)\1b\(c\)*cd$	b	aabcccd	aabcccd
169*5e7646d2SAndroid Build Coastguard Worker
170*5e7646d2SAndroid Build Coastguard Worker# ordinary repetitions
171*5e7646d2SAndroid Build Coastguard Workerab*c		&	abc	abc
172*5e7646d2SAndroid Build Coastguard Workerab+c		-	abc	abc
173*5e7646d2SAndroid Build Coastguard Workerab?c		-	abc	abc
174*5e7646d2SAndroid Build Coastguard Workera\(*\)b		b	a*b	a*b
175*5e7646d2SAndroid Build Coastguard Workera\(**\)b	b	ab	ab
176*5e7646d2SAndroid Build Coastguard Workera\(***\)b	bC	BADRPT
177*5e7646d2SAndroid Build Coastguard Worker*a		b	*a	*a
178*5e7646d2SAndroid Build Coastguard Worker**a		b	a	a
179*5e7646d2SAndroid Build Coastguard Worker***a		bC	BADRPT
180*5e7646d2SAndroid Build Coastguard Worker
181*5e7646d2SAndroid Build Coastguard Worker# the dreaded bounded repetitions
182*5e7646d2SAndroid Build Coastguard Worker{		&	{	{
183*5e7646d2SAndroid Build Coastguard Worker{abc		&	{abc	{abc
184*5e7646d2SAndroid Build Coastguard Worker{1		C	BADRPT
185*5e7646d2SAndroid Build Coastguard Worker{1}		C	BADRPT
186*5e7646d2SAndroid Build Coastguard Workera{b		&	a{b	a{b
187*5e7646d2SAndroid Build Coastguard Workera{1}b		-	ab	ab
188*5e7646d2SAndroid Build Coastguard Workera\{1\}b		b	ab	ab
189*5e7646d2SAndroid Build Coastguard Workera{1,}b		-	ab	ab
190*5e7646d2SAndroid Build Coastguard Workera\{1,\}b	b	ab	ab
191*5e7646d2SAndroid Build Coastguard Workera{1,2}b		-	aab	aab
192*5e7646d2SAndroid Build Coastguard Workera\{1,2\}b	b	aab	aab
193*5e7646d2SAndroid Build Coastguard Workera{1		C	EBRACE
194*5e7646d2SAndroid Build Coastguard Workera\{1		bC	EBRACE
195*5e7646d2SAndroid Build Coastguard Workera{1a		C	EBRACE
196*5e7646d2SAndroid Build Coastguard Workera\{1a		bC	EBRACE
197*5e7646d2SAndroid Build Coastguard Workera{1a}		C	BADBR
198*5e7646d2SAndroid Build Coastguard Workera\{1a\}		bC	BADBR
199*5e7646d2SAndroid Build Coastguard Workera{,2}		-	a{,2}	a{,2}
200*5e7646d2SAndroid Build Coastguard Workera\{,2\}		bC	BADBR
201*5e7646d2SAndroid Build Coastguard Workera{,}		-	a{,}	a{,}
202*5e7646d2SAndroid Build Coastguard Workera\{,\}		bC	BADBR
203*5e7646d2SAndroid Build Coastguard Workera{1,x}		C	BADBR
204*5e7646d2SAndroid Build Coastguard Workera\{1,x\}	bC	BADBR
205*5e7646d2SAndroid Build Coastguard Workera{1,x		C	EBRACE
206*5e7646d2SAndroid Build Coastguard Workera\{1,x		bC	EBRACE
207*5e7646d2SAndroid Build Coastguard Workera{300}		C	BADBR
208*5e7646d2SAndroid Build Coastguard Workera\{300\}	bC	BADBR
209*5e7646d2SAndroid Build Coastguard Workera{1,0}		C	BADBR
210*5e7646d2SAndroid Build Coastguard Workera\{1,0\}	bC	BADBR
211*5e7646d2SAndroid Build Coastguard Workerab{0,0}c	-	abcac	ac
212*5e7646d2SAndroid Build Coastguard Workerab\{0,0\}c	b	abcac	ac
213*5e7646d2SAndroid Build Coastguard Workerab{0,1}c	-	abcac	abc
214*5e7646d2SAndroid Build Coastguard Workerab\{0,1\}c	b	abcac	abc
215*5e7646d2SAndroid Build Coastguard Workerab{0,3}c	-	abbcac	abbc
216*5e7646d2SAndroid Build Coastguard Workerab\{0,3\}c	b	abbcac	abbc
217*5e7646d2SAndroid Build Coastguard Workerab{1,1}c	-	acabc	abc
218*5e7646d2SAndroid Build Coastguard Workerab\{1,1\}c	b	acabc	abc
219*5e7646d2SAndroid Build Coastguard Workerab{1,3}c	-	acabc	abc
220*5e7646d2SAndroid Build Coastguard Workerab\{1,3\}c	b	acabc	abc
221*5e7646d2SAndroid Build Coastguard Workerab{2,2}c	-	abcabbc	abbc
222*5e7646d2SAndroid Build Coastguard Workerab\{2,2\}c	b	abcabbc	abbc
223*5e7646d2SAndroid Build Coastguard Workerab{2,4}c	-	abcabbc	abbc
224*5e7646d2SAndroid Build Coastguard Workerab\{2,4\}c	b	abcabbc	abbc
225*5e7646d2SAndroid Build Coastguard Worker((a{1,10}){1,10}){1,10}	-	a	a	a,a
226*5e7646d2SAndroid Build Coastguard Worker
227*5e7646d2SAndroid Build Coastguard Worker# multiple repetitions
228*5e7646d2SAndroid Build Coastguard Workera**		&C	BADRPT
229*5e7646d2SAndroid Build Coastguard Workera++		C	BADRPT
230*5e7646d2SAndroid Build Coastguard Workera??		C	BADRPT
231*5e7646d2SAndroid Build Coastguard Workera*+		C	BADRPT
232*5e7646d2SAndroid Build Coastguard Workera*?		C	BADRPT
233*5e7646d2SAndroid Build Coastguard Workera+*		C	BADRPT
234*5e7646d2SAndroid Build Coastguard Workera+?		C	BADRPT
235*5e7646d2SAndroid Build Coastguard Workera?*		C	BADRPT
236*5e7646d2SAndroid Build Coastguard Workera?+		C	BADRPT
237*5e7646d2SAndroid Build Coastguard Workera{1}{1}		C	BADRPT
238*5e7646d2SAndroid Build Coastguard Workera*{1}		C	BADRPT
239*5e7646d2SAndroid Build Coastguard Workera+{1}		C	BADRPT
240*5e7646d2SAndroid Build Coastguard Workera?{1}		C	BADRPT
241*5e7646d2SAndroid Build Coastguard Workera{1}*		C	BADRPT
242*5e7646d2SAndroid Build Coastguard Workera{1}+		C	BADRPT
243*5e7646d2SAndroid Build Coastguard Workera{1}?		C	BADRPT
244*5e7646d2SAndroid Build Coastguard Workera*{b}		-	a{b}	a{b}
245*5e7646d2SAndroid Build Coastguard Workera\{1\}\{1\}	bC	BADRPT
246*5e7646d2SAndroid Build Coastguard Workera*\{1\}		bC	BADRPT
247*5e7646d2SAndroid Build Coastguard Workera\{1\}*		bC	BADRPT
248*5e7646d2SAndroid Build Coastguard Worker
249*5e7646d2SAndroid Build Coastguard Worker# brackets, and numerous perversions thereof
250*5e7646d2SAndroid Build Coastguard Workera[b]c		&	abc	abc
251*5e7646d2SAndroid Build Coastguard Workera[ab]c		&	abc	abc
252*5e7646d2SAndroid Build Coastguard Workera[^ab]c		&	adc	adc
253*5e7646d2SAndroid Build Coastguard Workera[]b]c		&	a]c	a]c
254*5e7646d2SAndroid Build Coastguard Workera[[b]c		&	a[c	a[c
255*5e7646d2SAndroid Build Coastguard Workera[-b]c		&	a-c	a-c
256*5e7646d2SAndroid Build Coastguard Workera[^]b]c		&	adc	adc
257*5e7646d2SAndroid Build Coastguard Workera[^-b]c		&	adc	adc
258*5e7646d2SAndroid Build Coastguard Workera[b-]c		&	a-c	a-c
259*5e7646d2SAndroid Build Coastguard Workera[b		&C	EBRACK
260*5e7646d2SAndroid Build Coastguard Workera[]		&C	EBRACK
261*5e7646d2SAndroid Build Coastguard Workera[1-3]c		&	a2c	a2c
262*5e7646d2SAndroid Build Coastguard Workera[3-1]c		&C	ERANGE
263*5e7646d2SAndroid Build Coastguard Workera[1-3-5]c	&C	ERANGE
264*5e7646d2SAndroid Build Coastguard Workera[[.-.]--]c	&	a-c	a-c
265*5e7646d2SAndroid Build Coastguard Workera[1-		&C	ERANGE
266*5e7646d2SAndroid Build Coastguard Workera[[.		&C	EBRACK
267*5e7646d2SAndroid Build Coastguard Workera[[.x		&C	EBRACK
268*5e7646d2SAndroid Build Coastguard Workera[[.x.		&C	EBRACK
269*5e7646d2SAndroid Build Coastguard Workera[[.x.]		&C	EBRACK
270*5e7646d2SAndroid Build Coastguard Workera[[.x.]]	&	ax	ax
271*5e7646d2SAndroid Build Coastguard Workera[[.x,.]]	&C	ECOLLATE
272*5e7646d2SAndroid Build Coastguard Workera[[.one.]]b	&	a1b	a1b
273*5e7646d2SAndroid Build Coastguard Workera[[.notdef.]]b	&C	ECOLLATE
274*5e7646d2SAndroid Build Coastguard Workera[[.].]]b	&	a]b	a]b
275*5e7646d2SAndroid Build Coastguard Workera[[:alpha:]]c	&	abc	abc
276*5e7646d2SAndroid Build Coastguard Workera[[:notdef:]]c	&C	ECTYPE
277*5e7646d2SAndroid Build Coastguard Workera[[:		&C	EBRACK
278*5e7646d2SAndroid Build Coastguard Workera[[:alpha	&C	EBRACK
279*5e7646d2SAndroid Build Coastguard Workera[[:alpha:]	&C	EBRACK
280*5e7646d2SAndroid Build Coastguard Workera[[:alpha,:]	&C	ECTYPE
281*5e7646d2SAndroid Build Coastguard Workera[[:]:]]b	&C	ECTYPE
282*5e7646d2SAndroid Build Coastguard Workera[[:-:]]b	&C	ECTYPE
283*5e7646d2SAndroid Build Coastguard Workera[[:alph:]]	&C	ECTYPE
284*5e7646d2SAndroid Build Coastguard Workera[[:alphabet:]]	&C	ECTYPE
285*5e7646d2SAndroid Build Coastguard Worker[[:alnum:]]+	-	-%@a0X-	a0X
286*5e7646d2SAndroid Build Coastguard Worker[[:alpha:]]+	-	-%@aX0-	aX
287*5e7646d2SAndroid Build Coastguard Worker[[:blank:]]+	-	aSSTb	SST
288*5e7646d2SAndroid Build Coastguard Worker[[:cntrl:]]+	-	aNTb	NT
289*5e7646d2SAndroid Build Coastguard Worker[[:digit:]]+	-	a019b	019
290*5e7646d2SAndroid Build Coastguard Worker[[:graph:]]+	-	Sa%bS	a%b
291*5e7646d2SAndroid Build Coastguard Worker[[:lower:]]+	-	AabC	ab
292*5e7646d2SAndroid Build Coastguard Worker[[:print:]]+	-	NaSbN	aSb
293*5e7646d2SAndroid Build Coastguard Worker[[:punct:]]+	-	S%-&T	%-&
294*5e7646d2SAndroid Build Coastguard Worker[[:space:]]+	-	aSNTb	SNT
295*5e7646d2SAndroid Build Coastguard Worker[[:upper:]]+	-	aBCd	BC
296*5e7646d2SAndroid Build Coastguard Worker[[:xdigit:]]+	-	p0f3Cq	0f3C
297*5e7646d2SAndroid Build Coastguard Workera[[=b=]]c	&	abc	abc
298*5e7646d2SAndroid Build Coastguard Workera[[=		&C	EBRACK
299*5e7646d2SAndroid Build Coastguard Workera[[=b		&C	EBRACK
300*5e7646d2SAndroid Build Coastguard Workera[[=b=		&C	EBRACK
301*5e7646d2SAndroid Build Coastguard Workera[[=b=]		&C	EBRACK
302*5e7646d2SAndroid Build Coastguard Workera[[=b,=]]	&C	ECOLLATE
303*5e7646d2SAndroid Build Coastguard Workera[[=one=]]b	&	a1b	a1b
304*5e7646d2SAndroid Build Coastguard Worker
305*5e7646d2SAndroid Build Coastguard Worker# complexities
306*5e7646d2SAndroid Build Coastguard Workera(((b)))c	-	abc	abc
307*5e7646d2SAndroid Build Coastguard Workera(b|(c))d	-	abd	abd
308*5e7646d2SAndroid Build Coastguard Workera(b*|c)d	-	abbd	abbd
309*5e7646d2SAndroid Build Coastguard Worker# just gotta have one DFA-buster, of course
310*5e7646d2SAndroid Build Coastguard Workera[ab]{20}	-	aaaaabaaaabaaaabaaaab	aaaaabaaaabaaaabaaaab
311*5e7646d2SAndroid Build Coastguard Worker# and an inline expansion in case somebody gets tricky
312*5e7646d2SAndroid Build Coastguard Workera[ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab]	-	aaaaabaaaabaaaabaaaab	aaaaabaaaabaaaabaaaab
313*5e7646d2SAndroid Build Coastguard Worker# and in case somebody just slips in an NFA...
314*5e7646d2SAndroid Build Coastguard Workera[ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab](wee|week)(knights|night)	-	aaaaabaaaabaaaabaaaabweeknights	aaaaabaaaabaaaabaaaabweeknights
315*5e7646d2SAndroid Build Coastguard Worker# fish for anomalies as the number of states passes 32
316*5e7646d2SAndroid Build Coastguard Worker12345678901234567890123456789	-	a12345678901234567890123456789b	12345678901234567890123456789
317*5e7646d2SAndroid Build Coastguard Worker123456789012345678901234567890	-	a123456789012345678901234567890b	123456789012345678901234567890
318*5e7646d2SAndroid Build Coastguard Worker1234567890123456789012345678901	-	a1234567890123456789012345678901b	1234567890123456789012345678901
319*5e7646d2SAndroid Build Coastguard Worker12345678901234567890123456789012	-	a12345678901234567890123456789012b	12345678901234567890123456789012
320*5e7646d2SAndroid Build Coastguard Worker123456789012345678901234567890123	-	a123456789012345678901234567890123b	123456789012345678901234567890123
321*5e7646d2SAndroid Build Coastguard Worker# and one really big one, beyond any plausible word width
322*5e7646d2SAndroid Build Coastguard Worker1234567890123456789012345678901234567890123456789012345678901234567890	-	a1234567890123456789012345678901234567890123456789012345678901234567890b	1234567890123456789012345678901234567890123456789012345678901234567890
323*5e7646d2SAndroid Build Coastguard Worker# fish for problems as brackets go past 8
324*5e7646d2SAndroid Build Coastguard Worker[ab][cd][ef][gh][ij][kl][mn]	-	xacegikmoq	acegikm
325*5e7646d2SAndroid Build Coastguard Worker[ab][cd][ef][gh][ij][kl][mn][op]	-	xacegikmoq	acegikmo
326*5e7646d2SAndroid Build Coastguard Worker[ab][cd][ef][gh][ij][kl][mn][op][qr]	-	xacegikmoqy	acegikmoq
327*5e7646d2SAndroid Build Coastguard Worker[ab][cd][ef][gh][ij][kl][mn][op][q]	-	xacegikmoqy	acegikmoq
328*5e7646d2SAndroid Build Coastguard Worker
329*5e7646d2SAndroid Build Coastguard Worker# subtleties of matching
330*5e7646d2SAndroid Build Coastguard Workerabc		&	xabcy	abc
331*5e7646d2SAndroid Build Coastguard Workera\(b\)?c\1d	b	acd
332*5e7646d2SAndroid Build Coastguard WorkeraBc		i	Abc	Abc
333*5e7646d2SAndroid Build Coastguard Workera[Bc]*d		i	abBCcd	abBCcd
334*5e7646d2SAndroid Build Coastguard Worker0[[:upper:]]1	&i	0a1	0a1
335*5e7646d2SAndroid Build Coastguard Worker0[[:lower:]]1	&i	0A1	0A1
336*5e7646d2SAndroid Build Coastguard Workera[^b]c		&i	abc
337*5e7646d2SAndroid Build Coastguard Workera[^b]c		&i	aBc
338*5e7646d2SAndroid Build Coastguard Workera[^b]c		&i	adc	adc
339*5e7646d2SAndroid Build Coastguard Worker[a]b[c]		-	abc	abc
340*5e7646d2SAndroid Build Coastguard Worker[a]b[a]		-	aba	aba
341*5e7646d2SAndroid Build Coastguard Worker[abc]b[abc]	-	abc	abc
342*5e7646d2SAndroid Build Coastguard Worker[abc]b[abd]	-	abd	abd
343*5e7646d2SAndroid Build Coastguard Workera(b?c)+d	-	accd	accd
344*5e7646d2SAndroid Build Coastguard Worker(wee|week)(knights|night)	-	weeknights	weeknights
345*5e7646d2SAndroid Build Coastguard Worker(we|wee|week|frob)(knights|night|day)	-	weeknights	weeknights
346*5e7646d2SAndroid Build Coastguard Workera[bc]d		-	xyzaaabcaababdacd	abd
347*5e7646d2SAndroid Build Coastguard Workera[ab]c		-	aaabc	abc
348*5e7646d2SAndroid Build Coastguard Workerabc		s	abc	abc
349*5e7646d2SAndroid Build Coastguard Workera*		&	b	@b
350*5e7646d2SAndroid Build Coastguard Worker
351*5e7646d2SAndroid Build Coastguard Worker# Let's have some fun -- try to match a C comment.
352*5e7646d2SAndroid Build Coastguard Worker# first the obvious, which looks okay at first glance...
353*5e7646d2SAndroid Build Coastguard Worker/\*.*\*/	-	/*x*/	/*x*/
354*5e7646d2SAndroid Build Coastguard Worker# but...
355*5e7646d2SAndroid Build Coastguard Worker/\*.*\*/	-	/*x*/y/*z*/	/*x*/y/*z*/
356*5e7646d2SAndroid Build Coastguard Worker# okay, we must not match */ inside; try to do that...
357*5e7646d2SAndroid Build Coastguard Worker/\*([^*]|\*[^/])*\*/	-	/*x*/	/*x*/
358*5e7646d2SAndroid Build Coastguard Worker/\*([^*]|\*[^/])*\*/	-	/*x*/y/*z*/	/*x*/
359*5e7646d2SAndroid Build Coastguard Worker# but...
360*5e7646d2SAndroid Build Coastguard Worker/\*([^*]|\*[^/])*\*/	-	/*x**/y/*z*/	/*x**/y/*z*/
361*5e7646d2SAndroid Build Coastguard Worker# and a still fancier version, which does it right (I think)...
362*5e7646d2SAndroid Build Coastguard Worker/\*([^*]|\*+[^*/])*\*+/	-	/*x*/	/*x*/
363*5e7646d2SAndroid Build Coastguard Worker/\*([^*]|\*+[^*/])*\*+/	-	/*x*/y/*z*/	/*x*/
364*5e7646d2SAndroid Build Coastguard Worker/\*([^*]|\*+[^*/])*\*+/	-	/*x**/y/*z*/	/*x**/
365*5e7646d2SAndroid Build Coastguard Worker/\*([^*]|\*+[^*/])*\*+/	-	/*x****/y/*z*/	/*x****/
366*5e7646d2SAndroid Build Coastguard Worker/\*([^*]|\*+[^*/])*\*+/	-	/*x**x*/y/*z*/	/*x**x*/
367*5e7646d2SAndroid Build Coastguard Worker/\*([^*]|\*+[^*/])*\*+/	-	/*x***x/y/*z*/	/*x***x/y/*z*/
368*5e7646d2SAndroid Build Coastguard Worker
369*5e7646d2SAndroid Build Coastguard Worker# subexpressions
370*5e7646d2SAndroid Build Coastguard Worker.*		-	abc	abc	-
371*5e7646d2SAndroid Build Coastguard Workera(b)(c)d	-	abcd	abcd	b,c
372*5e7646d2SAndroid Build Coastguard Workera(((b)))c	-	abc	abc	b,b,b
373*5e7646d2SAndroid Build Coastguard Workera(b|(c))d	-	abd	abd	b,-
374*5e7646d2SAndroid Build Coastguard Workera(b*|c|e)d	-	abbd	abbd	bb
375*5e7646d2SAndroid Build Coastguard Workera(b*|c|e)d	-	acd	acd	c
376*5e7646d2SAndroid Build Coastguard Workera(b*|c|e)d	-	ad	ad	@d
377*5e7646d2SAndroid Build Coastguard Workera(b?)c		-	abc	abc	b
378*5e7646d2SAndroid Build Coastguard Workera(b?)c		-	ac	ac	@c
379*5e7646d2SAndroid Build Coastguard Workera(b+)c		-	abc	abc	b
380*5e7646d2SAndroid Build Coastguard Workera(b+)c		-	abbbc	abbbc	bbb
381*5e7646d2SAndroid Build Coastguard Workera(b*)c		-	ac	ac	@c
382*5e7646d2SAndroid Build Coastguard Worker(a|ab)(bc([de]+)f|cde)	-	abcdef	abcdef	a,bcdef,de
383*5e7646d2SAndroid Build Coastguard Worker# the regression tester only asks for 9 subexpressions
384*5e7646d2SAndroid Build Coastguard Workera(b)(c)(d)(e)(f)(g)(h)(i)(j)k	-	abcdefghijk	abcdefghijk	b,c,d,e,f,g,h,i,j
385*5e7646d2SAndroid Build Coastguard Workera(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)l	-	abcdefghijkl	abcdefghijkl	b,c,d,e,f,g,h,i,j,k
386*5e7646d2SAndroid Build Coastguard Workera([bc]?)c	-	abc	abc	b
387*5e7646d2SAndroid Build Coastguard Workera([bc]?)c	-	ac	ac	@c
388*5e7646d2SAndroid Build Coastguard Workera([bc]+)c	-	abc	abc	b
389*5e7646d2SAndroid Build Coastguard Workera([bc]+)c	-	abcc	abcc	bc
390*5e7646d2SAndroid Build Coastguard Workera([bc]+)bc	-	abcbc	abcbc	bc
391*5e7646d2SAndroid Build Coastguard Workera(bb+|b)b	-	abb	abb	b
392*5e7646d2SAndroid Build Coastguard Workera(bbb+|bb+|b)b	-	abb	abb	b
393*5e7646d2SAndroid Build Coastguard Workera(bbb+|bb+|b)b	-	abbb	abbb	bb
394*5e7646d2SAndroid Build Coastguard Workera(bbb+|bb+|b)bb	-	abbb	abbb	b
395*5e7646d2SAndroid Build Coastguard Worker(.*).*		-	abcdef	abcdef	abcdef
396*5e7646d2SAndroid Build Coastguard Worker(a*)*		-	bc	@b	@b
397*5e7646d2SAndroid Build Coastguard Worker
398*5e7646d2SAndroid Build Coastguard Worker# do we get the right subexpression when it is used more than once?
399*5e7646d2SAndroid Build Coastguard Workera(b|c)*d	-	ad	ad	-
400*5e7646d2SAndroid Build Coastguard Workera(b|c)*d	-	abcd	abcd	c
401*5e7646d2SAndroid Build Coastguard Workera(b|c)+d	-	abd	abd	b
402*5e7646d2SAndroid Build Coastguard Workera(b|c)+d	-	abcd	abcd	c
403*5e7646d2SAndroid Build Coastguard Workera(b|c?)+d	-	ad	ad	@d
404*5e7646d2SAndroid Build Coastguard Workera(b|c?)+d	-	abcd	abcd	@d
405*5e7646d2SAndroid Build Coastguard Workera(b|c){0,0}d	-	ad	ad	-
406*5e7646d2SAndroid Build Coastguard Workera(b|c){0,1}d	-	ad	ad	-
407*5e7646d2SAndroid Build Coastguard Workera(b|c){0,1}d	-	abd	abd	b
408*5e7646d2SAndroid Build Coastguard Workera(b|c){0,2}d	-	ad	ad	-
409*5e7646d2SAndroid Build Coastguard Workera(b|c){0,2}d	-	abcd	abcd	c
410*5e7646d2SAndroid Build Coastguard Workera(b|c){0,}d	-	ad	ad	-
411*5e7646d2SAndroid Build Coastguard Workera(b|c){0,}d	-	abcd	abcd	c
412*5e7646d2SAndroid Build Coastguard Workera(b|c){1,1}d	-	abd	abd	b
413*5e7646d2SAndroid Build Coastguard Workera(b|c){1,1}d	-	acd	acd	c
414*5e7646d2SAndroid Build Coastguard Workera(b|c){1,2}d	-	abd	abd	b
415*5e7646d2SAndroid Build Coastguard Workera(b|c){1,2}d	-	abcd	abcd	c
416*5e7646d2SAndroid Build Coastguard Workera(b|c){1,}d	-	abd	abd	b
417*5e7646d2SAndroid Build Coastguard Workera(b|c){1,}d	-	abcd	abcd	c
418*5e7646d2SAndroid Build Coastguard Workera(b|c){2,2}d	-	acbd	acbd	b
419*5e7646d2SAndroid Build Coastguard Workera(b|c){2,2}d	-	abcd	abcd	c
420*5e7646d2SAndroid Build Coastguard Workera(b|c){2,4}d	-	abcd	abcd	c
421*5e7646d2SAndroid Build Coastguard Workera(b|c){2,4}d	-	abcbd	abcbd	b
422*5e7646d2SAndroid Build Coastguard Workera(b|c){2,4}d	-	abcbcd	abcbcd	c
423*5e7646d2SAndroid Build Coastguard Workera(b|c){2,}d	-	abcd	abcd	c
424*5e7646d2SAndroid Build Coastguard Workera(b|c){2,}d	-	abcbd	abcbd	b
425*5e7646d2SAndroid Build Coastguard Workera(b+|((c)*))+d	-	abd	abd	@d,@d,-
426*5e7646d2SAndroid Build Coastguard Workera(b+|((c)*))+d	-	abcd	abcd	@d,@d,-
427*5e7646d2SAndroid Build Coastguard Worker
428*5e7646d2SAndroid Build Coastguard Worker# check out the STARTEND option
429*5e7646d2SAndroid Build Coastguard Worker[abc]		&#	a(b)c	b
430*5e7646d2SAndroid Build Coastguard Worker[abc]		&#	a(d)c
431*5e7646d2SAndroid Build Coastguard Worker[abc]		&#	a(bc)d	b
432*5e7646d2SAndroid Build Coastguard Worker[abc]		&#	a(dc)d	c
433*5e7646d2SAndroid Build Coastguard Worker.		&#	a()c
434*5e7646d2SAndroid Build Coastguard Workerb.*c		&#	b(bc)c	bc
435*5e7646d2SAndroid Build Coastguard Workerb.*		&#	b(bc)c	bc
436*5e7646d2SAndroid Build Coastguard Worker.*c		&#	b(bc)c	bc
437*5e7646d2SAndroid Build Coastguard Worker
438*5e7646d2SAndroid Build Coastguard Worker# plain strings, with the NOSPEC flag
439*5e7646d2SAndroid Build Coastguard Workerabc		m	abc	abc
440*5e7646d2SAndroid Build Coastguard Workerabc		m	xabcy	abc
441*5e7646d2SAndroid Build Coastguard Workerabc		m	xyz
442*5e7646d2SAndroid Build Coastguard Workera*b		m	aba*b	a*b
443*5e7646d2SAndroid Build Coastguard Workera*b		m	ab
444*5e7646d2SAndroid Build Coastguard Worker""		mC	EMPTY
445*5e7646d2SAndroid Build Coastguard Worker
446*5e7646d2SAndroid Build Coastguard Worker# cases involving NULs
447*5e7646d2SAndroid Build Coastguard WorkeraZb		&	a	a
448*5e7646d2SAndroid Build Coastguard WorkeraZb		&p	a
449*5e7646d2SAndroid Build Coastguard WorkeraZb		&p#	(aZb)	aZb
450*5e7646d2SAndroid Build Coastguard WorkeraZ*b		&p#	(ab)	ab
451*5e7646d2SAndroid Build Coastguard Workera.b		&#	(aZb)	aZb
452*5e7646d2SAndroid Build Coastguard Workera.*		&#	(aZb)c	aZb
453*5e7646d2SAndroid Build Coastguard Worker
454*5e7646d2SAndroid Build Coastguard Worker# word boundaries (ick)
455*5e7646d2SAndroid Build Coastguard Worker[[:<:]]a	&	a	a
456*5e7646d2SAndroid Build Coastguard Worker[[:<:]]a	&	ba
457*5e7646d2SAndroid Build Coastguard Worker[[:<:]]a	&	-a	a
458*5e7646d2SAndroid Build Coastguard Workera[[:>:]]	&	a	a
459*5e7646d2SAndroid Build Coastguard Workera[[:>:]]	&	ab
460*5e7646d2SAndroid Build Coastguard Workera[[:>:]]	&	a-	a
461*5e7646d2SAndroid Build Coastguard Worker[[:<:]]a.c[[:>:]]	&	axcd-dayc-dazce-abc	abc
462*5e7646d2SAndroid Build Coastguard Worker[[:<:]]a.c[[:>:]]	&	axcd-dayc-dazce-abc-q	abc
463*5e7646d2SAndroid Build Coastguard Worker[[:<:]]a.c[[:>:]]	&	axc-dayc-dazce-abc	axc
464*5e7646d2SAndroid Build Coastguard Worker[[:<:]]b.c[[:>:]]	&	a_bxc-byc_d-bzc-q	bzc
465*5e7646d2SAndroid Build Coastguard Worker[[:<:]].x..[[:>:]]	&	y_xa_-_xb_y-_xc_-axdc	_xc_
466*5e7646d2SAndroid Build Coastguard Worker[[:<:]]a_b[[:>:]]	&	x_a_b
467*5e7646d2SAndroid Build Coastguard Worker
468*5e7646d2SAndroid Build Coastguard Worker# past problems, and suspected problems
469*5e7646d2SAndroid Build Coastguard Worker(A[1])|(A[2])|(A[3])|(A[4])|(A[5])|(A[6])|(A[7])|(A[8])|(A[9])|(A[A])	-	A1	A1
470*5e7646d2SAndroid Build Coastguard Workerabcdefghijklmnop	i	abcdefghijklmnop	abcdefghijklmnop
471*5e7646d2SAndroid Build Coastguard Workerabcdefghijklmnopqrstuv	i	abcdefghijklmnopqrstuv	abcdefghijklmnopqrstuv
472*5e7646d2SAndroid Build Coastguard Worker(ALAK)|(ALT[AB])|(CC[123]1)|(CM[123]1)|(GAMC)|(LC[23][EO ])|(SEM[1234])|(SL[ES][12])|(SLWW)|(SLF )|(SLDT)|(VWH[12])|(WH[34][EW])|(WP1[ESN])	-	CC11	CC11
473*5e7646d2SAndroid Build Coastguard WorkerCC[13]1|a{21}[23][EO][123][Es][12]a{15}aa[34][EW]aaaaaaa[X]a	-	CC11	CC11
474*5e7646d2SAndroid Build Coastguard WorkerChar \([a-z0-9_]*\)\[.*	b	Char xyz[k	Char xyz[k	xyz
475*5e7646d2SAndroid Build Coastguard Workera?b	-	ab	ab
476*5e7646d2SAndroid Build Coastguard Worker-\{0,1\}[0-9]*$	b	-5	-5
477*5e7646d2SAndroid Build Coastguard Workera*a*a*a*a*a*a*	&	aaaaaa	aaaaaa
478