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