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 
     23 #include "test_iterators.h"
     24 
     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