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