1 //===----------------------------------------------------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 // <regex>
11 
12 // template <class BidirectionalIterator, class Allocator, class charT,
13 //           class traits>
14 //   bool regex_match(BidirectionalIterator first, BidirectionalIterator last,
15 //                    match_results<BidirectionalIterator, Allocator>& m,
16 //                    const basic_regex<charT, traits>& e,
17 //                    regex_constants::match_flag_type flags
18 //                                            = regex_constants::match_default);
19 
20 #include <regex>
21 #include <cassert>
22 
23 #include "test_iterators.h"
24 
main()25 int main()
26 {
27 /*    {
28         std::cmatch m;
29         const char s[] = "a";
30         assert(std::regex_match(s, m, std::regex("a", std::regex_constants::awk)));
31         assert(m.size() == 1);
32         assert(!m.empty());
33         assert(!m.prefix().matched);
34         assert(m.prefix().first == s);
35         assert(m.prefix().second == m[0].first);
36         assert(!m.suffix().matched);
37         assert(m.suffix().first == m[0].second);
38         assert(m.suffix().second == s+1);
39         assert(m.length(0) == 1);
40         assert(m.position(0) == 0);
41         assert(m.str(0) == "a");
42     }
43     {
44         std::cmatch m;
45         const char s[] = "ab";
46         assert(std::regex_match(s, m, std::regex("ab", std::regex_constants::awk)));
47         assert(m.size() == 1);
48         assert(!m.prefix().matched);
49         assert(m.prefix().first == s);
50         assert(m.prefix().second == m[0].first);
51         assert(!m.suffix().matched);
52         assert(m.suffix().first == m[0].second);
53         assert(m.suffix().second == s+2);
54         assert(m.length(0) == 2);
55         assert(m.position(0) == 0);
56         assert(m.str(0) == "ab");
57     }
58     {
59         std::cmatch m;
60         const char s[] = "ab";
61         assert(!std::regex_match(s, m, std::regex("ba", std::regex_constants::awk)));
62         assert(m.size() == 0);
63         assert(m.empty());
64     }
65     {
66         std::cmatch m;
67         const char s[] = "aab";
68         assert(!std::regex_match(s, m, std::regex("ab", std::regex_constants::awk)));
69         assert(m.size() == 0);
70     }
71     {
72         std::cmatch m;
73         const char s[] = "aab";
74         assert(!std::regex_match(s, m, std::regex("ab", std::regex_constants::awk),
75                                             std::regex_constants::match_continuous));
76         assert(m.size() == 0);
77     }
78     {
79         std::cmatch m;
80         const char s[] = "abcd";
81         assert(!std::regex_match(s, m, std::regex("bc", std::regex_constants::awk)));
82         assert(m.size() == 0);
83     }
84     {
85         std::cmatch m;
86         const char s[] = "abbc";
87         assert(std::regex_match(s, m, std::regex("ab*c", std::regex_constants::awk)));
88         assert(m.size() == 1);
89         assert(!m.prefix().matched);
90         assert(m.prefix().first == s);
91         assert(m.prefix().second == m[0].first);
92         assert(!m.suffix().matched);
93         assert(m.suffix().first == m[0].second);
94         assert(m.suffix().second == s+4);
95         assert(m.length(0) == 4);
96         assert(m.position(0) == 0);
97         assert(m.str(0) == s);
98     }
99     {
100         std::cmatch m;
101         const char s[] = "ababc";
102         assert(std::regex_match(s, m, std::regex("(ab)*c", std::regex_constants::awk)));
103         assert(m.size() == 2);
104         assert(!m.prefix().matched);
105         assert(m.prefix().first == s);
106         assert(m.prefix().second == m[0].first);
107         assert(!m.suffix().matched);
108         assert(m.suffix().first == m[0].second);
109         assert(m.suffix().second == s+5);
110         assert(m.length(0) == 5);
111         assert(m.position(0) == 0);
112         assert(m.str(0) == s);
113         assert(m.length(1) == 2);
114         assert(m.position(1) == 2);
115         assert(m.str(1) == "ab");
116     }
117     {
118         std::cmatch m;
119         const char s[] = "abcdefghijk";
120         assert(!std::regex_match(s, m, std::regex("cd((e)fg)hi",
121                                  std::regex_constants::awk)));
122         assert(m.size() == 0);
123     }
124     {
125         std::cmatch m;
126         const char s[] = "abc";
127         assert(std::regex_match(s, m, std::regex("^abc", std::regex_constants::awk)));
128         assert(m.size() == 1);
129         assert(!m.prefix().matched);
130         assert(m.prefix().first == s);
131         assert(m.prefix().second == m[0].first);
132         assert(!m.suffix().matched);
133         assert(m.suffix().first == m[0].second);
134         assert(m.suffix().second == s+3);
135         assert(m.length(0) == 3);
136         assert(m.position(0) == 0);
137         assert(m.str(0) == s);
138     }
139     {
140         std::cmatch m;
141         const char s[] = "abcd";
142         assert(!std::regex_match(s, m, std::regex("^abc", std::regex_constants::awk)));
143         assert(m.size() == 0);
144     }
145     {
146         std::cmatch m;
147         const char s[] = "aabc";
148         assert(!std::regex_match(s, m, std::regex("^abc", std::regex_constants::awk)));
149         assert(m.size() == 0);
150     }
151     {
152         std::cmatch m;
153         const char s[] = "abc";
154         assert(std::regex_match(s, m, std::regex("abc$", std::regex_constants::awk)));
155         assert(m.size() == 1);
156         assert(!m.prefix().matched);
157         assert(m.prefix().first == s);
158         assert(m.prefix().second == m[0].first);
159         assert(!m.suffix().matched);
160         assert(m.suffix().first == m[0].second);
161         assert(m.suffix().second == s+3);
162         assert(m.length(0) == 3);
163         assert(m.position(0) == 0);
164         assert(m.str(0) == s);
165     }
166     {
167         std::cmatch m;
168         const char s[] = "efabc";
169         assert(!std::regex_match(s, m, std::regex("abc$", std::regex_constants::awk)));
170         assert(m.size() == 0);
171     }
172     {
173         std::cmatch m;
174         const char s[] = "efabcg";
175         assert(!std::regex_match(s, m, std::regex("abc$", std::regex_constants::awk)));
176         assert(m.size() == 0);
177     }
178     {
179         std::cmatch m;
180         const char s[] = "abc";
181         assert(std::regex_match(s, m, std::regex("a.c", std::regex_constants::awk)));
182         assert(m.size() == 1);
183         assert(!m.prefix().matched);
184         assert(m.prefix().first == s);
185         assert(m.prefix().second == m[0].first);
186         assert(!m.suffix().matched);
187         assert(m.suffix().first == m[0].second);
188         assert(m.suffix().second == s+3);
189         assert(m.length(0) == 3);
190         assert(m.position(0) == 0);
191         assert(m.str(0) == s);
192     }
193     {
194         std::cmatch m;
195         const char s[] = "acc";
196         assert(std::regex_match(s, m, std::regex("a.c", std::regex_constants::awk)));
197         assert(m.size() == 1);
198         assert(!m.prefix().matched);
199         assert(m.prefix().first == s);
200         assert(m.prefix().second == m[0].first);
201         assert(!m.suffix().matched);
202         assert(m.suffix().first == m[0].second);
203         assert(m.suffix().second == s+3);
204         assert(m.length(0) == 3);
205         assert(m.position(0) == 0);
206         assert(m.str(0) == s);
207     }
208     {
209         std::cmatch m;
210         const char s[] = "acc";
211         assert(std::regex_match(s, m, std::regex("a.c", std::regex_constants::awk)));
212         assert(m.size() == 1);
213         assert(!m.prefix().matched);
214         assert(m.prefix().first == s);
215         assert(m.prefix().second == m[0].first);
216         assert(!m.suffix().matched);
217         assert(m.suffix().first == m[0].second);
218         assert(m.suffix().second == s+3);
219         assert(m.length(0) == 3);
220         assert(m.position(0) == 0);
221         assert(m.str(0) == s);
222     }
223     {
224         std::cmatch m;
225         const char s[] = "abcdef";
226         assert(std::regex_match(s, m, std::regex("(.*).*", std::regex_constants::awk)));
227         assert(m.size() == 2);
228         assert(!m.prefix().matched);
229         assert(m.prefix().first == s);
230         assert(m.prefix().second == m[0].first);
231         assert(!m.suffix().matched);
232         assert(m.suffix().first == m[0].second);
233         assert(m.suffix().second == s+6);
234         assert(m.length(0) == 6);
235         assert(m.position(0) == 0);
236         assert(m.str(0) == s);
237         assert(m.length(1) == 6);
238         assert(m.position(1) == 0);
239         assert(m.str(1) == s);
240     }
241     {
242         std::cmatch m;
243         const char s[] = "bc";
244         assert(!std::regex_match(s, m, std::regex("(a*)*", std::regex_constants::awk)));
245         assert(m.size() == 0);
246     }
247     {
248         std::cmatch m;
249         const char s[] = "abbc";
250         assert(!std::regex_match(s, m, std::regex("ab{3,5}c", std::regex_constants::awk)));
251         assert(m.size() == 0);
252     }
253     {
254         std::cmatch m;
255         const char s[] = "abbbc";
256         assert(std::regex_match(s, m, std::regex("ab{3,5}c", std::regex_constants::awk)));
257         assert(m.size() == 1);
258         assert(!m.prefix().matched);
259         assert(m.prefix().first == s);
260         assert(m.prefix().second == m[0].first);
261         assert(!m.suffix().matched);
262         assert(m.suffix().first == m[0].second);
263         assert(m.suffix().second == m[0].second);
264         assert(m.length(0) == std::char_traits<char>::length(s));
265         assert(m.position(0) == 0);
266         assert(m.str(0) == s);
267     }
268     {
269         std::cmatch m;
270         const char s[] = "abbbbc";
271         assert(std::regex_match(s, m, std::regex("ab{3,5}c", std::regex_constants::awk)));
272         assert(m.size() == 1);
273         assert(!m.prefix().matched);
274         assert(m.prefix().first == s);
275         assert(m.prefix().second == m[0].first);
276         assert(!m.suffix().matched);
277         assert(m.suffix().first == m[0].second);
278         assert(m.suffix().second == m[0].second);
279         assert(m.length(0) == std::char_traits<char>::length(s));
280         assert(m.position(0) == 0);
281         assert(m.str(0) == s);
282     }
283     {
284         std::cmatch m;
285         const char s[] = "abbbbbc";
286         assert(std::regex_match(s, m, std::regex("ab{3,5}c", std::regex_constants::awk)));
287         assert(m.size() == 1);
288         assert(!m.prefix().matched);
289         assert(m.prefix().first == s);
290         assert(m.prefix().second == m[0].first);
291         assert(!m.suffix().matched);
292         assert(m.suffix().first == m[0].second);
293         assert(m.suffix().second == m[0].second);
294         assert(m.length(0) == std::char_traits<char>::length(s));
295         assert(m.position(0) == 0);
296         assert(m.str(0) == s);
297     }
298     {
299         std::cmatch m;
300         const char s[] = "adefc";
301         assert(!std::regex_match(s, m, std::regex("ab{3,5}c", std::regex_constants::awk)));
302         assert(m.size() == 0);
303     }
304     {
305         std::cmatch m;
306         const char s[] = "abbbbbbc";
307         assert(!std::regex_match(s, m, std::regex("ab{3,5}c", std::regex_constants::awk)));
308         assert(m.size() == 0);
309     }
310     {
311         std::cmatch m;
312         const char s[] = "adec";
313         assert(!std::regex_match(s, m, std::regex("a.{3,5}c", std::regex_constants::awk)));
314         assert(m.size() == 0);
315     }
316     {
317         std::cmatch m;
318         const char s[] = "adefc";
319         assert(std::regex_match(s, m, std::regex("a.{3,5}c", std::regex_constants::awk)));
320         assert(m.size() == 1);
321         assert(!m.prefix().matched);
322         assert(m.prefix().first == s);
323         assert(m.prefix().second == m[0].first);
324         assert(!m.suffix().matched);
325         assert(m.suffix().first == m[0].second);
326         assert(m.suffix().second == m[0].second);
327         assert(m.length(0) == std::char_traits<char>::length(s));
328         assert(m.position(0) == 0);
329         assert(m.str(0) == s);
330     }
331     {
332         std::cmatch m;
333         const char s[] = "adefgc";
334         assert(std::regex_match(s, m, std::regex("a.{3,5}c", std::regex_constants::awk)));
335         assert(m.size() == 1);
336         assert(!m.prefix().matched);
337         assert(m.prefix().first == s);
338         assert(m.prefix().second == m[0].first);
339         assert(!m.suffix().matched);
340         assert(m.suffix().first == m[0].second);
341         assert(m.suffix().second == m[0].second);
342         assert(m.length(0) == std::char_traits<char>::length(s));
343         assert(m.position(0) == 0);
344         assert(m.str(0) == s);
345     }
346     {
347         std::cmatch m;
348         const char s[] = "adefghc";
349         assert(std::regex_match(s, m, std::regex("a.{3,5}c", std::regex_constants::awk)));
350         assert(m.size() == 1);
351         assert(!m.prefix().matched);
352         assert(m.prefix().first == s);
353         assert(m.prefix().second == m[0].first);
354         assert(!m.suffix().matched);
355         assert(m.suffix().first == m[0].second);
356         assert(m.suffix().second == m[0].second);
357         assert(m.length(0) == std::char_traits<char>::length(s));
358         assert(m.position(0) == 0);
359         assert(m.str(0) == s);
360     }
361     {
362         std::cmatch m;
363         const char s[] = "adefghic";
364         assert(!std::regex_match(s, m, std::regex("a.{3,5}c", std::regex_constants::awk)));
365         assert(m.size() == 0);
366     }
367     {
368         std::cmatch m;
369         const char s[] = "tournament";
370         assert(std::regex_match(s, m, std::regex("tour|to|tournament",
371                                               std::regex_constants::awk)));
372         assert(m.size() == 1);
373         assert(!m.prefix().matched);
374         assert(m.prefix().first == s);
375         assert(m.prefix().second == m[0].first);
376         assert(!m.suffix().matched);
377         assert(m.suffix().first == m[0].second);
378         assert(m.suffix().second == m[0].second);
379         assert(m.length(0) == std::char_traits<char>::length(s));
380         assert(m.position(0) == 0);
381         assert(m.str(0) == s);
382     }
383     {
384         std::cmatch m;
385         const char s[] = "tournamenttotour";
386         assert(std::regex_match(s, m, std::regex("(tour|to|tournament)+",
387                std::regex_constants::awk | std::regex_constants::nosubs)));
388         assert(m.size() == 1);
389         assert(!m.prefix().matched);
390         assert(m.prefix().first == s);
391         assert(m.prefix().second == m[0].first);
392         assert(!m.suffix().matched);
393         assert(m.suffix().first == m[0].second);
394         assert(m.suffix().second == m[0].second);
395         assert(m.length(0) == std::char_traits<char>::length(s));
396         assert(m.position(0) == 0);
397         assert(m.str(0) == s);
398     }
399     {
400         std::cmatch m;
401         const char s[] = "ttotour";
402         assert(std::regex_match(s, m, std::regex("(tour|to|t)+",
403                                               std::regex_constants::awk)));
404         assert(m.size() == 2);
405         assert(!m.prefix().matched);
406         assert(m.prefix().first == s);
407         assert(m.prefix().second == m[0].first);
408         assert(!m.suffix().matched);
409         assert(m.suffix().first == m[0].second);
410         assert(m.suffix().second == m[0].second);
411         assert(m.length(0) == std::char_traits<char>::length(s));
412         assert(m.position(0) == 0);
413         assert(m.str(0) == s);
414         assert(m.length(1) == 4);
415         assert(m.position(1) == 3);
416         assert(m.str(1) == "tour");
417     }
418     {
419         std::cmatch m;
420         const char s[] = "-ab,ab-";
421         assert(!std::regex_match(s, m, std::regex("-(.*),\1-", std::regex_constants::awk)));
422         assert(m.size() == 0);
423     }
424     {
425         std::cmatch m;
426         const char s[] = "-ab,ab-";
427         assert(std::regex_match(s, m, std::regex("-.*,.*-", std::regex_constants::awk)));
428         assert(m.size() == 1);
429         assert(!m.prefix().matched);
430         assert(m.prefix().first == s);
431         assert(m.prefix().second == m[0].first);
432         assert(!m.suffix().matched);
433         assert(m.suffix().first == m[0].second);
434         assert(m.suffix().second == m[0].second);
435         assert(m.length(0) == std::char_traits<char>::length(s));
436         assert(m.position(0) == 0);
437         assert(m.str(0) == s);
438     }
439     {
440         std::cmatch m;
441         const char s[] = "a";
442         assert(std::regex_match(s, m, std::regex("^[a]$",
443                                                  std::regex_constants::awk)));
444         assert(m.size() == 1);
445         assert(!m.prefix().matched);
446         assert(m.prefix().first == s);
447         assert(m.prefix().second == m[0].first);
448         assert(!m.suffix().matched);
449         assert(m.suffix().first == m[0].second);
450         assert(m.suffix().second == m[0].second);
451         assert(m.length(0) == 1);
452         assert(m.position(0) == 0);
453         assert(m.str(0) == "a");
454     }
455     {
456         std::cmatch m;
457         const char s[] = "a";
458         assert(std::regex_match(s, m, std::regex("^[ab]$",
459                                                  std::regex_constants::awk)));
460         assert(m.size() == 1);
461         assert(!m.prefix().matched);
462         assert(m.prefix().first == s);
463         assert(m.prefix().second == m[0].first);
464         assert(!m.suffix().matched);
465         assert(m.suffix().first == m[0].second);
466         assert(m.suffix().second == m[0].second);
467         assert(m.length(0) == 1);
468         assert(m.position(0) == 0);
469         assert(m.str(0) == "a");
470     }
471     {
472         std::cmatch m;
473         const char s[] = "c";
474         assert(std::regex_match(s, m, std::regex("^[a-f]$",
475                                                  std::regex_constants::awk)));
476         assert(m.size() == 1);
477         assert(!m.prefix().matched);
478         assert(m.prefix().first == s);
479         assert(m.prefix().second == m[0].first);
480         assert(!m.suffix().matched);
481         assert(m.suffix().first == m[0].second);
482         assert(m.suffix().second == m[0].second);
483         assert(m.length(0) == 1);
484         assert(m.position(0) == 0);
485         assert(m.str(0) == s);
486     }
487     {
488         std::cmatch m;
489         const char s[] = "g";
490         assert(!std::regex_match(s, m, std::regex("^[a-f]$",
491                                                  std::regex_constants::awk)));
492         assert(m.size() == 0);
493     }
494     {
495         std::cmatch m;
496         const char s[] = "Iraqi";
497         assert(!std::regex_match(s, m, std::regex("q[^u]",
498                                                  std::regex_constants::awk)));
499         assert(m.size() == 0);
500     }
501     {
502         std::cmatch m;
503         const char s[] = "Iraq";
504         assert(!std::regex_match(s, m, std::regex("q[^u]",
505                                                  std::regex_constants::awk)));
506         assert(m.size() == 0);
507     }
508     {
509         std::cmatch m;
510         const char s[] = "AmB";
511         assert(std::regex_match(s, m, std::regex("A[[:lower:]]B",
512                                                  std::regex_constants::awk)));
513         assert(m.size() == 1);
514         assert(!m.prefix().matched);
515         assert(m.prefix().first == s);
516         assert(m.prefix().second == m[0].first);
517         assert(!m.suffix().matched);
518         assert(m.suffix().first == m[0].second);
519         assert(m.suffix().second == m[0].second);
520         assert(m.length(0) == std::char_traits<char>::length(s));
521         assert(m.position(0) == 0);
522         assert(m.str(0) == s);
523     }
524     {
525         std::cmatch m;
526         const char s[] = "AMB";
527         assert(!std::regex_match(s, m, std::regex("A[[:lower:]]B",
528                                                  std::regex_constants::awk)));
529         assert(m.size() == 0);
530     }
531     {
532         std::cmatch m;
533         const char s[] = "AMB";
534         assert(std::regex_match(s, m, std::regex("A[^[:lower:]]B",
535                                                  std::regex_constants::awk)));
536         assert(m.size() == 1);
537         assert(!m.prefix().matched);
538         assert(m.prefix().first == s);
539         assert(m.prefix().second == m[0].first);
540         assert(!m.suffix().matched);
541         assert(m.suffix().first == m[0].second);
542         assert(m.suffix().second == m[0].second);
543         assert(m.length(0) == std::char_traits<char>::length(s));
544         assert(m.position(0) == 0);
545         assert(m.str(0) == s);
546     }
547     {
548         std::cmatch m;
549         const char s[] = "AmB";
550         assert(!std::regex_match(s, m, std::regex("A[^[:lower:]]B",
551                                                  std::regex_constants::awk)));
552         assert(m.size() == 0);
553     }
554     {
555         std::cmatch m;
556         const char s[] = "A5B";
557         assert(!std::regex_match(s, m, std::regex("A[^[:lower:]0-9]B",
558                                                  std::regex_constants::awk)));
559         assert(m.size() == 0);
560     }
561     {
562         std::cmatch m;
563         const char s[] = "A?B";
564         assert(std::regex_match(s, m, std::regex("A[^[:lower:]0-9]B",
565                                                  std::regex_constants::awk)));
566         assert(m.size() == 1);
567         assert(!m.prefix().matched);
568         assert(m.prefix().first == s);
569         assert(m.prefix().second == m[0].first);
570         assert(!m.suffix().matched);
571         assert(m.suffix().first == m[0].second);
572         assert(m.suffix().second == m[0].second);
573         assert(m.length(0) == std::char_traits<char>::length(s));
574         assert(m.position(0) == 0);
575         assert(m.str(0) == s);
576     }
577     {
578         std::cmatch m;
579         const char s[] = "-";
580         assert(std::regex_match(s, m, std::regex("[a[.hyphen.]z]",
581                                                  std::regex_constants::awk)));
582         assert(m.size() == 1);
583         assert(!m.prefix().matched);
584         assert(m.prefix().first == s);
585         assert(m.prefix().second == m[0].first);
586         assert(!m.suffix().matched);
587         assert(m.suffix().first == m[0].second);
588         assert(m.suffix().second == m[0].second);
589         assert(m.length(0) == std::char_traits<char>::length(s));
590         assert(m.position(0) == 0);
591         assert(m.str(0) == s);
592     }
593     {
594         std::cmatch m;
595         const char s[] = "z";
596         assert(std::regex_match(s, m, std::regex("[a[.hyphen.]z]",
597                                                  std::regex_constants::awk)));
598         assert(m.size() == 1);
599         assert(!m.prefix().matched);
600         assert(m.prefix().first == s);
601         assert(m.prefix().second == m[0].first);
602         assert(!m.suffix().matched);
603         assert(m.suffix().first == m[0].second);
604         assert(m.suffix().second == m[0].second);
605         assert(m.length(0) == std::char_traits<char>::length(s));
606         assert(m.position(0) == 0);
607         assert(m.str(0) == s);
608     }
609     {
610         std::cmatch m;
611         const char s[] = "m";
612         assert(!std::regex_match(s, m, std::regex("[a[.hyphen.]z]",
613                                                  std::regex_constants::awk)));
614         assert(m.size() == 0);
615     }
616     std::locale::global(std::locale("cs_CZ.ISO8859-2"));
617 */    {
618         std::cmatch m;
619         const char s[] = "m";
620        /* assert(std::regex_match(s, m,*/ std::regex("[a[=M=]z]"/*,
621                                                  std::regex_constants::awk*/);//));
622 /*        assert(m.size() == 1);
623         assert(!m.prefix().matched);
624         assert(m.prefix().first == s);
625         assert(m.prefix().second == m[0].first);
626         assert(!m.suffix().matched);
627         assert(m.suffix().first == m[0].second);
628         assert(m.suffix().second == m[0].second);
629         assert(m.length(0) == std::char_traits<char>::length(s));
630         assert(m.position(0) == 0);
631         assert(m.str(0) == s);
632 */    }
633 /*    {
634         std::cmatch m;
635         const char s[] = "Ch";
636         assert(std::regex_match(s, m, std::regex("[a[.ch.]z]",
637                    std::regex_constants::awk | std::regex_constants::icase)));
638         assert(m.size() == 1);
639         assert(!m.prefix().matched);
640         assert(m.prefix().first == s);
641         assert(m.prefix().second == m[0].first);
642         assert(!m.suffix().matched);
643         assert(m.suffix().first == m[0].second);
644         assert(m.suffix().second == m[0].second);
645         assert(m.length(0) == std::char_traits<char>::length(s));
646         assert(m.position(0) == 0);
647         assert(m.str(0) == s);
648     }
649     std::locale::global(std::locale("C"));
650     {
651         std::cmatch m;
652         const char s[] = "m";
653         assert(!std::regex_match(s, m, std::regex("[a[=M=]z]",
654                                                  std::regex_constants::awk)));
655         assert(m.size() == 0);
656     }
657     {
658         std::cmatch m;
659         const char s[] = "01a45cef9";
660         assert(!std::regex_match(s, m, std::regex("[ace1-9]*",
661                                                  std::regex_constants::awk)));
662         assert(m.size() == 0);
663     }
664     {
665         std::cmatch m;
666         const char s[] = "01a45cef9";
667         assert(!std::regex_match(s, m, std::regex("[ace1-9]+",
668                                                  std::regex_constants::awk)));
669         assert(m.size() == 0);
670     }
671     {
672         const char r[] = "^[-+]?[0-9]+[CF]$";
673         std::ptrdiff_t sr = std::char_traits<char>::length(r);
674         typedef forward_iterator<const char*> FI;
675         typedef bidirectional_iterator<const char*> BI;
676         std::regex regex(FI(r), FI(r+sr), std::regex_constants::awk);
677         std::match_results<BI> m;
678         const char s[] = "-40C";
679         std::ptrdiff_t ss = std::char_traits<char>::length(s);
680         assert(std::regex_match(BI(s), BI(s+ss), m, regex));
681         assert(m.size() == 1);
682         assert(!m.prefix().matched);
683         assert(m.prefix().first == BI(s));
684         assert(m.prefix().second == m[0].first);
685         assert(!m.suffix().matched);
686         assert(m.suffix().first == m[0].second);
687         assert(m.suffix().second == m[0].second);
688         assert(m.length(0) == 4);
689         assert(m.position(0) == 0);
690         assert(m.str(0) == s);
691     }
692     {
693         std::cmatch m;
694         const char s[] = "\n\n\n";
695         assert(std::regex_match(s, m, std::regex("[\\n]+",
696                                                  std::regex_constants::awk)));
697         assert(m.size() == 1);
698         assert(!m.prefix().matched);
699         assert(m.prefix().first == s);
700         assert(m.prefix().second == m[0].first);
701         assert(!m.suffix().matched);
702         assert(m.suffix().first == m[0].second);
703         assert(m.suffix().second == s + std::char_traits<char>::length(s));
704         assert(m.length(0) == std::char_traits<char>::length(s));
705         assert(m.position(0) == 0);
706         assert(m.str(0) == s);
707     }
708     {
709         std::wcmatch m;
710         const wchar_t s[] = L"a";
711         assert(std::regex_match(s, m, std::wregex(L"a", std::regex_constants::awk)));
712         assert(m.size() == 1);
713         assert(!m.empty());
714         assert(!m.prefix().matched);
715         assert(m.prefix().first == s);
716         assert(m.prefix().second == m[0].first);
717         assert(!m.suffix().matched);
718         assert(m.suffix().first == m[0].second);
719         assert(m.suffix().second == s+1);
720         assert(m.length(0) == 1);
721         assert(m.position(0) == 0);
722         assert(m.str(0) == L"a");
723     }
724     {
725         std::wcmatch m;
726         const wchar_t s[] = L"ab";
727         assert(std::regex_match(s, m, std::wregex(L"ab", std::regex_constants::awk)));
728         assert(m.size() == 1);
729         assert(!m.prefix().matched);
730         assert(m.prefix().first == s);
731         assert(m.prefix().second == m[0].first);
732         assert(!m.suffix().matched);
733         assert(m.suffix().first == m[0].second);
734         assert(m.suffix().second == s+2);
735         assert(m.length(0) == 2);
736         assert(m.position(0) == 0);
737         assert(m.str(0) == L"ab");
738     }
739     {
740         std::wcmatch m;
741         const wchar_t s[] = L"ab";
742         assert(!std::regex_match(s, m, std::wregex(L"ba", std::regex_constants::awk)));
743         assert(m.size() == 0);
744         assert(m.empty());
745     }
746     {
747         std::wcmatch m;
748         const wchar_t s[] = L"aab";
749         assert(!std::regex_match(s, m, std::wregex(L"ab", std::regex_constants::awk)));
750         assert(m.size() == 0);
751     }
752     {
753         std::wcmatch m;
754         const wchar_t s[] = L"aab";
755         assert(!std::regex_match(s, m, std::wregex(L"ab", std::regex_constants::awk),
756                                             std::regex_constants::match_continuous));
757         assert(m.size() == 0);
758     }
759     {
760         std::wcmatch m;
761         const wchar_t s[] = L"abcd";
762         assert(!std::regex_match(s, m, std::wregex(L"bc", std::regex_constants::awk)));
763         assert(m.size() == 0);
764     }
765     {
766         std::wcmatch m;
767         const wchar_t s[] = L"abbc";
768         assert(std::regex_match(s, m, std::wregex(L"ab*c", std::regex_constants::awk)));
769         assert(m.size() == 1);
770         assert(!m.prefix().matched);
771         assert(m.prefix().first == s);
772         assert(m.prefix().second == m[0].first);
773         assert(!m.suffix().matched);
774         assert(m.suffix().first == m[0].second);
775         assert(m.suffix().second == s+4);
776         assert(m.length(0) == 4);
777         assert(m.position(0) == 0);
778         assert(m.str(0) == s);
779     }
780     {
781         std::wcmatch m;
782         const wchar_t s[] = L"ababc";
783         assert(std::regex_match(s, m, std::wregex(L"(ab)*c", std::regex_constants::awk)));
784         assert(m.size() == 2);
785         assert(!m.prefix().matched);
786         assert(m.prefix().first == s);
787         assert(m.prefix().second == m[0].first);
788         assert(!m.suffix().matched);
789         assert(m.suffix().first == m[0].second);
790         assert(m.suffix().second == s+5);
791         assert(m.length(0) == 5);
792         assert(m.position(0) == 0);
793         assert(m.str(0) == s);
794         assert(m.length(1) == 2);
795         assert(m.position(1) == 2);
796         assert(m.str(1) == L"ab");
797     }
798     {
799         std::wcmatch m;
800         const wchar_t s[] = L"abcdefghijk";
801         assert(!std::regex_match(s, m, std::wregex(L"cd((e)fg)hi",
802                                  std::regex_constants::awk)));
803         assert(m.size() == 0);
804     }
805     {
806         std::wcmatch m;
807         const wchar_t s[] = L"abc";
808         assert(std::regex_match(s, m, std::wregex(L"^abc", std::regex_constants::awk)));
809         assert(m.size() == 1);
810         assert(!m.prefix().matched);
811         assert(m.prefix().first == s);
812         assert(m.prefix().second == m[0].first);
813         assert(!m.suffix().matched);
814         assert(m.suffix().first == m[0].second);
815         assert(m.suffix().second == s+3);
816         assert(m.length(0) == 3);
817         assert(m.position(0) == 0);
818         assert(m.str(0) == s);
819     }
820     {
821         std::wcmatch m;
822         const wchar_t s[] = L"abcd";
823         assert(!std::regex_match(s, m, std::wregex(L"^abc", std::regex_constants::awk)));
824         assert(m.size() == 0);
825     }
826     {
827         std::wcmatch m;
828         const wchar_t s[] = L"aabc";
829         assert(!std::regex_match(s, m, std::wregex(L"^abc", std::regex_constants::awk)));
830         assert(m.size() == 0);
831     }
832     {
833         std::wcmatch m;
834         const wchar_t s[] = L"abc";
835         assert(std::regex_match(s, m, std::wregex(L"abc$", std::regex_constants::awk)));
836         assert(m.size() == 1);
837         assert(!m.prefix().matched);
838         assert(m.prefix().first == s);
839         assert(m.prefix().second == m[0].first);
840         assert(!m.suffix().matched);
841         assert(m.suffix().first == m[0].second);
842         assert(m.suffix().second == s+3);
843         assert(m.length(0) == 3);
844         assert(m.position(0) == 0);
845         assert(m.str(0) == s);
846     }
847     {
848         std::wcmatch m;
849         const wchar_t s[] = L"efabc";
850         assert(!std::regex_match(s, m, std::wregex(L"abc$", std::regex_constants::awk)));
851         assert(m.size() == 0);
852     }
853     {
854         std::wcmatch m;
855         const wchar_t s[] = L"efabcg";
856         assert(!std::regex_match(s, m, std::wregex(L"abc$", std::regex_constants::awk)));
857         assert(m.size() == 0);
858     }
859     {
860         std::wcmatch m;
861         const wchar_t s[] = L"abc";
862         assert(std::regex_match(s, m, std::wregex(L"a.c", std::regex_constants::awk)));
863         assert(m.size() == 1);
864         assert(!m.prefix().matched);
865         assert(m.prefix().first == s);
866         assert(m.prefix().second == m[0].first);
867         assert(!m.suffix().matched);
868         assert(m.suffix().first == m[0].second);
869         assert(m.suffix().second == s+3);
870         assert(m.length(0) == 3);
871         assert(m.position(0) == 0);
872         assert(m.str(0) == s);
873     }
874     {
875         std::wcmatch m;
876         const wchar_t s[] = L"acc";
877         assert(std::regex_match(s, m, std::wregex(L"a.c", std::regex_constants::awk)));
878         assert(m.size() == 1);
879         assert(!m.prefix().matched);
880         assert(m.prefix().first == s);
881         assert(m.prefix().second == m[0].first);
882         assert(!m.suffix().matched);
883         assert(m.suffix().first == m[0].second);
884         assert(m.suffix().second == s+3);
885         assert(m.length(0) == 3);
886         assert(m.position(0) == 0);
887         assert(m.str(0) == s);
888     }
889     {
890         std::wcmatch m;
891         const wchar_t s[] = L"acc";
892         assert(std::regex_match(s, m, std::wregex(L"a.c", std::regex_constants::awk)));
893         assert(m.size() == 1);
894         assert(!m.prefix().matched);
895         assert(m.prefix().first == s);
896         assert(m.prefix().second == m[0].first);
897         assert(!m.suffix().matched);
898         assert(m.suffix().first == m[0].second);
899         assert(m.suffix().second == s+3);
900         assert(m.length(0) == 3);
901         assert(m.position(0) == 0);
902         assert(m.str(0) == s);
903     }
904     {
905         std::wcmatch m;
906         const wchar_t s[] = L"abcdef";
907         assert(std::regex_match(s, m, std::wregex(L"(.*).*", std::regex_constants::awk)));
908         assert(m.size() == 2);
909         assert(!m.prefix().matched);
910         assert(m.prefix().first == s);
911         assert(m.prefix().second == m[0].first);
912         assert(!m.suffix().matched);
913         assert(m.suffix().first == m[0].second);
914         assert(m.suffix().second == s+6);
915         assert(m.length(0) == 6);
916         assert(m.position(0) == 0);
917         assert(m.str(0) == s);
918         assert(m.length(1) == 6);
919         assert(m.position(1) == 0);
920         assert(m.str(1) == s);
921     }
922     {
923         std::wcmatch m;
924         const wchar_t s[] = L"bc";
925         assert(!std::regex_match(s, m, std::wregex(L"(a*)*", std::regex_constants::awk)));
926         assert(m.size() == 0);
927     }
928     {
929         std::wcmatch m;
930         const wchar_t s[] = L"abbc";
931         assert(!std::regex_match(s, m, std::wregex(L"ab{3,5}c", std::regex_constants::awk)));
932         assert(m.size() == 0);
933     }
934     {
935         std::wcmatch m;
936         const wchar_t s[] = L"abbbc";
937         assert(std::regex_match(s, m, std::wregex(L"ab{3,5}c", std::regex_constants::awk)));
938         assert(m.size() == 1);
939         assert(!m.prefix().matched);
940         assert(m.prefix().first == s);
941         assert(m.prefix().second == m[0].first);
942         assert(!m.suffix().matched);
943         assert(m.suffix().first == m[0].second);
944         assert(m.suffix().second == m[0].second);
945         assert(m.length(0) == std::char_traits<wchar_t>::length(s));
946         assert(m.position(0) == 0);
947         assert(m.str(0) == s);
948     }
949     {
950         std::wcmatch m;
951         const wchar_t s[] = L"abbbbc";
952         assert(std::regex_match(s, m, std::wregex(L"ab{3,5}c", std::regex_constants::awk)));
953         assert(m.size() == 1);
954         assert(!m.prefix().matched);
955         assert(m.prefix().first == s);
956         assert(m.prefix().second == m[0].first);
957         assert(!m.suffix().matched);
958         assert(m.suffix().first == m[0].second);
959         assert(m.suffix().second == m[0].second);
960         assert(m.length(0) == std::char_traits<wchar_t>::length(s));
961         assert(m.position(0) == 0);
962         assert(m.str(0) == s);
963     }
964     {
965         std::wcmatch m;
966         const wchar_t s[] = L"abbbbbc";
967         assert(std::regex_match(s, m, std::wregex(L"ab{3,5}c", std::regex_constants::awk)));
968         assert(m.size() == 1);
969         assert(!m.prefix().matched);
970         assert(m.prefix().first == s);
971         assert(m.prefix().second == m[0].first);
972         assert(!m.suffix().matched);
973         assert(m.suffix().first == m[0].second);
974         assert(m.suffix().second == m[0].second);
975         assert(m.length(0) == std::char_traits<wchar_t>::length(s));
976         assert(m.position(0) == 0);
977         assert(m.str(0) == s);
978     }
979     {
980         std::wcmatch m;
981         const wchar_t s[] = L"adefc";
982         assert(!std::regex_match(s, m, std::wregex(L"ab{3,5}c", std::regex_constants::awk)));
983         assert(m.size() == 0);
984     }
985     {
986         std::wcmatch m;
987         const wchar_t s[] = L"abbbbbbc";
988         assert(!std::regex_match(s, m, std::wregex(L"ab{3,5}c", std::regex_constants::awk)));
989         assert(m.size() == 0);
990     }
991     {
992         std::wcmatch m;
993         const wchar_t s[] = L"adec";
994         assert(!std::regex_match(s, m, std::wregex(L"a.{3,5}c", std::regex_constants::awk)));
995         assert(m.size() == 0);
996     }
997     {
998         std::wcmatch m;
999         const wchar_t s[] = L"adefc";
1000         assert(std::regex_match(s, m, std::wregex(L"a.{3,5}c", std::regex_constants::awk)));
1001         assert(m.size() == 1);
1002         assert(!m.prefix().matched);
1003         assert(m.prefix().first == s);
1004         assert(m.prefix().second == m[0].first);
1005         assert(!m.suffix().matched);
1006         assert(m.suffix().first == m[0].second);
1007         assert(m.suffix().second == m[0].second);
1008         assert(m.length(0) == std::char_traits<wchar_t>::length(s));
1009         assert(m.position(0) == 0);
1010         assert(m.str(0) == s);
1011     }
1012     {
1013         std::wcmatch m;
1014         const wchar_t s[] = L"adefgc";
1015         assert(std::regex_match(s, m, std::wregex(L"a.{3,5}c", std::regex_constants::awk)));
1016         assert(m.size() == 1);
1017         assert(!m.prefix().matched);
1018         assert(m.prefix().first == s);
1019         assert(m.prefix().second == m[0].first);
1020         assert(!m.suffix().matched);
1021         assert(m.suffix().first == m[0].second);
1022         assert(m.suffix().second == m[0].second);
1023         assert(m.length(0) == std::char_traits<wchar_t>::length(s));
1024         assert(m.position(0) == 0);
1025         assert(m.str(0) == s);
1026     }
1027     {
1028         std::wcmatch m;
1029         const wchar_t s[] = L"adefghc";
1030         assert(std::regex_match(s, m, std::wregex(L"a.{3,5}c", std::regex_constants::awk)));
1031         assert(m.size() == 1);
1032         assert(!m.prefix().matched);
1033         assert(m.prefix().first == s);
1034         assert(m.prefix().second == m[0].first);
1035         assert(!m.suffix().matched);
1036         assert(m.suffix().first == m[0].second);
1037         assert(m.suffix().second == m[0].second);
1038         assert(m.length(0) == std::char_traits<wchar_t>::length(s));
1039         assert(m.position(0) == 0);
1040         assert(m.str(0) == s);
1041     }
1042     {
1043         std::wcmatch m;
1044         const wchar_t s[] = L"adefghic";
1045         assert(!std::regex_match(s, m, std::wregex(L"a.{3,5}c", std::regex_constants::awk)));
1046         assert(m.size() == 0);
1047     }
1048     {
1049         std::wcmatch m;
1050         const wchar_t s[] = L"tournament";
1051         assert(std::regex_match(s, m, std::wregex(L"tour|to|tournament",
1052                                               std::regex_constants::awk)));
1053         assert(m.size() == 1);
1054         assert(!m.prefix().matched);
1055         assert(m.prefix().first == s);
1056         assert(m.prefix().second == m[0].first);
1057         assert(!m.suffix().matched);
1058         assert(m.suffix().first == m[0].second);
1059         assert(m.suffix().second == m[0].second);
1060         assert(m.length(0) == std::char_traits<wchar_t>::length(s));
1061         assert(m.position(0) == 0);
1062         assert(m.str(0) == s);
1063     }
1064     {
1065         std::wcmatch m;
1066         const wchar_t s[] = L"tournamenttotour";
1067         assert(std::regex_match(s, m, std::wregex(L"(tour|to|tournament)+",
1068                std::regex_constants::awk | std::regex_constants::nosubs)));
1069         assert(m.size() == 1);
1070         assert(!m.prefix().matched);
1071         assert(m.prefix().first == s);
1072         assert(m.prefix().second == m[0].first);
1073         assert(!m.suffix().matched);
1074         assert(m.suffix().first == m[0].second);
1075         assert(m.suffix().second == m[0].second);
1076         assert(m.length(0) == std::char_traits<wchar_t>::length(s));
1077         assert(m.position(0) == 0);
1078         assert(m.str(0) == s);
1079     }
1080     {
1081         std::wcmatch m;
1082         const wchar_t s[] = L"ttotour";
1083         assert(std::regex_match(s, m, std::wregex(L"(tour|to|t)+",
1084                                               std::regex_constants::awk)));
1085         assert(m.size() == 2);
1086         assert(!m.prefix().matched);
1087         assert(m.prefix().first == s);
1088         assert(m.prefix().second == m[0].first);
1089         assert(!m.suffix().matched);
1090         assert(m.suffix().first == m[0].second);
1091         assert(m.suffix().second == m[0].second);
1092         assert(m.length(0) == std::char_traits<wchar_t>::length(s));
1093         assert(m.position(0) == 0);
1094         assert(m.str(0) == s);
1095         assert(m.length(1) == 4);
1096         assert(m.position(1) == 3);
1097         assert(m.str(1) == L"tour");
1098     }
1099     {
1100         std::wcmatch m;
1101         const wchar_t s[] = L"-ab,ab-";
1102         assert(!std::regex_match(s, m, std::wregex(L"-(.*),\1-", std::regex_constants::awk)));
1103         assert(m.size() == 0);
1104     }
1105     {
1106         std::wcmatch m;
1107         const wchar_t s[] = L"-ab,ab-";
1108         assert(std::regex_match(s, m, std::wregex(L"-.*,.*-", std::regex_constants::awk)));
1109         assert(m.size() == 1);
1110         assert(!m.prefix().matched);
1111         assert(m.prefix().first == s);
1112         assert(m.prefix().second == m[0].first);
1113         assert(!m.suffix().matched);
1114         assert(m.suffix().first == m[0].second);
1115         assert(m.suffix().second == m[0].second);
1116         assert(m.length(0) == std::char_traits<wchar_t>::length(s));
1117         assert(m.position(0) == 0);
1118         assert(m.str(0) == s);
1119     }
1120     {
1121         std::wcmatch m;
1122         const wchar_t s[] = L"a";
1123         assert(std::regex_match(s, m, std::wregex(L"^[a]$",
1124                                                  std::regex_constants::awk)));
1125         assert(m.size() == 1);
1126         assert(!m.prefix().matched);
1127         assert(m.prefix().first == s);
1128         assert(m.prefix().second == m[0].first);
1129         assert(!m.suffix().matched);
1130         assert(m.suffix().first == m[0].second);
1131         assert(m.suffix().second == m[0].second);
1132         assert(m.length(0) == 1);
1133         assert(m.position(0) == 0);
1134         assert(m.str(0) == L"a");
1135     }
1136     {
1137         std::wcmatch m;
1138         const wchar_t s[] = L"a";
1139         assert(std::regex_match(s, m, std::wregex(L"^[ab]$",
1140                                                  std::regex_constants::awk)));
1141         assert(m.size() == 1);
1142         assert(!m.prefix().matched);
1143         assert(m.prefix().first == s);
1144         assert(m.prefix().second == m[0].first);
1145         assert(!m.suffix().matched);
1146         assert(m.suffix().first == m[0].second);
1147         assert(m.suffix().second == m[0].second);
1148         assert(m.length(0) == 1);
1149         assert(m.position(0) == 0);
1150         assert(m.str(0) == L"a");
1151     }
1152     {
1153         std::wcmatch m;
1154         const wchar_t s[] = L"c";
1155         assert(std::regex_match(s, m, std::wregex(L"^[a-f]$",
1156                                                  std::regex_constants::awk)));
1157         assert(m.size() == 1);
1158         assert(!m.prefix().matched);
1159         assert(m.prefix().first == s);
1160         assert(m.prefix().second == m[0].first);
1161         assert(!m.suffix().matched);
1162         assert(m.suffix().first == m[0].second);
1163         assert(m.suffix().second == m[0].second);
1164         assert(m.length(0) == 1);
1165         assert(m.position(0) == 0);
1166         assert(m.str(0) == s);
1167     }
1168     {
1169         std::wcmatch m;
1170         const wchar_t s[] = L"g";
1171         assert(!std::regex_match(s, m, std::wregex(L"^[a-f]$",
1172                                                  std::regex_constants::awk)));
1173         assert(m.size() == 0);
1174     }
1175     {
1176         std::wcmatch m;
1177         const wchar_t s[] = L"Iraqi";
1178         assert(!std::regex_match(s, m, std::wregex(L"q[^u]",
1179                                                  std::regex_constants::awk)));
1180         assert(m.size() == 0);
1181     }
1182     {
1183         std::wcmatch m;
1184         const wchar_t s[] = L"Iraq";
1185         assert(!std::regex_match(s, m, std::wregex(L"q[^u]",
1186                                                  std::regex_constants::awk)));
1187         assert(m.size() == 0);
1188     }
1189     {
1190         std::wcmatch m;
1191         const wchar_t s[] = L"AmB";
1192         assert(std::regex_match(s, m, std::wregex(L"A[[:lower:]]B",
1193                                                  std::regex_constants::awk)));
1194         assert(m.size() == 1);
1195         assert(!m.prefix().matched);
1196         assert(m.prefix().first == s);
1197         assert(m.prefix().second == m[0].first);
1198         assert(!m.suffix().matched);
1199         assert(m.suffix().first == m[0].second);
1200         assert(m.suffix().second == m[0].second);
1201         assert(m.length(0) == std::char_traits<wchar_t>::length(s));
1202         assert(m.position(0) == 0);
1203         assert(m.str(0) == s);
1204     }
1205     {
1206         std::wcmatch m;
1207         const wchar_t s[] = L"AMB";
1208         assert(!std::regex_match(s, m, std::wregex(L"A[[:lower:]]B",
1209                                                  std::regex_constants::awk)));
1210         assert(m.size() == 0);
1211     }
1212     {
1213         std::wcmatch m;
1214         const wchar_t s[] = L"AMB";
1215         assert(std::regex_match(s, m, std::wregex(L"A[^[:lower:]]B",
1216                                                  std::regex_constants::awk)));
1217         assert(m.size() == 1);
1218         assert(!m.prefix().matched);
1219         assert(m.prefix().first == s);
1220         assert(m.prefix().second == m[0].first);
1221         assert(!m.suffix().matched);
1222         assert(m.suffix().first == m[0].second);
1223         assert(m.suffix().second == m[0].second);
1224         assert(m.length(0) == std::char_traits<wchar_t>::length(s));
1225         assert(m.position(0) == 0);
1226         assert(m.str(0) == s);
1227     }
1228     {
1229         std::wcmatch m;
1230         const wchar_t s[] = L"AmB";
1231         assert(!std::regex_match(s, m, std::wregex(L"A[^[:lower:]]B",
1232                                                  std::regex_constants::awk)));
1233         assert(m.size() == 0);
1234     }
1235     {
1236         std::wcmatch m;
1237         const wchar_t s[] = L"A5B";
1238         assert(!std::regex_match(s, m, std::wregex(L"A[^[:lower:]0-9]B",
1239                                                  std::regex_constants::awk)));
1240         assert(m.size() == 0);
1241     }
1242     {
1243         std::wcmatch m;
1244         const wchar_t s[] = L"A?B";
1245         assert(std::regex_match(s, m, std::wregex(L"A[^[:lower:]0-9]B",
1246                                                  std::regex_constants::awk)));
1247         assert(m.size() == 1);
1248         assert(!m.prefix().matched);
1249         assert(m.prefix().first == s);
1250         assert(m.prefix().second == m[0].first);
1251         assert(!m.suffix().matched);
1252         assert(m.suffix().first == m[0].second);
1253         assert(m.suffix().second == m[0].second);
1254         assert(m.length(0) == std::char_traits<wchar_t>::length(s));
1255         assert(m.position(0) == 0);
1256         assert(m.str(0) == s);
1257     }
1258     {
1259         std::wcmatch m;
1260         const wchar_t s[] = L"-";
1261         assert(std::regex_match(s, m, std::wregex(L"[a[.hyphen.]z]",
1262                                                  std::regex_constants::awk)));
1263         assert(m.size() == 1);
1264         assert(!m.prefix().matched);
1265         assert(m.prefix().first == s);
1266         assert(m.prefix().second == m[0].first);
1267         assert(!m.suffix().matched);
1268         assert(m.suffix().first == m[0].second);
1269         assert(m.suffix().second == m[0].second);
1270         assert(m.length(0) == std::char_traits<wchar_t>::length(s));
1271         assert(m.position(0) == 0);
1272         assert(m.str(0) == s);
1273     }
1274     {
1275         std::wcmatch m;
1276         const wchar_t s[] = L"z";
1277         assert(std::regex_match(s, m, std::wregex(L"[a[.hyphen.]z]",
1278                                                  std::regex_constants::awk)));
1279         assert(m.size() == 1);
1280         assert(!m.prefix().matched);
1281         assert(m.prefix().first == s);
1282         assert(m.prefix().second == m[0].first);
1283         assert(!m.suffix().matched);
1284         assert(m.suffix().first == m[0].second);
1285         assert(m.suffix().second == m[0].second);
1286         assert(m.length(0) == std::char_traits<wchar_t>::length(s));
1287         assert(m.position(0) == 0);
1288         assert(m.str(0) == s);
1289     }
1290     {
1291         std::wcmatch m;
1292         const wchar_t s[] = L"m";
1293         assert(!std::regex_match(s, m, std::wregex(L"[a[.hyphen.]z]",
1294                                                  std::regex_constants::awk)));
1295         assert(m.size() == 0);
1296     }
1297     std::locale::global(std::locale("cs_CZ.ISO8859-2"));
1298     {
1299         std::wcmatch m;
1300         const wchar_t s[] = L"m";
1301         assert(std::regex_match(s, m, std::wregex(L"[a[=M=]z]",
1302                                                  std::regex_constants::awk)));
1303         assert(m.size() == 1);
1304         assert(!m.prefix().matched);
1305         assert(m.prefix().first == s);
1306         assert(m.prefix().second == m[0].first);
1307         assert(!m.suffix().matched);
1308         assert(m.suffix().first == m[0].second);
1309         assert(m.suffix().second == m[0].second);
1310         assert(m.length(0) == std::char_traits<wchar_t>::length(s));
1311         assert(m.position(0) == 0);
1312         assert(m.str(0) == s);
1313     }
1314     {
1315         std::wcmatch m;
1316         const wchar_t s[] = L"Ch";
1317         assert(std::regex_match(s, m, std::wregex(L"[a[.ch.]z]",
1318                    std::regex_constants::awk | std::regex_constants::icase)));
1319         assert(m.size() == 1);
1320         assert(!m.prefix().matched);
1321         assert(m.prefix().first == s);
1322         assert(m.prefix().second == m[0].first);
1323         assert(!m.suffix().matched);
1324         assert(m.suffix().first == m[0].second);
1325         assert(m.suffix().second == m[0].second);
1326         assert(m.length(0) == std::char_traits<wchar_t>::length(s));
1327         assert(m.position(0) == 0);
1328         assert(m.str(0) == s);
1329     }
1330     std::locale::global(std::locale("C"));
1331     {
1332         std::wcmatch m;
1333         const wchar_t s[] = L"m";
1334         assert(!std::regex_match(s, m, std::wregex(L"[a[=M=]z]",
1335                                                  std::regex_constants::awk)));
1336         assert(m.size() == 0);
1337     }
1338     {
1339         std::wcmatch m;
1340         const wchar_t s[] = L"01a45cef9";
1341         assert(!std::regex_match(s, m, std::wregex(L"[ace1-9]*",
1342                                                  std::regex_constants::awk)));
1343         assert(m.size() == 0);
1344     }
1345     {
1346         std::wcmatch m;
1347         const wchar_t s[] = L"01a45cef9";
1348         assert(!std::regex_match(s, m, std::wregex(L"[ace1-9]+",
1349                                                  std::regex_constants::awk)));
1350         assert(m.size() == 0);
1351     }
1352     {
1353         const wchar_t r[] = L"^[-+]?[0-9]+[CF]$";
1354         std::ptrdiff_t sr = std::char_traits<wchar_t>::length(r);
1355         typedef forward_iterator<const wchar_t*> FI;
1356         typedef bidirectional_iterator<const wchar_t*> BI;
1357         std::wregex regex(FI(r), FI(r+sr), std::regex_constants::awk);
1358         std::match_results<BI> m;
1359         const wchar_t s[] = L"-40C";
1360         std::ptrdiff_t ss = std::char_traits<wchar_t>::length(s);
1361         assert(std::regex_match(BI(s), BI(s+ss), m, regex));
1362         assert(m.size() == 1);
1363         assert(!m.prefix().matched);
1364         assert(m.prefix().first == BI(s));
1365         assert(m.prefix().second == m[0].first);
1366         assert(!m.suffix().matched);
1367         assert(m.suffix().first == m[0].second);
1368         assert(m.suffix().second == m[0].second);
1369         assert(m.length(0) == 4);
1370         assert(m.position(0) == 0);
1371         assert(m.str(0) == s);
1372     }
1373     {
1374         std::wcmatch m;
1375         const wchar_t s[] = L"\n\n\n";
1376         assert(std::regex_match(s, m, std::wregex(L"[\\n]+",
1377                                                  std::regex_constants::awk)));
1378         assert(m.size() == 1);
1379         assert(!m.prefix().matched);
1380         assert(m.prefix().first == s);
1381         assert(m.prefix().second == m[0].first);
1382         assert(!m.suffix().matched);
1383         assert(m.suffix().first == m[0].second);
1384         assert(m.suffix().second == s + std::char_traits<wchar_t>::length(s));
1385         assert(m.length(0) == std::char_traits<wchar_t>::length(s));
1386         assert(m.position(0) == 0);
1387         assert(m.str(0) == s);
1388     }
1389 */}
1390