brintos

brintos / llvm-project-archived public Read only

0
0
Text · 58.0 KiB · 904ba06 Raw
1538 lines · cpp
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9 10// <regex>11 12// template <class BidirectionalIterator, class Allocator, class charT, class traits>13//     bool14//     regex_search(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#include "test_macros.h"22#include "test_iterators.h"23 24int main(int, char**)25{26    {27        std::cmatch m;28        const char s[] = "a";29        assert(std::regex_search(s, m, std::regex("a", std::regex_constants::awk)));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_search(s, m, std::regex("ab", std::regex_constants::awk)));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_search(s, m, std::regex("ba", std::regex_constants::awk)));61        assert(m.size() == 0);62        assert(m.empty());63    }64    {65        std::cmatch m;66        const char s[] = "aab";67        assert(std::regex_search(s, m, std::regex("ab", std::regex_constants::awk)));68        assert(m.size() == 1);69        assert(m.prefix().matched);70        assert(m.prefix().first == s);71        assert(m.prefix().second == m[0].first);72        assert(!m.suffix().matched);73        assert(m.suffix().first == m[0].second);74        assert(m.suffix().second == s+3);75        assert(m.length(0) == 2);76        assert(m.position(0) == 1);77        assert(m.str(0) == "ab");78    }79    {80        std::cmatch m;81        const char s[] = "aab";82        assert(!std::regex_search(s, m, std::regex("ab", std::regex_constants::awk),83                                            std::regex_constants::match_continuous));84        assert(m.size() == 0);85    }86    {87        std::cmatch m;88        const char s[] = "abcd";89        assert(std::regex_search(s, m, std::regex("bc", std::regex_constants::awk)));90        assert(m.size() == 1);91        assert(m.prefix().matched);92        assert(m.prefix().first == s);93        assert(m.prefix().second == m[0].first);94        assert(m.suffix().matched);95        assert(m.suffix().first == m[0].second);96        assert(m.suffix().second == s+4);97        assert(m.length(0) == 2);98        assert(m.position(0) == 1);99        assert(m.str(0) == "bc");100    }101    {102        std::cmatch m;103        const char s[] = "abbc";104        assert(std::regex_search(s, m, std::regex("ab*c", std::regex_constants::awk)));105        assert(m.size() == 1);106        assert(!m.prefix().matched);107        assert(m.prefix().first == s);108        assert(m.prefix().second == m[0].first);109        assert(!m.suffix().matched);110        assert(m.suffix().first == m[0].second);111        assert(m.suffix().second == s+4);112        assert(m.length(0) == 4);113        assert(m.position(0) == 0);114        assert(m.str(0) == s);115    }116    {117        std::cmatch m;118        const char s[] = "ababc";119        assert(std::regex_search(s, m, std::regex("(ab)*c", std::regex_constants::awk)));120        assert(m.size() == 2);121        assert(!m.prefix().matched);122        assert(m.prefix().first == s);123        assert(m.prefix().second == m[0].first);124        assert(!m.suffix().matched);125        assert(m.suffix().first == m[0].second);126        assert(m.suffix().second == s+5);127        assert(m.length(0) == 5);128        assert(m.position(0) == 0);129        assert(m.str(0) == s);130        assert(m.length(1) == 2);131        assert(m.position(1) == 2);132        assert(m.str(1) == "ab");133    }134    {135        std::cmatch m;136        const char s[] = "abcdefghijk";137        assert(std::regex_search(s, m, std::regex("cd((e)fg)hi",138                                 std::regex_constants::awk)));139        assert(m.size() == 3);140        assert(m.prefix().matched);141        assert(m.prefix().first == s);142        assert(m.prefix().second == m[0].first);143        assert(m.suffix().matched);144        assert(m.suffix().first == m[0].second);145        assert(m.suffix().second == s+std::regex_traits<char>::length(s));146        assert(m.length(0) == 7);147        assert(m.position(0) == 2);148        assert(m.str(0) == "cdefghi");149        assert(m.length(1) == 3);150        assert(m.position(1) == 4);151        assert(m.str(1) == "efg");152        assert(m.length(2) == 1);153        assert(m.position(2) == 4);154        assert(m.str(2) == "e");155    }156    {157        std::cmatch m;158        const char s[] = "abc";159        assert(std::regex_search(s, m, std::regex("^abc", std::regex_constants::awk)));160        assert(m.size() == 1);161        assert(!m.prefix().matched);162        assert(m.prefix().first == s);163        assert(m.prefix().second == m[0].first);164        assert(!m.suffix().matched);165        assert(m.suffix().first == m[0].second);166        assert(m.suffix().second == s+3);167        assert(m.length(0) == 3);168        assert(m.position(0) == 0);169        assert(m.str(0) == s);170    }171    {172        std::cmatch m;173        const char s[] = "abcd";174        assert(std::regex_search(s, m, std::regex("^abc", std::regex_constants::awk)));175        assert(m.size() == 1);176        assert(!m.prefix().matched);177        assert(m.prefix().first == s);178        assert(m.prefix().second == m[0].first);179        assert(m.suffix().matched);180        assert(m.suffix().first == m[0].second);181        assert(m.suffix().second == s+4);182        assert(m.length(0) == 3);183        assert(m.position(0) == 0);184        assert(m.str(0) == "abc");185    }186    {187        std::cmatch m;188        const char s[] = "aabc";189        assert(!std::regex_search(s, m, std::regex("^abc", std::regex_constants::awk)));190        assert(m.size() == 0);191    }192    {193        std::cmatch m;194        const char s[] = "abc";195        assert(std::regex_search(s, m, std::regex("abc$", std::regex_constants::awk)));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[] = "efabc";210        assert(std::regex_search(s, m, std::regex("abc$", std::regex_constants::awk)));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+5);218        assert(m.length(0) == 3);219        assert(m.position(0) == 2);220        assert(m.str(0) == s+2);221    }222    {223        std::cmatch m;224        const char s[] = "efabcg";225        assert(!std::regex_search(s, m, std::regex("abc$", std::regex_constants::awk)));226        assert(m.size() == 0);227    }228    {229        std::cmatch m;230        const char s[] = "abc";231        assert(std::regex_search(s, m, std::regex("a.c", std::regex_constants::awk)));232        assert(m.size() == 1);233        assert(!m.prefix().matched);234        assert(m.prefix().first == s);235        assert(m.prefix().second == m[0].first);236        assert(!m.suffix().matched);237        assert(m.suffix().first == m[0].second);238        assert(m.suffix().second == s+3);239        assert(m.length(0) == 3);240        assert(m.position(0) == 0);241        assert(m.str(0) == s);242    }243    {244        std::cmatch m;245        const char s[] = "acc";246        assert(std::regex_search(s, m, std::regex("a.c", std::regex_constants::awk)));247        assert(m.size() == 1);248        assert(!m.prefix().matched);249        assert(m.prefix().first == s);250        assert(m.prefix().second == m[0].first);251        assert(!m.suffix().matched);252        assert(m.suffix().first == m[0].second);253        assert(m.suffix().second == s+3);254        assert(m.length(0) == 3);255        assert(m.position(0) == 0);256        assert(m.str(0) == s);257    }258    {259        std::cmatch m;260        const char s[] = "acc";261        assert(std::regex_search(s, m, std::regex("a.c", std::regex_constants::awk)));262        assert(m.size() == 1);263        assert(!m.prefix().matched);264        assert(m.prefix().first == s);265        assert(m.prefix().second == m[0].first);266        assert(!m.suffix().matched);267        assert(m.suffix().first == m[0].second);268        assert(m.suffix().second == s+3);269        assert(m.length(0) == 3);270        assert(m.position(0) == 0);271        assert(m.str(0) == s);272    }273    {274        std::cmatch m;275        const char s[] = "abcdef";276        assert(std::regex_search(s, m, std::regex("(.*).*", std::regex_constants::awk)));277        assert(m.size() == 2);278        assert(!m.prefix().matched);279        assert(m.prefix().first == s);280        assert(m.prefix().second == m[0].first);281        assert(!m.suffix().matched);282        assert(m.suffix().first == m[0].second);283        assert(m.suffix().second == s+6);284        assert(m.length(0) == 6);285        assert(m.position(0) == 0);286        assert(m.str(0) == s);287        assert(m.length(1) == 6);288        assert(m.position(1) == 0);289        assert(m.str(1) == s);290    }291    {292        std::cmatch m;293        const char s[] = "bc";294        assert(std::regex_search(s, m, std::regex("(a*)*", std::regex_constants::awk)));295        assert(m.size() == 2);296        assert(!m.prefix().matched);297        assert(m.prefix().first == s);298        assert(m.prefix().second == m[0].first);299        assert(m.suffix().matched);300        assert(m.suffix().first == m[0].second);301        assert(m.suffix().second == s+2);302        assert(m.length(0) == 0);303        assert(m.position(0) == 0);304        assert(m.str(0) == "");305        assert(m.length(1) == 0);306        assert(m.position(1) == 0);307        assert(m.str(1) == "");308    }309    {310        std::cmatch m;311        const char s[] = "abbc";312        assert(!std::regex_search(s, m, std::regex("ab{3,5}c", std::regex_constants::awk)));313        assert(m.size() == 0);314    }315    {316        std::cmatch m;317        const char s[] = "abbbc";318        assert(std::regex_search(s, m, std::regex("ab{3,5}c", std::regex_constants::awk)));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) >= 0 && static_cast<std::size_t>(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[] = "abbbbc";333        assert(std::regex_search(s, m, std::regex("ab{3,5}c", std::regex_constants::awk)));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) >= 0 && static_cast<std::size_t>(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[] = "abbbbbc";348        assert(std::regex_search(s, m, std::regex("ab{3,5}c", std::regex_constants::awk)));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) >= 0 && static_cast<std::size_t>(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[] = "adefc";363        assert(!std::regex_search(s, m, std::regex("ab{3,5}c", std::regex_constants::awk)));364        assert(m.size() == 0);365    }366    {367        std::cmatch m;368        const char s[] = "abbbbbbc";369        assert(!std::regex_search(s, m, std::regex("ab{3,5}c", std::regex_constants::awk)));370        assert(m.size() == 0);371    }372    {373        std::cmatch m;374        const char s[] = "adec";375        assert(!std::regex_search(s, m, std::regex("a.{3,5}c", std::regex_constants::awk)));376        assert(m.size() == 0);377    }378    {379        std::cmatch m;380        const char s[] = "adefc";381        assert(std::regex_search(s, m, std::regex("a.{3,5}c", std::regex_constants::awk)));382        assert(m.size() == 1);383        assert(!m.prefix().matched);384        assert(m.prefix().first == s);385        assert(m.prefix().second == m[0].first);386        assert(!m.suffix().matched);387        assert(m.suffix().first == m[0].second);388        assert(m.suffix().second == m[0].second);389        assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<char>::length(s));390        assert(m.position(0) == 0);391        assert(m.str(0) == s);392    }393    {394        std::cmatch m;395        const char s[] = "adefgc";396        assert(std::regex_search(s, m, std::regex("a.{3,5}c", std::regex_constants::awk)));397        assert(m.size() == 1);398        assert(!m.prefix().matched);399        assert(m.prefix().first == s);400        assert(m.prefix().second == m[0].first);401        assert(!m.suffix().matched);402        assert(m.suffix().first == m[0].second);403        assert(m.suffix().second == m[0].second);404        assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<char>::length(s));405        assert(m.position(0) == 0);406        assert(m.str(0) == s);407    }408    {409        std::cmatch m;410        const char s[] = "adefghc";411        assert(std::regex_search(s, m, std::regex("a.{3,5}c", std::regex_constants::awk)));412        assert(m.size() == 1);413        assert(!m.prefix().matched);414        assert(m.prefix().first == s);415        assert(m.prefix().second == m[0].first);416        assert(!m.suffix().matched);417        assert(m.suffix().first == m[0].second);418        assert(m.suffix().second == m[0].second);419        assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<char>::length(s));420        assert(m.position(0) == 0);421        assert(m.str(0) == s);422    }423    {424        std::cmatch m;425        const char s[] = "adefghic";426        assert(!std::regex_search(s, m, std::regex("a.{3,5}c", std::regex_constants::awk)));427        assert(m.size() == 0);428    }429    {430        std::cmatch m;431        const char s[] = "tournament";432        assert(std::regex_search(s, m, std::regex("tour|to|tournament",433                                              std::regex_constants::awk)));434        assert(m.size() == 1);435        assert(!m.prefix().matched);436        assert(m.prefix().first == s);437        assert(m.prefix().second == m[0].first);438        assert(!m.suffix().matched);439        assert(m.suffix().first == m[0].second);440        assert(m.suffix().second == m[0].second);441        assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<char>::length(s));442        assert(m.position(0) == 0);443        assert(m.str(0) == s);444    }445    {446        std::cmatch m;447        const char s[] = "tournamenttotour";448        assert(std::regex_search(s, m, std::regex("(tour|to|tournament)+",449               std::regex_constants::awk | std::regex_constants::nosubs)));450        assert(m.size() == 1);451        assert(!m.prefix().matched);452        assert(m.prefix().first == s);453        assert(m.prefix().second == m[0].first);454        assert(!m.suffix().matched);455        assert(m.suffix().first == m[0].second);456        assert(m.suffix().second == m[0].second);457        assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<char>::length(s));458        assert(m.position(0) == 0);459        assert(m.str(0) == s);460    }461    {462        std::cmatch m;463        const char s[] = "ttotour";464        assert(std::regex_search(s, m, std::regex("(tour|to|t)+",465                                              std::regex_constants::awk)));466        assert(m.size() == 2);467        assert(!m.prefix().matched);468        assert(m.prefix().first == s);469        assert(m.prefix().second == m[0].first);470        assert(!m.suffix().matched);471        assert(m.suffix().first == m[0].second);472        assert(m.suffix().second == m[0].second);473        assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<char>::length(s));474        assert(m.position(0) == 0);475        assert(m.str(0) == s);476        assert(m.length(1) == 4);477        assert(m.position(1) == 3);478        assert(m.str(1) == "tour");479    }480    {481        std::cmatch m;482        const char s[] = "-ab,ab-";483        assert(!std::regex_search(s, m, std::regex("-(.*),\1-", std::regex_constants::awk)));484        assert(m.size() == 0);485    }486    {487        std::cmatch m;488        const char s[] = "-ab,ab-";489        assert(std::regex_search(s, m, std::regex("-.*,.*-", std::regex_constants::awk)));490        assert(m.size() == 1);491        assert(!m.prefix().matched);492        assert(m.prefix().first == s);493        assert(m.prefix().second == m[0].first);494        assert(!m.suffix().matched);495        assert(m.suffix().first == m[0].second);496        assert(m.suffix().second == m[0].second);497        assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<char>::length(s));498        assert(m.position(0) == 0);499        assert(m.str(0) == s);500    }501    {502        std::cmatch m;503        const char s[] = "a";504        assert(std::regex_search(s, m, std::regex("^[a]$",505                                                 std::regex_constants::awk)));506        assert(m.size() == 1);507        assert(!m.prefix().matched);508        assert(m.prefix().first == s);509        assert(m.prefix().second == m[0].first);510        assert(!m.suffix().matched);511        assert(m.suffix().first == m[0].second);512        assert(m.suffix().second == m[0].second);513        assert(m.length(0) == 1);514        assert(m.position(0) == 0);515        assert(m.str(0) == "a");516    }517    {518        std::cmatch m;519        const char s[] = "a";520        assert(std::regex_search(s, m, std::regex("^[ab]$",521                                                 std::regex_constants::awk)));522        assert(m.size() == 1);523        assert(!m.prefix().matched);524        assert(m.prefix().first == s);525        assert(m.prefix().second == m[0].first);526        assert(!m.suffix().matched);527        assert(m.suffix().first == m[0].second);528        assert(m.suffix().second == m[0].second);529        assert(m.length(0) == 1);530        assert(m.position(0) == 0);531        assert(m.str(0) == "a");532    }533    {534        std::cmatch m;535        const char s[] = "c";536        assert(std::regex_search(s, m, std::regex("^[a-f]$",537                                                 std::regex_constants::awk)));538        assert(m.size() == 1);539        assert(!m.prefix().matched);540        assert(m.prefix().first == s);541        assert(m.prefix().second == m[0].first);542        assert(!m.suffix().matched);543        assert(m.suffix().first == m[0].second);544        assert(m.suffix().second == m[0].second);545        assert(m.length(0) == 1);546        assert(m.position(0) == 0);547        assert(m.str(0) == s);548    }549    {550        std::cmatch m;551        const char s[] = "g";552        assert(!std::regex_search(s, m, std::regex("^[a-f]$",553                                                 std::regex_constants::awk)));554        assert(m.size() == 0);555    }556    {557        std::cmatch m;558        const char s[] = "Iraqi";559        assert(std::regex_search(s, m, std::regex("q[^u]",560                                                 std::regex_constants::awk)));561        assert(m.size() == 1);562        assert(m.prefix().matched);563        assert(m.prefix().first == s);564        assert(m.prefix().second == m[0].first);565        assert(!m.suffix().matched);566        assert(m.suffix().first == m[0].second);567        assert(m.suffix().second == m[0].second);568        assert(m.length(0) == 2);569        assert(m.position(0) == 3);570        assert(m.str(0) == "qi");571    }572    {573        std::cmatch m;574        const char s[] = "Iraq";575        assert(!std::regex_search(s, m, std::regex("q[^u]",576                                                 std::regex_constants::awk)));577        assert(m.size() == 0);578    }579    {580        std::cmatch m;581        const char s[] = "AmB";582        assert(std::regex_search(s, m, std::regex("A[[:lower:]]B",583                                                 std::regex_constants::awk)));584        assert(m.size() == 1);585        assert(!m.prefix().matched);586        assert(m.prefix().first == s);587        assert(m.prefix().second == m[0].first);588        assert(!m.suffix().matched);589        assert(m.suffix().first == m[0].second);590        assert(m.suffix().second == m[0].second);591        assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<char>::length(s));592        assert(m.position(0) == 0);593        assert(m.str(0) == s);594    }595    {596        std::cmatch m;597        const char s[] = "AMB";598        assert(!std::regex_search(s, m, std::regex("A[[:lower:]]B",599                                                 std::regex_constants::awk)));600        assert(m.size() == 0);601    }602    {603        std::cmatch m;604        const char s[] = "AMB";605        assert(std::regex_search(s, m, std::regex("A[^[:lower:]]B",606                                                 std::regex_constants::awk)));607        assert(m.size() == 1);608        assert(!m.prefix().matched);609        assert(m.prefix().first == s);610        assert(m.prefix().second == m[0].first);611        assert(!m.suffix().matched);612        assert(m.suffix().first == m[0].second);613        assert(m.suffix().second == m[0].second);614        assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<char>::length(s));615        assert(m.position(0) == 0);616        assert(m.str(0) == s);617    }618    {619        std::cmatch m;620        const char s[] = "AmB";621        assert(!std::regex_search(s, m, std::regex("A[^[:lower:]]B",622                                                 std::regex_constants::awk)));623        assert(m.size() == 0);624    }625    {626        std::cmatch m;627        const char s[] = "A5B";628        assert(!std::regex_search(s, m, std::regex("A[^[:lower:]0-9]B",629                                                 std::regex_constants::awk)));630        assert(m.size() == 0);631    }632    {633        std::cmatch m;634        const char s[] = "A?B";635        assert(std::regex_search(s, m, std::regex("A[^[:lower:]0-9]B",636                                                 std::regex_constants::awk)));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) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<char>::length(s));645        assert(m.position(0) == 0);646        assert(m.str(0) == s);647    }648    {649        std::cmatch m;650        const char s[] = "m";651        assert(std::regex_search(s, m, std::regex("[a[=m=]z]",652                                                 std::regex_constants::awk)));653        assert(m.size() == 1);654        assert(!m.prefix().matched);655        assert(m.prefix().first == s);656        assert(m.prefix().second == m[0].first);657        assert(!m.suffix().matched);658        assert(m.suffix().first == m[0].second);659        assert(m.suffix().second == m[0].second);660        assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<char>::length(s));661        assert(m.position(0) == 0);662        assert(m.str(0) == s);663    }664    {665        std::cmatch m;666        const char s[] = "m";667        assert(!std::regex_search(s, m, std::regex("[a[=M=]z]",668                                                 std::regex_constants::awk)));669        assert(m.size() == 0);670    }671    {672        std::cmatch m;673        const char s[] = "-";674        assert(std::regex_search(s, m, std::regex("[a[.hyphen.]z]",675                                                 std::regex_constants::awk)));676        assert(m.size() == 1);677        assert(!m.prefix().matched);678        assert(m.prefix().first == s);679        assert(m.prefix().second == m[0].first);680        assert(!m.suffix().matched);681        assert(m.suffix().first == m[0].second);682        assert(m.suffix().second == m[0].second);683        assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<char>::length(s));684        assert(m.position(0) == 0);685        assert(m.str(0) == s);686    }687    {688        std::cmatch m;689        const char s[] = "z";690        assert(std::regex_search(s, m, std::regex("[a[.hyphen.]z]",691                                                 std::regex_constants::awk)));692        assert(m.size() == 1);693        assert(!m.prefix().matched);694        assert(m.prefix().first == 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) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<char>::length(s));700        assert(m.position(0) == 0);701        assert(m.str(0) == s);702    }703    {704        std::cmatch m;705        const char s[] = "m";706        assert(!std::regex_search(s, m, std::regex("[a[.hyphen.]z]",707                                                 std::regex_constants::awk)));708        assert(m.size() == 0);709    }710    {711        std::cmatch m;712        const char s[] = "01a45cef9";713        assert(std::regex_search(s, m, std::regex("[ace1-9]*",714                                                 std::regex_constants::awk)));715        assert(m.size() == 1);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 + std::char_traits<char>::length(s));722        assert(m.length(0) == 0);723        assert(m.position(0) == 0);724        assert(m.str(0) == "");725    }726    {727        std::cmatch m;728        const char s[] = "01a45cef9";729        assert(std::regex_search(s, m, std::regex("[ace1-9]+",730                                                 std::regex_constants::awk)));731        assert(m.size() == 1);732        assert(m.prefix().matched);733        assert(m.prefix().first == s);734        assert(m.prefix().second == m[0].first);735        assert(m.suffix().matched);736        assert(m.suffix().first == m[0].second);737        assert(m.suffix().second == s + std::char_traits<char>::length(s));738        assert(m.length(0) == 6);739        assert(m.position(0) == 1);740        assert(m.str(0) == "1a45ce");741    }742    {743        const char r[] = "^[-+]?[0-9]+[CF]$";744        std::ptrdiff_t sr = std::char_traits<char>::length(r);745        typedef forward_iterator<const char*> FI;746        typedef bidirectional_iterator<const char*> BI;747        std::regex regex(FI(r), FI(r+sr), std::regex_constants::awk);748        std::match_results<BI> m;749        const char s[] = "-40C";750        std::ptrdiff_t ss = std::char_traits<char>::length(s);751        assert(std::regex_search(BI(s), BI(s+ss), m, regex));752        assert(m.size() == 1);753        assert(!m.prefix().matched);754        assert(m.prefix().first == BI(s));755        assert(m.prefix().second == m[0].first);756        assert(!m.suffix().matched);757        assert(m.suffix().first == m[0].second);758        assert(m.suffix().second == m[0].second);759        assert(m.length(0) == 4);760        assert(m.position(0) == 0);761        assert(m.str(0) == s);762    }763    {764        std::cmatch m;765        const char s[] = "\n\n\n";766        assert(std::regex_search(s, m, std::regex("[\\n]+",767                                                 std::regex_constants::awk)));768        assert(m.size() == 1);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 + std::char_traits<char>::length(s));775        assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<char>::length(s));776        assert(m.position(0) == 0);777        assert(m.str(0) == s);778    }779 780#ifndef TEST_HAS_NO_WIDE_CHARACTERS781    {782        std::wcmatch m;783        const wchar_t s[] = L"a";784        assert(std::regex_search(s, m, std::wregex(L"a", std::regex_constants::awk)));785        assert(m.size() == 1);786        assert(!m.empty());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+1);793        assert(m.length(0) == 1);794        assert(m.position(0) == 0);795        assert(m.str(0) == L"a");796    }797    {798        std::wcmatch m;799        const wchar_t s[] = L"ab";800        assert(std::regex_search(s, m, std::wregex(L"ab", std::regex_constants::awk)));801        assert(m.size() == 1);802        assert(!m.prefix().matched);803        assert(m.prefix().first == s);804        assert(m.prefix().second == m[0].first);805        assert(!m.suffix().matched);806        assert(m.suffix().first == m[0].second);807        assert(m.suffix().second == s+2);808        assert(m.length(0) == 2);809        assert(m.position(0) == 0);810        assert(m.str(0) == L"ab");811    }812    {813        std::wcmatch m;814        const wchar_t s[] = L"ab";815        assert(!std::regex_search(s, m, std::wregex(L"ba", std::regex_constants::awk)));816        assert(m.size() == 0);817        assert(m.empty());818    }819    {820        std::wcmatch m;821        const wchar_t s[] = L"aab";822        assert(std::regex_search(s, m, std::wregex(L"ab", std::regex_constants::awk)));823        assert(m.size() == 1);824        assert(m.prefix().matched);825        assert(m.prefix().first == s);826        assert(m.prefix().second == m[0].first);827        assert(!m.suffix().matched);828        assert(m.suffix().first == m[0].second);829        assert(m.suffix().second == s+3);830        assert(m.length(0) == 2);831        assert(m.position(0) == 1);832        assert(m.str(0) == L"ab");833    }834    {835        std::wcmatch m;836        const wchar_t s[] = L"aab";837        assert(!std::regex_search(s, m, std::wregex(L"ab", std::regex_constants::awk),838                                            std::regex_constants::match_continuous));839        assert(m.size() == 0);840    }841    {842        std::wcmatch m;843        const wchar_t s[] = L"abcd";844        assert(std::regex_search(s, m, std::wregex(L"bc", std::regex_constants::awk)));845        assert(m.size() == 1);846        assert(m.prefix().matched);847        assert(m.prefix().first == s);848        assert(m.prefix().second == m[0].first);849        assert(m.suffix().matched);850        assert(m.suffix().first == m[0].second);851        assert(m.suffix().second == s+4);852        assert(m.length(0) == 2);853        assert(m.position(0) == 1);854        assert(m.str(0) == L"bc");855    }856    {857        std::wcmatch m;858        const wchar_t s[] = L"abbc";859        assert(std::regex_search(s, m, std::wregex(L"ab*c", std::regex_constants::awk)));860        assert(m.size() == 1);861        assert(!m.prefix().matched);862        assert(m.prefix().first == s);863        assert(m.prefix().second == m[0].first);864        assert(!m.suffix().matched);865        assert(m.suffix().first == m[0].second);866        assert(m.suffix().second == s+4);867        assert(m.length(0) == 4);868        assert(m.position(0) == 0);869        assert(m.str(0) == s);870    }871    {872        std::wcmatch m;873        const wchar_t s[] = L"ababc";874        assert(std::regex_search(s, m, std::wregex(L"(ab)*c", std::regex_constants::awk)));875        assert(m.size() == 2);876        assert(!m.prefix().matched);877        assert(m.prefix().first == s);878        assert(m.prefix().second == m[0].first);879        assert(!m.suffix().matched);880        assert(m.suffix().first == m[0].second);881        assert(m.suffix().second == s+5);882        assert(m.length(0) == 5);883        assert(m.position(0) == 0);884        assert(m.str(0) == s);885        assert(m.length(1) == 2);886        assert(m.position(1) == 2);887        assert(m.str(1) == L"ab");888    }889    {890        std::wcmatch m;891        const wchar_t s[] = L"abcdefghijk";892        assert(std::regex_search(s, m, std::wregex(L"cd((e)fg)hi",893                                 std::regex_constants::awk)));894        assert(m.size() == 3);895        assert(m.prefix().matched);896        assert(m.prefix().first == s);897        assert(m.prefix().second == m[0].first);898        assert(m.suffix().matched);899        assert(m.suffix().first == m[0].second);900        assert(m.suffix().second == s+std::regex_traits<wchar_t>::length(s));901        assert(m.length(0) == 7);902        assert(m.position(0) == 2);903        assert(m.str(0) == L"cdefghi");904        assert(m.length(1) == 3);905        assert(m.position(1) == 4);906        assert(m.str(1) == L"efg");907        assert(m.length(2) == 1);908        assert(m.position(2) == 4);909        assert(m.str(2) == L"e");910    }911    {912        std::wcmatch m;913        const wchar_t s[] = L"abc";914        assert(std::regex_search(s, m, std::wregex(L"^abc", std::regex_constants::awk)));915        assert(m.size() == 1);916        assert(!m.prefix().matched);917        assert(m.prefix().first == s);918        assert(m.prefix().second == m[0].first);919        assert(!m.suffix().matched);920        assert(m.suffix().first == m[0].second);921        assert(m.suffix().second == s+3);922        assert(m.length(0) == 3);923        assert(m.position(0) == 0);924        assert(m.str(0) == s);925    }926    {927        std::wcmatch m;928        const wchar_t s[] = L"abcd";929        assert(std::regex_search(s, m, std::wregex(L"^abc", std::regex_constants::awk)));930        assert(m.size() == 1);931        assert(!m.prefix().matched);932        assert(m.prefix().first == s);933        assert(m.prefix().second == m[0].first);934        assert(m.suffix().matched);935        assert(m.suffix().first == m[0].second);936        assert(m.suffix().second == s+4);937        assert(m.length(0) == 3);938        assert(m.position(0) == 0);939        assert(m.str(0) == L"abc");940    }941    {942        std::wcmatch m;943        const wchar_t s[] = L"aabc";944        assert(!std::regex_search(s, m, std::wregex(L"^abc", std::regex_constants::awk)));945        assert(m.size() == 0);946    }947    {948        std::wcmatch m;949        const wchar_t s[] = L"abc";950        assert(std::regex_search(s, m, std::wregex(L"abc$", std::regex_constants::awk)));951        assert(m.size() == 1);952        assert(!m.prefix().matched);953        assert(m.prefix().first == s);954        assert(m.prefix().second == m[0].first);955        assert(!m.suffix().matched);956        assert(m.suffix().first == m[0].second);957        assert(m.suffix().second == s+3);958        assert(m.length(0) == 3);959        assert(m.position(0) == 0);960        assert(m.str(0) == s);961    }962    {963        std::wcmatch m;964        const wchar_t s[] = L"efabc";965        assert(std::regex_search(s, m, std::wregex(L"abc$", std::regex_constants::awk)));966        assert(m.size() == 1);967        assert(m.prefix().matched);968        assert(m.prefix().first == s);969        assert(m.prefix().second == m[0].first);970        assert(!m.suffix().matched);971        assert(m.suffix().first == m[0].second);972        assert(m.suffix().second == s+5);973        assert(m.length(0) == 3);974        assert(m.position(0) == 2);975        assert(m.str(0) == s+2);976    }977    {978        std::wcmatch m;979        const wchar_t s[] = L"efabcg";980        assert(!std::regex_search(s, m, std::wregex(L"abc$", std::regex_constants::awk)));981        assert(m.size() == 0);982    }983    {984        std::wcmatch m;985        const wchar_t s[] = L"abc";986        assert(std::regex_search(s, m, std::wregex(L"a.c", std::regex_constants::awk)));987        assert(m.size() == 1);988        assert(!m.prefix().matched);989        assert(m.prefix().first == s);990        assert(m.prefix().second == m[0].first);991        assert(!m.suffix().matched);992        assert(m.suffix().first == m[0].second);993        assert(m.suffix().second == s+3);994        assert(m.length(0) == 3);995        assert(m.position(0) == 0);996        assert(m.str(0) == s);997    }998    {999        std::wcmatch m;1000        const wchar_t s[] = L"acc";1001        assert(std::regex_search(s, m, std::wregex(L"a.c", std::regex_constants::awk)));1002        assert(m.size() == 1);1003        assert(!m.prefix().matched);1004        assert(m.prefix().first == s);1005        assert(m.prefix().second == m[0].first);1006        assert(!m.suffix().matched);1007        assert(m.suffix().first == m[0].second);1008        assert(m.suffix().second == s+3);1009        assert(m.length(0) == 3);1010        assert(m.position(0) == 0);1011        assert(m.str(0) == s);1012    }1013    {1014        std::wcmatch m;1015        const wchar_t s[] = L"acc";1016        assert(std::regex_search(s, m, std::wregex(L"a.c", std::regex_constants::awk)));1017        assert(m.size() == 1);1018        assert(!m.prefix().matched);1019        assert(m.prefix().first == s);1020        assert(m.prefix().second == m[0].first);1021        assert(!m.suffix().matched);1022        assert(m.suffix().first == m[0].second);1023        assert(m.suffix().second == s+3);1024        assert(m.length(0) == 3);1025        assert(m.position(0) == 0);1026        assert(m.str(0) == s);1027    }1028    {1029        std::wcmatch m;1030        const wchar_t s[] = L"abcdef";1031        assert(std::regex_search(s, m, std::wregex(L"(.*).*", std::regex_constants::awk)));1032        assert(m.size() == 2);1033        assert(!m.prefix().matched);1034        assert(m.prefix().first == s);1035        assert(m.prefix().second == m[0].first);1036        assert(!m.suffix().matched);1037        assert(m.suffix().first == m[0].second);1038        assert(m.suffix().second == s+6);1039        assert(m.length(0) == 6);1040        assert(m.position(0) == 0);1041        assert(m.str(0) == s);1042        assert(m.length(1) == 6);1043        assert(m.position(1) == 0);1044        assert(m.str(1) == s);1045    }1046    {1047        std::wcmatch m;1048        const wchar_t s[] = L"bc";1049        assert(std::regex_search(s, m, std::wregex(L"(a*)*", std::regex_constants::awk)));1050        assert(m.size() == 2);1051        assert(!m.prefix().matched);1052        assert(m.prefix().first == s);1053        assert(m.prefix().second == m[0].first);1054        assert(m.suffix().matched);1055        assert(m.suffix().first == m[0].second);1056        assert(m.suffix().second == s+2);1057        assert(m.length(0) == 0);1058        assert(m.position(0) == 0);1059        assert(m.str(0) == L"");1060        assert(m.length(1) == 0);1061        assert(m.position(1) == 0);1062        assert(m.str(1) == L"");1063    }1064    {1065        std::wcmatch m;1066        const wchar_t s[] = L"abbc";1067        assert(!std::regex_search(s, m, std::wregex(L"ab{3,5}c", std::regex_constants::awk)));1068        assert(m.size() == 0);1069    }1070    {1071        std::wcmatch m;1072        const wchar_t s[] = L"abbbc";1073        assert(std::regex_search(s, m, std::wregex(L"ab{3,5}c", std::regex_constants::awk)));1074        assert(m.size() == 1);1075        assert(!m.prefix().matched);1076        assert(m.prefix().first == s);1077        assert(m.prefix().second == m[0].first);1078        assert(!m.suffix().matched);1079        assert(m.suffix().first == m[0].second);1080        assert(m.suffix().second == m[0].second);1081        assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));1082        assert(m.position(0) == 0);1083        assert(m.str(0) == s);1084    }1085    {1086        std::wcmatch m;1087        const wchar_t s[] = L"abbbbc";1088        assert(std::regex_search(s, m, std::wregex(L"ab{3,5}c", std::regex_constants::awk)));1089        assert(m.size() == 1);1090        assert(!m.prefix().matched);1091        assert(m.prefix().first == s);1092        assert(m.prefix().second == m[0].first);1093        assert(!m.suffix().matched);1094        assert(m.suffix().first == m[0].second);1095        assert(m.suffix().second == m[0].second);1096        assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));1097        assert(m.position(0) == 0);1098        assert(m.str(0) == s);1099    }1100    {1101        std::wcmatch m;1102        const wchar_t s[] = L"abbbbbc";1103        assert(std::regex_search(s, m, std::wregex(L"ab{3,5}c", std::regex_constants::awk)));1104        assert(m.size() == 1);1105        assert(!m.prefix().matched);1106        assert(m.prefix().first == s);1107        assert(m.prefix().second == m[0].first);1108        assert(!m.suffix().matched);1109        assert(m.suffix().first == m[0].second);1110        assert(m.suffix().second == m[0].second);1111        assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));1112        assert(m.position(0) == 0);1113        assert(m.str(0) == s);1114    }1115    {1116        std::wcmatch m;1117        const wchar_t s[] = L"adefc";1118        assert(!std::regex_search(s, m, std::wregex(L"ab{3,5}c", std::regex_constants::awk)));1119        assert(m.size() == 0);1120    }1121    {1122        std::wcmatch m;1123        const wchar_t s[] = L"abbbbbbc";1124        assert(!std::regex_search(s, m, std::wregex(L"ab{3,5}c", std::regex_constants::awk)));1125        assert(m.size() == 0);1126    }1127    {1128        std::wcmatch m;1129        const wchar_t s[] = L"adec";1130        assert(!std::regex_search(s, m, std::wregex(L"a.{3,5}c", std::regex_constants::awk)));1131        assert(m.size() == 0);1132    }1133    {1134        std::wcmatch m;1135        const wchar_t s[] = L"adefc";1136        assert(std::regex_search(s, m, std::wregex(L"a.{3,5}c", std::regex_constants::awk)));1137        assert(m.size() == 1);1138        assert(!m.prefix().matched);1139        assert(m.prefix().first == s);1140        assert(m.prefix().second == m[0].first);1141        assert(!m.suffix().matched);1142        assert(m.suffix().first == m[0].second);1143        assert(m.suffix().second == m[0].second);1144        assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));1145        assert(m.position(0) == 0);1146        assert(m.str(0) == s);1147    }1148    {1149        std::wcmatch m;1150        const wchar_t s[] = L"adefgc";1151        assert(std::regex_search(s, m, std::wregex(L"a.{3,5}c", std::regex_constants::awk)));1152        assert(m.size() == 1);1153        assert(!m.prefix().matched);1154        assert(m.prefix().first == s);1155        assert(m.prefix().second == m[0].first);1156        assert(!m.suffix().matched);1157        assert(m.suffix().first == m[0].second);1158        assert(m.suffix().second == m[0].second);1159        assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));1160        assert(m.position(0) == 0);1161        assert(m.str(0) == s);1162    }1163    {1164        std::wcmatch m;1165        const wchar_t s[] = L"adefghc";1166        assert(std::regex_search(s, m, std::wregex(L"a.{3,5}c", std::regex_constants::awk)));1167        assert(m.size() == 1);1168        assert(!m.prefix().matched);1169        assert(m.prefix().first == s);1170        assert(m.prefix().second == m[0].first);1171        assert(!m.suffix().matched);1172        assert(m.suffix().first == m[0].second);1173        assert(m.suffix().second == m[0].second);1174        assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));1175        assert(m.position(0) == 0);1176        assert(m.str(0) == s);1177    }1178    {1179        std::wcmatch m;1180        const wchar_t s[] = L"adefghic";1181        assert(!std::regex_search(s, m, std::wregex(L"a.{3,5}c", std::regex_constants::awk)));1182        assert(m.size() == 0);1183    }1184    {1185        std::wcmatch m;1186        const wchar_t s[] = L"tournament";1187        assert(std::regex_search(s, m, std::wregex(L"tour|to|tournament",1188                                              std::regex_constants::awk)));1189        assert(m.size() == 1);1190        assert(!m.prefix().matched);1191        assert(m.prefix().first == s);1192        assert(m.prefix().second == m[0].first);1193        assert(!m.suffix().matched);1194        assert(m.suffix().first == m[0].second);1195        assert(m.suffix().second == m[0].second);1196        assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));1197        assert(m.position(0) == 0);1198        assert(m.str(0) == s);1199    }1200    {1201        std::wcmatch m;1202        const wchar_t s[] = L"tournamenttotour";1203        assert(std::regex_search(s, m, std::wregex(L"(tour|to|tournament)+",1204               std::regex_constants::awk | std::regex_constants::nosubs)));1205        assert(m.size() == 1);1206        assert(!m.prefix().matched);1207        assert(m.prefix().first == s);1208        assert(m.prefix().second == m[0].first);1209        assert(!m.suffix().matched);1210        assert(m.suffix().first == m[0].second);1211        assert(m.suffix().second == m[0].second);1212        assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));1213        assert(m.position(0) == 0);1214        assert(m.str(0) == s);1215    }1216    {1217        std::wcmatch m;1218        const wchar_t s[] = L"ttotour";1219        assert(std::regex_search(s, m, std::wregex(L"(tour|to|t)+",1220                                              std::regex_constants::awk)));1221        assert(m.size() == 2);1222        assert(!m.prefix().matched);1223        assert(m.prefix().first == s);1224        assert(m.prefix().second == m[0].first);1225        assert(!m.suffix().matched);1226        assert(m.suffix().first == m[0].second);1227        assert(m.suffix().second == m[0].second);1228        assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));1229        assert(m.position(0) == 0);1230        assert(m.str(0) == s);1231        assert(m.length(1) == 4);1232        assert(m.position(1) == 3);1233        assert(m.str(1) == L"tour");1234    }1235    {1236        std::wcmatch m;1237        const wchar_t s[] = L"-ab,ab-";1238        assert(!std::regex_search(s, m, std::wregex(L"-(.*),\1-", std::regex_constants::awk)));1239        assert(m.size() == 0);1240    }1241    {1242        std::wcmatch m;1243        const wchar_t s[] = L"-ab,ab-";1244        assert(std::regex_search(s, m, std::wregex(L"-.*,.*-", std::regex_constants::awk)));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<std::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"a";1259        assert(std::regex_search(s, m, std::wregex(L"^[a]$",1260                                                 std::regex_constants::awk)));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) == 1);1269        assert(m.position(0) == 0);1270        assert(m.str(0) == L"a");1271    }1272    {1273        std::wcmatch m;1274        const wchar_t s[] = L"a";1275        assert(std::regex_search(s, m, std::wregex(L"^[ab]$",1276                                                 std::regex_constants::awk)));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) == 1);1285        assert(m.position(0) == 0);1286        assert(m.str(0) == L"a");1287    }1288    {1289        std::wcmatch m;1290        const wchar_t s[] = L"c";1291        assert(std::regex_search(s, m, std::wregex(L"^[a-f]$",1292                                                 std::regex_constants::awk)));1293        assert(m.size() == 1);1294        assert(!m.prefix().matched);1295        assert(m.prefix().first == s);1296        assert(m.prefix().second == m[0].first);1297        assert(!m.suffix().matched);1298        assert(m.suffix().first == m[0].second);1299        assert(m.suffix().second == m[0].second);1300        assert(m.length(0) == 1);1301        assert(m.position(0) == 0);1302        assert(m.str(0) == s);1303    }1304    {1305        std::wcmatch m;1306        const wchar_t s[] = L"g";1307        assert(!std::regex_search(s, m, std::wregex(L"^[a-f]$",1308                                                 std::regex_constants::awk)));1309        assert(m.size() == 0);1310    }1311    {1312        std::wcmatch m;1313        const wchar_t s[] = L"Iraqi";1314        assert(std::regex_search(s, m, std::wregex(L"q[^u]",1315                                                 std::regex_constants::awk)));1316        assert(m.size() == 1);1317        assert(m.prefix().matched);1318        assert(m.prefix().first == s);1319        assert(m.prefix().second == m[0].first);1320        assert(!m.suffix().matched);1321        assert(m.suffix().first == m[0].second);1322        assert(m.suffix().second == m[0].second);1323        assert(m.length(0) == 2);1324        assert(m.position(0) == 3);1325        assert(m.str(0) == L"qi");1326    }1327    {1328        std::wcmatch m;1329        const wchar_t s[] = L"Iraq";1330        assert(!std::regex_search(s, m, std::wregex(L"q[^u]",1331                                                 std::regex_constants::awk)));1332        assert(m.size() == 0);1333    }1334    {1335        std::wcmatch m;1336        const wchar_t s[] = L"AmB";1337        assert(std::regex_search(s, m, std::wregex(L"A[[:lower:]]B",1338                                                 std::regex_constants::awk)));1339        assert(m.size() == 1);1340        assert(!m.prefix().matched);1341        assert(m.prefix().first == s);1342        assert(m.prefix().second == m[0].first);1343        assert(!m.suffix().matched);1344        assert(m.suffix().first == m[0].second);1345        assert(m.suffix().second == m[0].second);1346        assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));1347        assert(m.position(0) == 0);1348        assert(m.str(0) == s);1349    }1350    {1351        std::wcmatch m;1352        const wchar_t s[] = L"AMB";1353        assert(!std::regex_search(s, m, std::wregex(L"A[[:lower:]]B",1354                                                 std::regex_constants::awk)));1355        assert(m.size() == 0);1356    }1357    {1358        std::wcmatch m;1359        const wchar_t s[] = L"AMB";1360        assert(std::regex_search(s, m, std::wregex(L"A[^[:lower:]]B",1361                                                 std::regex_constants::awk)));1362        assert(m.size() == 1);1363        assert(!m.prefix().matched);1364        assert(m.prefix().first == s);1365        assert(m.prefix().second == m[0].first);1366        assert(!m.suffix().matched);1367        assert(m.suffix().first == m[0].second);1368        assert(m.suffix().second == m[0].second);1369        assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));1370        assert(m.position(0) == 0);1371        assert(m.str(0) == s);1372    }1373    {1374        std::wcmatch m;1375        const wchar_t s[] = L"AmB";1376        assert(!std::regex_search(s, m, std::wregex(L"A[^[:lower:]]B",1377                                                 std::regex_constants::awk)));1378        assert(m.size() == 0);1379    }1380    {1381        std::wcmatch m;1382        const wchar_t s[] = L"A5B";1383        assert(!std::regex_search(s, m, std::wregex(L"A[^[:lower:]0-9]B",1384                                                 std::regex_constants::awk)));1385        assert(m.size() == 0);1386    }1387    {1388        std::wcmatch m;1389        const wchar_t s[] = L"A?B";1390        assert(std::regex_search(s, m, std::wregex(L"A[^[:lower:]0-9]B",1391                                                 std::regex_constants::awk)));1392        assert(m.size() == 1);1393        assert(!m.prefix().matched);1394        assert(m.prefix().first == s);1395        assert(m.prefix().second == m[0].first);1396        assert(!m.suffix().matched);1397        assert(m.suffix().first == m[0].second);1398        assert(m.suffix().second == m[0].second);1399        assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));1400        assert(m.position(0) == 0);1401        assert(m.str(0) == s);1402    }1403    {1404        std::wcmatch m;1405        const wchar_t s[] = L"m";1406        assert(std::regex_search(s, m, std::wregex(L"[a[=m=]z]",1407                                                 std::regex_constants::awk)));1408        assert(m.size() == 1);1409        assert(!m.prefix().matched);1410        assert(m.prefix().first == s);1411        assert(m.prefix().second == m[0].first);1412        assert(!m.suffix().matched);1413        assert(m.suffix().first == m[0].second);1414        assert(m.suffix().second == m[0].second);1415        assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));1416        assert(m.position(0) == 0);1417        assert(m.str(0) == s);1418    }1419    {1420        std::wcmatch m;1421        const wchar_t s[] = L"m";1422        assert(!std::regex_search(s, m, std::wregex(L"[a[=M=]z]",1423                                                 std::regex_constants::awk)));1424        assert(m.size() == 0);1425    }1426    {1427        std::wcmatch m;1428        const wchar_t s[] = L"-";1429        assert(std::regex_search(s, m, std::wregex(L"[a[.hyphen.]z]",1430                                                 std::regex_constants::awk)));1431        assert(m.size() == 1);1432        assert(!m.prefix().matched);1433        assert(m.prefix().first == s);1434        assert(m.prefix().second == m[0].first);1435        assert(!m.suffix().matched);1436        assert(m.suffix().first == m[0].second);1437        assert(m.suffix().second == m[0].second);1438        assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));1439        assert(m.position(0) == 0);1440        assert(m.str(0) == s);1441    }1442    {1443        std::wcmatch m;1444        const wchar_t s[] = L"z";1445        assert(std::regex_search(s, m, std::wregex(L"[a[.hyphen.]z]",1446                                                 std::regex_constants::awk)));1447        assert(m.size() == 1);1448        assert(!m.prefix().matched);1449        assert(m.prefix().first == s);1450        assert(m.prefix().second == m[0].first);1451        assert(!m.suffix().matched);1452        assert(m.suffix().first == m[0].second);1453        assert(m.suffix().second == m[0].second);1454        assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));1455        assert(m.position(0) == 0);1456        assert(m.str(0) == s);1457    }1458    {1459        std::wcmatch m;1460        const wchar_t s[] = L"m";1461        assert(!std::regex_search(s, m, std::wregex(L"[a[.hyphen.]z]",1462                                                 std::regex_constants::awk)));1463        assert(m.size() == 0);1464    }1465    {1466        std::wcmatch m;1467        const wchar_t s[] = L"01a45cef9";1468        assert(std::regex_search(s, m, std::wregex(L"[ace1-9]*",1469                                                 std::regex_constants::awk)));1470        assert(m.size() == 1);1471        assert(!m.prefix().matched);1472        assert(m.prefix().first == s);1473        assert(m.prefix().second == m[0].first);1474        assert(m.suffix().matched);1475        assert(m.suffix().first == m[0].second);1476        assert(m.suffix().second == s + std::char_traits<wchar_t>::length(s));1477        assert(m.length(0) == 0);1478        assert(m.position(0) == 0);1479        assert(m.str(0) == L"");1480    }1481    {1482        std::wcmatch m;1483        const wchar_t s[] = L"01a45cef9";1484        assert(std::regex_search(s, m, std::wregex(L"[ace1-9]+",1485                                                 std::regex_constants::awk)));1486        assert(m.size() == 1);1487        assert(m.prefix().matched);1488        assert(m.prefix().first == s);1489        assert(m.prefix().second == m[0].first);1490        assert(m.suffix().matched);1491        assert(m.suffix().first == m[0].second);1492        assert(m.suffix().second == s + std::char_traits<wchar_t>::length(s));1493        assert(m.length(0) == 6);1494        assert(m.position(0) == 1);1495        assert(m.str(0) == L"1a45ce");1496    }1497    {1498        const wchar_t r[] = L"^[-+]?[0-9]+[CF]$";1499        std::ptrdiff_t sr = std::char_traits<wchar_t>::length(r);1500        typedef forward_iterator<const wchar_t*> FI;1501        typedef bidirectional_iterator<const wchar_t*> BI;1502        std::wregex regex(FI(r), FI(r+sr), std::regex_constants::awk);1503        std::match_results<BI> m;1504        const wchar_t s[] = L"-40C";1505        std::ptrdiff_t ss = std::char_traits<wchar_t>::length(s);1506        assert(std::regex_search(BI(s), BI(s+ss), m, regex));1507        assert(m.size() == 1);1508        assert(!m.prefix().matched);1509        assert(m.prefix().first == BI(s));1510        assert(m.prefix().second == m[0].first);1511        assert(!m.suffix().matched);1512        assert(m.suffix().first == m[0].second);1513        assert(m.suffix().second == m[0].second);1514        assert(m.length(0) == 4);1515        assert(m.position(0) == 0);1516        assert(m.str(0) == s);1517    }1518    {1519        std::wcmatch m;1520        const wchar_t s[] = L"\n\n\n";1521        assert(std::regex_search(s, m, std::wregex(L"[\\n]+",1522                                                 std::regex_constants::awk)));1523        assert(m.size() == 1);1524        assert(!m.prefix().matched);1525        assert(m.prefix().first == s);1526        assert(m.prefix().second == m[0].first);1527        assert(!m.suffix().matched);1528        assert(m.suffix().first == m[0].second);1529        assert(m.suffix().second == s + std::char_traits<wchar_t>::length(s));1530        assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));1531        assert(m.position(0) == 0);1532        assert(m.str(0) == s);1533    }1534#endif // TEST_HAS_NO_WIDE_CHARACTERS1535 1536  return 0;1537}1538