g++ still cannot handled [restrict].
[kopensolaris-gnu/glibc.git] / posix / BOOST.tests
1
2
3 ; this file contains a script of tests to run through regress.exe
4 ;
5 ; comments start with a semicolon and proceed to the end of the line
6 ;
7 ; changes to regular expression compile flags start with a "-" as the first
8 ; non-whitespace character and consist of a list of the printable names
9 ; of the flags, for example "match_default"
10 ;
11 ; Other lines contain a test to perform using the current flag status
12 ; the first token contains the expression to compile, the second the string
13 ; to match it against. If the second string is "!" then the expression should
14 ; not compile, that is the first string is an invalid regular expression.
15 ; This is then followed by a list of integers that specify what should match,
16 ; each pair represents the starting and ending positions of a subexpression
17 ; starting with the zeroth subexpression (the whole match).
18 ; A value of -1 indicates that the subexpression should not take part in the
19 ; match at all, if the first value is -1 then no part of the expression should
20 ; match the string.
21 ;
22 ; Tests taken from BOOST testsuite and adapted to glibc regex.
23 ;
24 ; Boost Software License - Version 1.0 - August 17th, 2003
25 ;
26 ; Permission is hereby granted, free of charge, to any person or organization
27 ; obtaining a copy of the software and accompanying documentation covered by
28 ; this license (the "Software") to use, reproduce, display, distribute,
29 ; execute, and transmit the Software, and to prepare derivative works of the
30 ; Software, and to permit third-parties to whom the Software is furnished to
31 ; do so, all subject to the following:
32 ;
33 ; The copyright notices in the Software and this entire statement, including
34 ; the above license grant, this restriction and the following disclaimer,
35 ; must be included in all copies of the Software, in whole or in part, and
36 ; all derivative works of the Software, unless such copies or derivative
37 ; works are solely in the form of machine-executable object code generated by
38 ; a source language processor.
39 ;
40 ; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
41 ; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
42 ; FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
43 ; SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
44 ; FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
45 ; ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
46 ; DEALINGS IN THE SOFTWARE.
47 ;
48
49 - match_default normal REG_EXTENDED
50
51 ;
52 ; try some really simple literals:
53 a a 0 1
54 Z Z 0 1
55 Z aaa -1 -1
56 Z xxxxZZxxx 4 5
57
58 ; and some simple brackets:
59 (a) zzzaazz 3 4 3 4
60 () zzz 0 0 0 0
61 () "" 0 0 0 0
62 ( !
63 ) ) 0 1
64 (aa !
65 aa) baa)b 1 4
66 a b -1 -1
67 \(\) () 0 2
68 \(a\) (a) 0 3
69 \() () 0 2
70 (\) !
71 p(a)rameter ABCparameterXYZ 3 12 4 5
72 [pq](a)rameter ABCparameterXYZ 3 12 4 5
73
74 ; now try escaped brackets:
75 - match_default bk_parens REG_BASIC
76 \(a\) zzzaazz 3 4 3 4
77 \(\) zzz 0 0 0 0
78 \(\) "" 0 0 0 0
79 \( !
80 \) !
81 \(aa !
82 aa\) !
83 () () 0 2
84 (a) (a) 0 3
85 (\) !
86 \() !
87
88 ; now move on to "." wildcards
89 - match_default normal REG_EXTENDED REG_STARTEND
90 . a 0 1
91 . \n 0 1
92 . \r 0 1
93 . \0 0 1
94
95 ;
96 ; now move on to the repetion ops,
97 ; starting with operator *
98 - match_default normal REG_EXTENDED
99 a* b 0 0
100 ab* a 0 1
101 ab* ab 0 2
102 ab* sssabbbbbbsss 3 10
103 ab*c* a 0 1
104 ab*c* abbb 0 4
105 ab*c* accc 0 4
106 ab*c* abbcc 0 5
107 *a !
108 \<* !
109 \>* !
110 \n* \n\n 0 2
111 \** ** 0 2
112 \* * 0 1
113
114 ; now try operator +
115 ab+ a -1 -1
116 ab+ ab 0 2
117 ab+ sssabbbbbbsss 3 10
118 ab+c+ a -1 -1
119 ab+c+ abbb -1 -1
120 ab+c+ accc -1 -1
121 ab+c+ abbcc 0 5
122 +a !
123 \<+ !
124 \>+ !
125 \n+ \n\n 0 2
126 \+ + 0 1
127 \+ ++ 0 1
128 \++ ++ 0 2
129
130 ; now try operator ?
131 - match_default normal REG_EXTENDED
132 a? b 0 0
133 ab? a 0 1
134 ab? ab 0 2
135 ab? sssabbbbbbsss 3 5
136 ab?c? a 0 1
137 ab?c? abbb 0 2
138 ab?c? accc 0 2
139 ab?c? abcc 0 3
140 ?a !
141 \<? !
142 \>? !
143 \n? \n\n 0 1
144 \? ? 0 1
145 \? ?? 0 1
146 \?? ?? 0 1
147
148 ; now try operator {}
149 - match_default normal REG_EXTENDED
150 a{2} a -1 -1
151 a{2} aa 0 2
152 a{2} aaa 0 2
153 a{2,} a -1 -1
154 a{2,} aa 0 2
155 a{2,} aaaaa 0 5
156 a{2,4} a -1 -1
157 a{2,4} aa 0 2
158 a{2,4} aaa 0 3
159 a{2,4} aaaa 0 4
160 a{2,4} aaaaa 0 4
161 a{} !
162 a{2 !
163 a} a} 0 2
164 \{\} {} 0 2
165
166 - match_default normal REG_BASIC
167 a\{2\} a -1 -1
168 a\{2\} aa 0 2
169 a\{2\} aaa 0 2
170 a\{2,\} a -1 -1
171 a\{2,\} aa 0 2
172 a\{2,\} aaaaa 0 5
173 a\{2,4\} a -1 -1
174 a\{2,4\} aa 0 2
175 a\{2,4\} aaa 0 3
176 a\{2,4\} aaaa 0 4
177 a\{2,4\} aaaaa 0 4
178 {} {} 0 2
179
180 ; now test the alternation operator |
181 - match_default normal REG_EXTENDED
182 a|b a 0 1
183 a|b b 0 1
184 a(b|c) ab 0 2 1 2
185 a(b|c) ac 0 2 1 2
186 a(b|c) ad -1 -1 -1 -1
187 a\| a| 0 2
188
189 ; now test the set operator []
190 - match_default normal REG_EXTENDED
191 ; try some literals first
192 [abc] a 0 1
193 [abc] b 0 1
194 [abc] c 0 1
195 [abc] d -1 -1
196 [^bcd] a 0 1
197 [^bcd] b -1 -1
198 [^bcd] d -1 -1
199 [^bcd] e 0 1
200 a[b]c abc 0 3
201 a[ab]c abc 0 3
202 a[^ab]c adc 0 3
203 a[]b]c a]c 0 3
204 a[[b]c a[c 0 3
205 a[-b]c a-c 0 3
206 a[^]b]c adc 0 3
207 a[^-b]c adc 0 3
208 a[b-]c a-c 0 3
209 a[b !
210 a[] !
211
212 ; then some ranges
213 [b-e] a -1 -1
214 [b-e] b 0 1
215 [b-e] e 0 1
216 [b-e] f -1 -1
217 [^b-e] a 0 1
218 [^b-e] b -1 -1
219 [^b-e] e -1 -1
220 [^b-e] f 0 1
221 a[1-3]c a2c 0 3
222 a[3-1]c !
223 a[1-3-5]c !
224 a[1- !
225
226 ; and some classes
227 a[[:alpha:]]c abc 0 3
228 a[[:unknown:]]c !
229 a[[: !
230 a[[:alpha !
231 a[[:alpha:] !
232 a[[:alpha,:] !
233 a[[:]:]]b !
234 a[[:-:]]b !
235 a[[:alph:]] !
236 a[[:alphabet:]] !
237 [[:alnum:]]+ -%@a0X_- 3 6
238 [[:alpha:]]+ -%@aX_0- 3 5
239 [[:blank:]]+ "a  \tb" 1 4
240 [[:cntrl:]]+ a\n\tb 1 3
241 [[:digit:]]+ a019b 1 4
242 [[:graph:]]+ " a%b " 1 4
243 [[:lower:]]+ AabC 1 3
244 ; This test fails with STLPort, disable for now as this is a corner case anyway...
245 ;[[:print:]]+ "\na b\n" 1 4
246 [[:punct:]]+ " %-&\t" 1 4
247 [[:space:]]+ "a \n\t\rb" 1 5
248 [[:upper:]]+ aBCd 1 3
249 [[:xdigit:]]+ p0f3Cx 1 5
250
251 ; now test flag settings:
252 - escape_in_lists REG_NO_POSIX_TEST
253 [\n] \n 0 1
254 - REG_NO_POSIX_TEST
255
256 ; line anchors
257 - match_default normal REG_EXTENDED
258 ^ab ab 0 2
259 ^ab xxabxx -1 -1
260 ab$ ab 0 2
261 ab$ abxx -1 -1
262 - match_default match_not_bol match_not_eol normal REG_EXTENDED REG_NOTBOL REG_NOTEOL
263 ^ab ab -1 -1
264 ^ab xxabxx -1 -1
265 ab$ ab -1 -1
266 ab$ abxx -1 -1
267
268 ; back references
269 - match_default normal REG_PERL
270 a(b)\2c !
271 a(b\1)c !
272 a(b*)c\1d abbcbbd 0 7 1 3
273 a(b*)c\1d abbcbd -1 -1
274 a(b*)c\1d abbcbbbd -1 -1
275 ^(.)\1 abc -1 -1
276 a([bc])\1d abcdabbd     4 8 5 6
277 ; strictly speaking this is at best ambiguous, at worst wrong, this is what most
278 ; re implimentations will match though.
279 a(([bc])\2)*d abbccd 0 6 3 5 3 4
280
281 a(([bc])\2)*d abbcbd -1 -1
282 a((b)*\2)*d abbbd 0 5 1 4 2 3
283 ; perl only:
284 (ab*)[ab]*\1 ababaaa 0 7 0 1
285 (a)\1bcd aabcd 0 5 0 1
286 (a)\1bc*d aabcd 0 5 0 1
287 (a)\1bc*d aabd 0 4 0 1
288 (a)\1bc*d aabcccd 0 7 0 1
289 (a)\1bc*[ce]d aabcccd 0 7 0 1
290 ^(a)\1b(c)*cd$ aabcccd 0 7 0 1 4 5
291
292 ; posix only: 
293 - match_default extended REG_EXTENDED
294 (ab*)[ab]*\1 ababaaa 0 7 0 1
295
296 ;
297 ; word operators:
298 \w a 0 1
299 \w z 0 1
300 \w A 0 1
301 \w Z 0 1
302 \w _ 0 1
303 \w } -1 -1
304 \w ` -1 -1
305 \w [ -1 -1
306 \w @ -1 -1
307 ; non-word:
308 \W a -1 -1
309 \W z -1 -1
310 \W A -1 -1
311 \W Z -1 -1
312 \W _ -1 -1
313 \W } 0 1
314 \W ` 0 1
315 \W [ 0 1
316 \W @ 0 1
317 ; word start:
318 \<abcd "  abcd" 2 6
319 \<ab cab -1 -1
320 \<ab "\nab" 1 3
321 \<tag ::tag 2 5
322 ;word end:
323 abc\> abc 0 3
324 abc\> abcd -1 -1
325 abc\> abc\n 0 3
326 abc\> abc:: 0 3
327 ; word boundary:
328 \babcd "  abcd" 2 6
329 \bab cab -1 -1
330 \bab "\nab" 1 3
331 \btag ::tag 2 5
332 abc\b abc 0 3
333 abc\b abcd -1 -1
334 abc\b abc\n 0 3
335 abc\b abc:: 0 3
336 ; within word:
337 \B ab 1 1
338 a\Bb ab 0 2
339 a\B ab 0 1
340 a\B a -1 -1
341 a\B "a " -1 -1
342
343 ;
344 ; buffer operators:
345 \`abc abc 0 3
346 \`abc \nabc -1 -1
347 \`abc " abc" -1 -1
348 abc\' abc 0 3
349 abc\' abc\n -1 -1
350 abc\' "abc " -1 -1
351
352 ;
353 ; now follows various complex expressions designed to try and bust the matcher:
354 a(((b)))c abc 0 3 1 2 1 2 1 2
355 a(b|(c))d abd 0 3 1 2 -1 -1
356 a(b|(c))d acd 0 3 1 2 1 2
357 a(b*|c)d abbd 0 4 1 3
358 ; just gotta have one DFA-buster, of course
359 a[ab]{20} aaaaabaaaabaaaabaaaab 0 21
360 ; and an inline expansion in case somebody gets tricky
361 a[ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab] aaaaabaaaabaaaabaaaab 0 21
362 ; and in case somebody just slips in an NFA...
363 a[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 0 31 21 24 24 31
364 ; one really big one
365 1234567890123456789012345678901234567890123456789012345678901234567890 a1234567890123456789012345678901234567890123456789012345678901234567890b 1 71
366 ; fish for problems as brackets go past 8
367 [ab][cd][ef][gh][ij][kl][mn] xacegikmoq 1 8
368 [ab][cd][ef][gh][ij][kl][mn][op] xacegikmoq 1 9
369 [ab][cd][ef][gh][ij][kl][mn][op][qr] xacegikmoqy 1 10
370 [ab][cd][ef][gh][ij][kl][mn][op][q] xacegikmoqy 1 10
371 ; and as parenthesis go past 9:
372 (a)(b)(c)(d)(e)(f)(g)(h) zabcdefghi 1 9 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9
373 (a)(b)(c)(d)(e)(f)(g)(h)(i) zabcdefghij 1 10 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10
374 (a)(b)(c)(d)(e)(f)(g)(h)(i)(j) zabcdefghijk 1 11 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11
375 (a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k) zabcdefghijkl 1 12 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12
376 (a)d|(b)c abc 1 3 -1 -1 1 2
377 _+((www)|(ftp)|(mailto)):_* "_wwwnocolon _mailto:" 12 20 13 19 -1 -1 -1 -1 13 19
378
379 ; subtleties of matching
380 ;a(b)?c\1d acd 0 3 -1 -1
381 ; POSIX is about the following test:
382 a(b)?c\1d acd -1 -1 -1 -1
383 a(b?c)+d accd 0 4 2 3
384 (wee|week)(knights|night) weeknights 0 10 0 3 3 10
385 .* abc 0 3
386 a(b|(c))d abd 0 3 1 2 -1 -1
387 a(b|(c))d acd 0 3 1 2 1 2
388 a(b*|c|e)d abbd 0 4 1 3
389 a(b*|c|e)d acd 0 3 1 2
390 a(b*|c|e)d ad 0 2 1 1
391 a(b?)c abc 0 3 1 2
392 a(b?)c ac 0 2 1 1
393 a(b+)c abc 0 3 1 2
394 a(b+)c abbbc 0 5 1 4 
395 a(b*)c ac 0 2 1 1 
396 (a|ab)(bc([de]+)f|cde) abcdef 0 6 0 1 1 6 3 5
397 a([bc]?)c abc 0 3 1 2
398 a([bc]?)c ac 0 2 1 1 
399 a([bc]+)c abc 0 3 1 2
400 a([bc]+)c abcc 0 4 1 3
401 a([bc]+)bc abcbc 0 5 1 3
402 a(bb+|b)b abb 0 3 1 2
403 a(bbb+|bb+|b)b abb 0 3 1 2
404 a(bbb+|bb+|b)b abbb 0 4 1 3
405 a(bbb+|bb+|b)bb abbb 0 4 1 2
406 (.*).* abcdef 0 6 0 6
407 (a*)* bc 0 0 0 0
408 xyx*xz xyxxxxyxxxz 5 11
409
410 ; do we get the right subexpression when it is used more than once?
411 a(b|c)*d ad 0 2 -1 -1
412 a(b|c)*d abcd 0 4 2 3
413 a(b|c)+d abd 0 3 1 2
414 a(b|c)+d abcd 0 4 2 3
415 a(b|c?)+d ad 0 2 1 1
416 a(b|c){0,0}d ad 0 2 -1 -1
417 a(b|c){0,1}d ad 0 2 -1 -1
418 a(b|c){0,1}d abd 0 3 1 2
419 a(b|c){0,2}d ad 0 2 -1 -1
420 a(b|c){0,2}d abcd 0 4 2 3
421 a(b|c){0,}d ad 0 2 -1 -1
422 a(b|c){0,}d abcd 0 4 2 3
423 a(b|c){1,1}d abd 0 3 1 2
424 a(b|c){1,2}d abd 0 3 1 2
425 a(b|c){1,2}d abcd 0 4 2 3
426 a(b|c){1,}d abd 0 3 1 2
427 a(b|c){1,}d abcd 0 4 2 3
428 a(b|c){2,2}d acbd 0 4 2 3
429 a(b|c){2,2}d abcd 0 4 2 3
430 a(b|c){2,4}d abcd 0 4 2 3
431 a(b|c){2,4}d abcbd 0 5 3 4
432 a(b|c){2,4}d abcbcd 0 6 4 5
433 a(b|c){2,}d abcd 0 4 2 3
434 a(b|c){2,}d abcbd 0 5 3 4
435 ; perl only: these conflict with the POSIX test below
436 ;a(b|c?)+d abcd 0 4 3 3
437 ;a(b+|((c)*))+d abd 0 3 2 2 2 2 -1 -1
438 ;a(b+|((c)*))+d abcd 0 4 3 3 3 3 2 3
439
440 ; posix only:
441 - match_default extended REG_EXTENDED REG_STARTEND
442
443 a(b|c?)+d abcd 0 4 2 3
444 a(b|((c)*))+d abcd 0 4 2 3 2 3 2 3
445 a(b+|((c)*))+d abd 0 3 1 2 -1 -1 -1 -1
446 a(b+|((c)*))+d abcd 0 4 2 3 2 3 2 3
447 a(b|((c)*))+d ad 0 2 1 1 1 1 -1 -1
448 a(b|((c)*))*d abcd 0 4 2 3 2 3 2 3
449 a(b+|((c)*))*d abd 0 3 1 2 -1 -1 -1 -1
450 a(b+|((c)*))*d abcd 0 4 2 3 2 3 2 3
451 a(b|((c)*))*d ad 0 2 1 1 1 1 -1 -1
452
453 - match_default normal REG_PERL
454 ; try to match C++ syntax elements:
455 ; line comment:
456 //[^\n]* "++i //here is a line comment\n" 4 28
457 ; block comment:
458 /\*([^*]|\*+[^*/])*\*+/ "/* here is a block comment */" 0 29 26 27
459 /\*([^*]|\*+[^*/])*\*+/ "/**/" 0 4 -1 -1
460 /\*([^*]|\*+[^*/])*\*+/ "/***/" 0 5 -1 -1
461 /\*([^*]|\*+[^*/])*\*+/ "/****/" 0 6 -1 -1
462 /\*([^*]|\*+[^*/])*\*+/ "/*****/" 0 7 -1 -1
463 /\*([^*]|\*+[^*/])*\*+/ "/*****/*/" 0 7 -1 -1
464 ; preprossor directives:
465 ^[[:blank:]]*#([^\n]*\\[[:space:]]+)*[^\n]* "#define some_symbol" 0 19 -1 -1
466 ^[[:blank:]]*#([^\n]*\\[[:space:]]+)*[^\n]* "#define some_symbol(x) #x" 0 25 -1 -1
467 ; perl only:
468 ^[[:blank:]]*#([^\n]*\\[[:space:]]+)*[^\n]* "#define some_symbol(x) \\  \r\n  foo();\\\r\n   printf(#x);" 0 53 30 42
469 ; literals:
470 ((0x[[:xdigit:]]+)|([[:digit:]]+))u?((int(8|16|32|64))|L)? 0xFF                                                         0 4             0 4             0 4     -1 -1   -1 -1   -1 -1   -1 -1
471 ((0x[[:xdigit:]]+)|([[:digit:]]+))u?((int(8|16|32|64))|L)? 35                                                                   0 2     0 2             -1 -1   0 2     -1 -1   -1 -1   -1 -1
472 ((0x[[:xdigit:]]+)|([[:digit:]]+))u?((int(8|16|32|64))|L)? 0xFFu                                                                0 5             0 4             0 4     -1 -1   -1 -1   -1 -1   -1 -1
473 ((0x[[:xdigit:]]+)|([[:digit:]]+))u?((int(8|16|32|64))|L)? 0xFFL                                                                0 5             0 4             0 4     -1 -1   4 5     -1 -1   -1 -1
474 ((0x[[:xdigit:]]+)|([[:digit:]]+))u?((int(8|16|32|64))|L)? 0xFFFFFFFFFFFFFFFFuint64                     0 24    0 18    0 18    -1 -1   19 24   19 24   22 24
475 ; strings:
476 '([^\\']|\\.)*' '\\x3A' 0 6 4 5
477 '([^\\']|\\.)*' '\\'' 0 4 1 3
478 '([^\\']|\\.)*' '\\n' 0 4 1 3
479
480 ; finally try some case insensitive matches:
481 - match_default normal REG_EXTENDED REG_ICASE
482 ; upper and lower have no meaning here so they fail, however these
483 ; may compile with other libraries...
484 ;[[:lower:]] !
485 ;[[:upper:]] !
486 0123456789@abcdefghijklmnopqrstuvwxyz\[\\\]\^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ\{\|\} 0123456789@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]\^_`abcdefghijklmnopqrstuvwxyz\{\|\} 0 72
487
488 ; known and suspected bugs:
489 - match_default normal REG_EXTENDED
490 \( ( 0 1
491 \) ) 0 1
492 \$ $ 0 1
493 \^ ^ 0 1
494 \. . 0 1
495 \* * 0 1
496 \+ + 0 1
497 \? ? 0 1
498 \[ [ 0 1
499 \] ] 0 1
500 \| | 0 1
501 \\ \\ 0 1
502 # # 0 1
503 \# # 0 1
504 a- a- 0 2
505 \- - 0 1
506 \{ { 0 1
507 \} } 0 1
508 0 0 0 1
509 1 1 0 1
510 9 9 0 1
511 b b 0 1
512 B B 0 1
513 < < 0 1
514 > > 0 1
515 w w 0 1
516 W W 0 1
517 ` ` 0 1
518 ' ' 0 1
519 \n \n 0 1
520 , , 0 1
521 a a 0 1
522 f f 0 1
523 n n 0 1
524 r r 0 1
525 t t 0 1
526 v v 0 1
527 c c 0 1
528 x x 0 1
529 : : 0 1
530 (\.[[:alnum:]]+){2} "w.a.b " 1 5 3 5
531
532 - match_default normal REG_EXTENDED REG_ICASE
533 a A 0 1
534 A a 0 1
535 [abc]+ abcABC 0 6
536 [ABC]+ abcABC 0 6
537 [a-z]+ abcABC 0 6
538 [A-Z]+ abzANZ 0 6
539 [a-Z]+ abzABZ 0 6
540 [A-z]+ abzABZ 0 6
541 [[:lower:]]+ abyzABYZ 0 8
542 [[:upper:]]+ abzABZ 0 6
543 [[:alpha:]]+ abyzABYZ 0 8
544 [[:alnum:]]+ 09abyzABYZ 0 10
545
546 ; word start:
547 \<abcd "  abcd" 2 6
548 \<ab cab -1 -1
549 \<ab "\nab" 1 3
550 \<tag ::tag 2 5
551 ;word end:
552 abc\> abc 0 3
553 abc\> abcd -1 -1
554 abc\> abc\n 0 3
555 abc\> abc:: 0 3
556
557 ; collating elements and rewritten set code:
558 - match_default normal REG_EXTENDED REG_STARTEND
559 ;[[.zero.]] 0 0 1
560 ;[[.one.]] 1 0 1
561 ;[[.two.]] 2 0 1
562 ;[[.three.]] 3 0 1
563 [[.a.]] baa 1 2
564 ;[[.right-curly-bracket.]] } 0 1
565 ;[[.NUL.]] \0 0 1
566 [[:<:]z] !
567 [a[:>:]] !
568 [[=a=]] a 0 1
569 ;[[=right-curly-bracket=]] } 0 1
570 - match_default normal REG_EXTENDED REG_STARTEND REG_ICASE
571 [[.A.]] A 0 1
572 [[.A.]] a 0 1
573 [[.A.]-b]+ AaBb 0 4
574 [A-[.b.]]+ AaBb 0 4
575 [[.a.]-B]+ AaBb 0 4
576 [a-[.B.]]+ AaBb 0 4
577 - match_default normal REG_EXTENDED REG_STARTEND
578 [[.a.]-c]+ abcd 0 3
579 [a-[.c.]]+ abcd 0 3
580 [[:alpha:]-a] !
581 [a-[:alpha:]] !
582
583 ; try mutli-character ligatures:
584 ;[[.ae.]] ae 0 2
585 ;[[.ae.]] aE -1 -1
586 ;[[.AE.]] AE 0 2
587 ;[[.Ae.]] Ae 0 2
588 ;[[.ae.]-b] a -1 -1
589 ;[[.ae.]-b] b 0 1
590 ;[[.ae.]-b] ae 0 2
591 ;[a-[.ae.]] a 0 1
592 ;[a-[.ae.]] b -1 -1
593 ;[a-[.ae.]] ae 0 2
594 - match_default normal REG_EXTENDED REG_STARTEND REG_ICASE
595 ;[[.ae.]] AE 0 2
596 ;[[.ae.]] Ae 0 2
597 ;[[.AE.]] Ae 0 2
598 ;[[.Ae.]] aE 0 2
599 ;[[.AE.]-B] a -1 -1
600 ;[[.Ae.]-b] b 0 1
601 ;[[.Ae.]-b] B 0 1
602 ;[[.ae.]-b] AE 0 2
603
604 - match_default normal REG_EXTENDED REG_STARTEND REG_NO_POSIX_TEST
605 \s+ "ab   ab" 2 5
606 \S+ "  abc  " 2 5
607
608 - match_default normal REG_EXTENDED REG_STARTEND
609 \`abc abc 0 3
610 \`abc aabc -1 -1
611 abc\' abc 0 3
612 abc\' abcd -1 -1
613 abc\' abc\n\n -1 -1
614 abc\' abc 0 3
615
616 ; extended repeat checking to exercise new algorithms:
617 ab.*xy abxy_ 0 4
618 ab.*xy ab_xy_ 0 5
619 ab.*xy abxy 0 4
620 ab.*xy ab_xy 0 5
621 ab.* ab 0 2
622 ab.* ab__ 0 4
623
624 ab.{2,5}xy ab__xy_ 0 6
625 ab.{2,5}xy ab____xy_ 0 8
626 ab.{2,5}xy ab_____xy_ 0 9
627 ab.{2,5}xy ab__xy 0 6
628 ab.{2,5}xy ab_____xy 0 9
629 ab.{2,5} ab__ 0 4
630 ab.{2,5} ab_______ 0 7
631 ab.{2,5}xy ab______xy -1 -1
632 ab.{2,5}xy ab_xy -1 -1
633
634 ab.*?xy abxy_ 0 4
635 ab.*?xy ab_xy_ 0 5
636 ab.*?xy abxy 0 4
637 ab.*?xy ab_xy 0 5
638 ab.*? ab 0 2
639 ab.*? ab__ 0 4
640
641 ab.{2,5}?xy ab__xy_ 0 6
642 ab.{2,5}?xy ab____xy_ 0 8
643 ab.{2,5}?xy ab_____xy_ 0 9
644 ab.{2,5}?xy ab__xy 0 6
645 ab.{2,5}?xy ab_____xy 0 9
646 ab.{2,5}? ab__ 0 4
647 ab.{2,5}? ab_______ 0 7
648 ab.{2,5}?xy ab______xy -1 -1
649 ab.{2,5}xy ab_xy -1 -1
650
651 ; again but with slower algorithm variant:
652 - match_default REG_EXTENDED
653 ; now again for single character repeats:
654
655 ab_*xy abxy_ 0 4
656 ab_*xy ab_xy_ 0 5
657 ab_*xy abxy 0 4
658 ab_*xy ab_xy 0 5
659 ab_* ab 0 2
660 ab_* ab__ 0 4
661
662 ab_{2,5}xy ab__xy_ 0 6
663 ab_{2,5}xy ab____xy_ 0 8
664 ab_{2,5}xy ab_____xy_ 0 9
665 ab_{2,5}xy ab__xy 0 6
666 ab_{2,5}xy ab_____xy 0 9
667 ab_{2,5} ab__ 0 4
668 ab_{2,5} ab_______ 0 7
669 ab_{2,5}xy ab______xy -1 -1
670 ab_{2,5}xy ab_xy -1 -1
671
672 ab_*?xy abxy_ 0 4
673 ab_*?xy ab_xy_ 0 5
674 ab_*?xy abxy 0 4
675 ab_*?xy ab_xy 0 5
676 ab_*? ab 0 2
677 ab_*? ab__ 0 4
678
679 ab_{2,5}?xy ab__xy_ 0 6
680 ab_{2,5}?xy ab____xy_ 0 8
681 ab_{2,5}?xy ab_____xy_ 0 9
682 ab_{2,5}?xy ab__xy 0 6
683 ab_{2,5}?xy ab_____xy 0 9
684 ab_{2,5}? ab__ 0 4
685 ab_{2,5}? ab_______ 0 7
686 ab_{2,5}?xy ab______xy -1 -1
687 ab_{2,5}xy ab_xy -1 -1
688
689 ; and again for sets:
690 ab[_,;]*xy abxy_ 0 4
691 ab[_,;]*xy ab_xy_ 0 5
692 ab[_,;]*xy abxy 0 4
693 ab[_,;]*xy ab_xy 0 5
694 ab[_,;]* ab 0 2
695 ab[_,;]* ab__ 0 4
696
697 ab[_,;]{2,5}xy ab__xy_ 0 6
698 ab[_,;]{2,5}xy ab____xy_ 0 8
699 ab[_,;]{2,5}xy ab_____xy_ 0 9
700 ab[_,;]{2,5}xy ab__xy 0 6
701 ab[_,;]{2,5}xy ab_____xy 0 9
702 ab[_,;]{2,5} ab__ 0 4
703 ab[_,;]{2,5} ab_______ 0 7
704 ab[_,;]{2,5}xy ab______xy -1 -1
705 ab[_,;]{2,5}xy ab_xy -1 -1
706
707 ab[_,;]*?xy abxy_ 0 4
708 ab[_,;]*?xy ab_xy_ 0 5
709 ab[_,;]*?xy abxy 0 4
710 ab[_,;]*?xy ab_xy 0 5
711 ab[_,;]*? ab 0 2
712 ab[_,;]*? ab__ 0 4
713
714 ab[_,;]{2,5}?xy ab__xy_ 0 6
715 ab[_,;]{2,5}?xy ab____xy_ 0 8
716 ab[_,;]{2,5}?xy ab_____xy_ 0 9
717 ab[_,;]{2,5}?xy ab__xy 0 6
718 ab[_,;]{2,5}?xy ab_____xy 0 9
719 ab[_,;]{2,5}? ab__ 0 4
720 ab[_,;]{2,5}? ab_______ 0 7
721 ab[_,;]{2,5}?xy ab______xy -1 -1
722 ab[_,;]{2,5}xy ab_xy -1 -1
723
724 ; and again for tricky sets with digraphs:
725 ;ab[_[.ae.]]*xy abxy_ 0 4
726 ;ab[_[.ae.]]*xy ab_xy_ 0 5
727 ;ab[_[.ae.]]*xy abxy 0 4
728 ;ab[_[.ae.]]*xy ab_xy 0 5
729 ;ab[_[.ae.]]* ab 0 2
730 ;ab[_[.ae.]]* ab__ 0 4
731
732 ;ab[_[.ae.]]{2,5}xy ab__xy_ 0 6
733 ;ab[_[.ae.]]{2,5}xy ab____xy_ 0 8
734 ;ab[_[.ae.]]{2,5}xy ab_____xy_ 0 9
735 ;ab[_[.ae.]]{2,5}xy ab__xy 0 6
736 ;ab[_[.ae.]]{2,5}xy ab_____xy 0 9
737 ;ab[_[.ae.]]{2,5} ab__ 0 4
738 ;ab[_[.ae.]]{2,5} ab_______ 0 7
739 ;ab[_[.ae.]]{2,5}xy ab______xy -1 -1
740 ;ab[_[.ae.]]{2,5}xy ab_xy -1 -1
741
742 ;ab[_[.ae.]]*?xy abxy_ 0 4
743 ;ab[_[.ae.]]*?xy ab_xy_ 0 5
744 ;ab[_[.ae.]]*?xy abxy 0 4
745 ;ab[_[.ae.]]*?xy ab_xy 0 5
746 ;ab[_[.ae.]]*? ab 0 2
747 ;ab[_[.ae.]]*? ab__ 0 2
748
749 ;ab[_[.ae.]]{2,5}?xy ab__xy_ 0 6
750 ;ab[_[.ae.]]{2,5}?xy ab____xy_ 0 8
751 ;ab[_[.ae.]]{2,5}?xy ab_____xy_ 0 9
752 ;ab[_[.ae.]]{2,5}?xy ab__xy 0 6
753 ;ab[_[.ae.]]{2,5}?xy ab_____xy 0 9
754 ;ab[_[.ae.]]{2,5}? ab__ 0 4
755 ;ab[_[.ae.]]{2,5}? ab_______ 0 4
756 ;ab[_[.ae.]]{2,5}?xy ab______xy -1 -1
757 ;ab[_[.ae.]]{2,5}xy ab_xy -1 -1
758
759 ; new bugs detected in spring 2003:
760 - normal match_continuous REG_NO_POSIX_TEST
761 b abc 1 2
762
763 () abc 0 0 0 0
764 ^() abc 0 0 0 0
765 ^()+ abc 0 0 0 0
766 ^(){1} abc 0 0 0 0
767 ^(){2} abc 0 0 0 0
768 ^((){2}) abc 0 0 0 0 0 0
769 () "" 0 0 0 0
770 ()\1 "" 0 0 0 0
771 ()\1 a 0 0 0 0
772 a()\1b ab 0 2 1 1
773 a()b\1 ab 0 2 1 1
774
775 ; subtleties of matching with no sub-expressions marked
776 - normal match_nosubs REG_NO_POSIX_TEST
777 a(b?c)+d accd 0 4 
778 (wee|week)(knights|night) weeknights 0 10 
779 .* abc 0 3
780 a(b|(c))d abd 0 3 
781 a(b|(c))d acd 0 3
782 a(b*|c|e)d abbd 0 4
783 a(b*|c|e)d acd 0 3 
784 a(b*|c|e)d ad 0 2
785 a(b?)c abc 0 3
786 a(b?)c ac 0 2
787 a(b+)c abc 0 3
788 a(b+)c abbbc 0 5
789 a(b*)c ac 0 2
790 (a|ab)(bc([de]+)f|cde) abcdef 0 6
791 a([bc]?)c abc 0 3
792 a([bc]?)c ac 0 2
793 a([bc]+)c abc 0 3
794 a([bc]+)c abcc 0 4
795 a([bc]+)bc abcbc 0 5
796 a(bb+|b)b abb 0 3
797 a(bbb+|bb+|b)b abb 0 3
798 a(bbb+|bb+|b)b abbb 0 4
799 a(bbb+|bb+|b)bb abbb 0 4
800 (.*).* abcdef 0 6
801 (a*)* bc 0 0
802
803 - normal nosubs REG_NO_POSIX_TEST
804 a(b?c)+d accd 0 4 
805 (wee|week)(knights|night) weeknights 0 10 
806 .* abc 0 3
807 a(b|(c))d abd 0 3 
808 a(b|(c))d acd 0 3
809 a(b*|c|e)d abbd 0 4
810 a(b*|c|e)d acd 0 3 
811 a(b*|c|e)d ad 0 2
812 a(b?)c abc 0 3
813 a(b?)c ac 0 2
814 a(b+)c abc 0 3
815 a(b+)c abbbc 0 5
816 a(b*)c ac 0 2
817 (a|ab)(bc([de]+)f|cde) abcdef 0 6
818 a([bc]?)c abc 0 3
819 a([bc]?)c ac 0 2
820 a([bc]+)c abc 0 3
821 a([bc]+)c abcc 0 4
822 a([bc]+)bc abcbc 0 5
823 a(bb+|b)b abb 0 3
824 a(bbb+|bb+|b)b abb 0 3
825 a(bbb+|bb+|b)b abbb 0 4
826 a(bbb+|bb+|b)bb abbb 0 4
827 (.*).* abcdef 0 6
828 (a*)* bc 0 0
829