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-exception 6 // 7 //===----------------------------------------------------------------------===// 8 // 9 // NetBSD does not support LC_COLLATE at the moment 10 // XFAIL: netbsd 11 // XFAIL: LIBCXX-AIX-FIXME 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: target={{.*}}-linux-gnu{{.*}}, freebsd 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(int, char**) 35 { 36 std::locale::global(std::locale(LOCALE_cs_CZ_ISO8859_2)); 37 { 38 std::cmatch m; 39 const char s[] = "m"; 40 assert(std::regex_match(s, m, std::regex("[a[=M=]z]", 41 std::regex_constants::basic))); 42 assert(m.size() == 1); 43 assert(!m.prefix().matched); 44 assert(m.prefix().first == s); 45 assert(m.prefix().second == m[0].first); 46 assert(!m.suffix().matched); 47 assert(m.suffix().first == m[0].second); 48 assert(m.suffix().second == m[0].second); 49 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s)); 50 assert(m.position(0) == 0); 51 assert(m.str(0) == s); 52 } 53 { 54 std::cmatch m; 55 const char s[] = "Ch"; 56 assert(std::regex_match(s, m, std::regex("[a[.ch.]z]", 57 std::regex_constants::basic | std::regex_constants::icase))); 58 assert(m.size() == 1); 59 assert(!m.prefix().matched); 60 assert(m.prefix().first == s); 61 assert(m.prefix().second == m[0].first); 62 assert(!m.suffix().matched); 63 assert(m.suffix().first == m[0].second); 64 assert(m.suffix().second == m[0].second); 65 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s)); 66 assert(m.position(0) == 0); 67 assert(m.str(0) == s); 68 } 69 std::locale::global(std::locale("C")); 70 { 71 std::cmatch m; 72 const char s[] = "m"; 73 assert(!std::regex_match(s, m, std::regex("[a[=M=]z]", 74 std::regex_constants::basic))); 75 assert(m.size() == 0); 76 } 77 78 #ifndef TEST_HAS_NO_WIDE_CHARACTERS 79 std::locale::global(std::locale(LOCALE_cs_CZ_ISO8859_2)); 80 { 81 std::wcmatch m; 82 const wchar_t s[] = L"m"; 83 assert(std::regex_match(s, m, std::wregex(L"[a[=M=]z]", 84 std::regex_constants::basic))); 85 assert(m.size() == 1); 86 assert(!m.prefix().matched); 87 assert(m.prefix().first == s); 88 assert(m.prefix().second == m[0].first); 89 assert(!m.suffix().matched); 90 assert(m.suffix().first == m[0].second); 91 assert(m.suffix().second == m[0].second); 92 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s)); 93 assert(m.position(0) == 0); 94 assert(m.str(0) == s); 95 } 96 { 97 std::wcmatch m; 98 const wchar_t s[] = L"Ch"; 99 assert(std::regex_match(s, m, std::wregex(L"[a[.ch.]z]", 100 std::regex_constants::basic | std::regex_constants::icase))); 101 assert(m.size() == 1); 102 assert(!m.prefix().matched); 103 assert(m.prefix().first == s); 104 assert(m.prefix().second == m[0].first); 105 assert(!m.suffix().matched); 106 assert(m.suffix().first == m[0].second); 107 assert(m.suffix().second == m[0].second); 108 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s)); 109 assert(m.position(0) == 0); 110 assert(m.str(0) == s); 111 } 112 std::locale::global(std::locale("C")); 113 { 114 std::wcmatch m; 115 const wchar_t s[] = L"m"; 116 assert(!std::regex_match(s, m, std::wregex(L"[a[=M=]z]", 117 std::regex_constants::basic))); 118 assert(m.size() == 0); 119 } 120 #endif // TEST_HAS_NO_WIDE_CHARACTERS 121 122 return 0; 123 } 124