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