[libcxx-commits] [libcxx] 537d90d - [libc++] Split re.alg tests into locale-dependent and independent tests
Alex Richardson via libcxx-commits
libcxx-commits at lists.llvm.org
Wed Jan 20 07:49:27 PST 2021
Author: Alex Richardson
Date: 2021-01-20T15:48:50Z
New Revision: 537d90db827d1df0fef400653eefd857834ca0ba
URL: https://github.com/llvm/llvm-project/commit/537d90db827d1df0fef400653eefd857834ca0ba
DIFF: https://github.com/llvm/llvm-project/commit/537d90db827d1df0fef400653eefd857834ca0ba.diff
LOG: [libc++] Split re.alg tests into locale-dependent and independent tests
Currently all these tests are XFAILED on Linux even though the problem
only seems to be with the few checks that look at collation. To retain
test coverage this splits the locale-dependent tests into a separate
.pass.cpp that is XFAILed as before.
This commit also XFAILs the locale-dependent tests on FreeBSD since the
[=M=] and [.ch.] behaviour for cs_CZ also doesn't seem to match the
behaviour that is expected by these tests.
Reviewed By: #libc, ldionne
Differential Revision: https://reviews.llvm.org/D94969
Added:
libcxx/test/std/re/re.alg/re.alg.match/awk.locale.pass.cpp
libcxx/test/std/re/re.alg/re.alg.match/basic.locale.pass.cpp
libcxx/test/std/re/re.alg/re.alg.match/ecma.locale.pass.cpp
libcxx/test/std/re/re.alg/re.alg.match/extended.locale.pass.cpp
libcxx/test/std/re/re.alg/re.alg.search/awk.locale.pass.cpp
libcxx/test/std/re/re.alg/re.alg.search/basic.locale.pass.cpp
libcxx/test/std/re/re.alg/re.alg.search/ecma.locale.pass.cpp
libcxx/test/std/re/re.alg/re.alg.search/extended.locale.pass.cpp
Modified:
libcxx/test/std/re/re.alg/re.alg.match/awk.pass.cpp
libcxx/test/std/re/re.alg/re.alg.match/basic.pass.cpp
libcxx/test/std/re/re.alg/re.alg.match/ecma.pass.cpp
libcxx/test/std/re/re.alg/re.alg.match/extended.pass.cpp
libcxx/test/std/re/re.alg/re.alg.search/awk.pass.cpp
libcxx/test/std/re/re.alg/re.alg.search/basic.pass.cpp
libcxx/test/std/re/re.alg/re.alg.search/ecma.pass.cpp
libcxx/test/std/re/re.alg/re.alg.search/extended.pass.cpp
libcxx/utils/libcxx/test/features.py
Removed:
################################################################################
diff --git a/libcxx/test/std/re/re.alg/re.alg.match/awk.locale.pass.cpp b/libcxx/test/std/re/re.alg/re.alg.match/awk.locale.pass.cpp
new file mode 100644
index 000000000000..a93a2694464b
--- /dev/null
+++ b/libcxx/test/std/re/re.alg/re.alg.match/awk.locale.pass.cpp
@@ -0,0 +1,116 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// <regex>
+
+// template <class BidirectionalIterator, class Allocator, class charT,
+// class traits>
+// bool regex_match(BidirectionalIterator first, BidirectionalIterator last,
+// match_results<BidirectionalIterator, Allocator>& m,
+// const basic_regex<charT, traits>& e,
+// regex_constants::match_flag_type flags
+// = regex_constants::match_default);
+
+// TODO: investigation needed
+// TODO(netbsd): incomplete support for locales
+// XFAIL: linux-gnu, netbsd, freebsd
+// REQUIRES: locale.cs_CZ.ISO8859-2
+
+#include <regex>
+#include <cassert>
+#include "test_macros.h"
+#include "test_iterators.h"
+
+#include "platform_support.h" // locale name macros
+
+int main(int, char**)
+{
+ std::locale::global(std::locale(LOCALE_cs_CZ_ISO8859_2));
+ {
+ std::cmatch m;
+ const char s[] = "m";
+ assert(std::regex_match(s, m,
+ std::regex("[a[=M=]z]", std::regex_constants::awk)));
+ assert(m.size() == 1);
+ assert(!m.prefix().matched);
+ assert(m.prefix().first == s);
+ assert(m.prefix().second == m[0].first);
+ assert(!m.suffix().matched);
+ assert(m.suffix().first == m[0].second);
+ assert(m.suffix().second == m[0].second);
+ assert((size_t)m.length(0) == std::char_traits<char>::length(s));
+ assert(m.position(0) == 0);
+ assert(m.str(0) == s);
+ }
+ {
+ std::cmatch m;
+ const char s[] = "Ch";
+ assert(std::regex_match(s, m, std::regex("[a[.ch.]z]",
+ std::regex_constants::awk | std::regex_constants::icase)));
+ assert(m.size() == 1);
+ assert(!m.prefix().matched);
+ assert(m.prefix().first == s);
+ assert(m.prefix().second == m[0].first);
+ assert(!m.suffix().matched);
+ assert(m.suffix().first == m[0].second);
+ assert(m.suffix().second == m[0].second);
+ assert((size_t)m.length(0) == std::char_traits<char>::length(s));
+ assert(m.position(0) == 0);
+ assert(m.str(0) == s);
+ }
+ std::locale::global(std::locale("C"));
+ {
+ std::cmatch m;
+ const char s[] = "m";
+ assert(!std::regex_match(s, m, std::regex("[a[=M=]z]",
+ std::regex_constants::awk)));
+ assert(m.size() == 0);
+ }
+ std::locale::global(std::locale(LOCALE_cs_CZ_ISO8859_2));
+ {
+ std::wcmatch m;
+ const wchar_t s[] = L"m";
+ assert(std::regex_match(s, m, std::wregex(L"[a[=M=]z]",
+ std::regex_constants::awk)));
+ assert(m.size() == 1);
+ assert(!m.prefix().matched);
+ assert(m.prefix().first == s);
+ assert(m.prefix().second == m[0].first);
+ assert(!m.suffix().matched);
+ assert(m.suffix().first == m[0].second);
+ assert(m.suffix().second == m[0].second);
+ assert((size_t)m.length(0) == std::char_traits<wchar_t>::length(s));
+ assert(m.position(0) == 0);
+ assert(m.str(0) == s);
+ }
+ {
+ std::wcmatch m;
+ const wchar_t s[] = L"Ch";
+ assert(std::regex_match(s, m, std::wregex(L"[a[.ch.]z]",
+ std::regex_constants::awk | std::regex_constants::icase)));
+ assert(m.size() == 1);
+ assert(!m.prefix().matched);
+ assert(m.prefix().first == s);
+ assert(m.prefix().second == m[0].first);
+ assert(!m.suffix().matched);
+ assert(m.suffix().first == m[0].second);
+ assert(m.suffix().second == m[0].second);
+ assert((size_t)m.length(0) == std::char_traits<wchar_t>::length(s));
+ assert(m.position(0) == 0);
+ assert(m.str(0) == s);
+ }
+ std::locale::global(std::locale("C"));
+ {
+ std::wcmatch m;
+ const wchar_t s[] = L"m";
+ assert(!std::regex_match(s, m, std::wregex(L"[a[=M=]z]",
+ std::regex_constants::awk)));
+ assert(m.size() == 0);
+ }
+ return 0;
+}
diff --git a/libcxx/test/std/re/re.alg/re.alg.match/awk.pass.cpp b/libcxx/test/std/re/re.alg/re.alg.match/awk.pass.cpp
index c3464e123e72..b92374dfce68 100644
--- a/libcxx/test/std/re/re.alg/re.alg.match/awk.pass.cpp
+++ b/libcxx/test/std/re/re.alg/re.alg.match/awk.pass.cpp
@@ -16,18 +16,11 @@
// regex_constants::match_flag_type flags
// = regex_constants::match_default);
-// TODO: investigation needed
-// TODO(netbsd): incomplete support for locales
-// XFAIL: linux-gnu, netbsd
-// REQUIRES: locale.cs_CZ.ISO8859-2
-
#include <regex>
#include <cassert>
#include "test_macros.h"
#include "test_iterators.h"
-#include "platform_support.h" // locale name macros
-
int main(int, char**)
{
{
@@ -619,47 +612,6 @@ int main(int, char**)
std::regex_constants::awk)));
assert(m.size() == 0);
}
- std::locale::global(std::locale(LOCALE_cs_CZ_ISO8859_2));
- {
- std::cmatch m;
- const char s[] = "m";
- assert(std::regex_match(s, m,
- std::regex("[a[=M=]z]", std::regex_constants::awk)));
- assert(m.size() == 1);
- assert(!m.prefix().matched);
- assert(m.prefix().first == s);
- assert(m.prefix().second == m[0].first);
- assert(!m.suffix().matched);
- assert(m.suffix().first == m[0].second);
- assert(m.suffix().second == m[0].second);
- assert((size_t)m.length(0) == std::char_traits<char>::length(s));
- assert(m.position(0) == 0);
- assert(m.str(0) == s);
- }
- {
- std::cmatch m;
- const char s[] = "Ch";
- assert(std::regex_match(s, m, std::regex("[a[.ch.]z]",
- std::regex_constants::awk | std::regex_constants::icase)));
- assert(m.size() == 1);
- assert(!m.prefix().matched);
- assert(m.prefix().first == s);
- assert(m.prefix().second == m[0].first);
- assert(!m.suffix().matched);
- assert(m.suffix().first == m[0].second);
- assert(m.suffix().second == m[0].second);
- assert((size_t)m.length(0) == std::char_traits<char>::length(s));
- assert(m.position(0) == 0);
- assert(m.str(0) == s);
- }
- std::locale::global(std::locale("C"));
- {
- std::cmatch m;
- const char s[] = "m";
- assert(!std::regex_match(s, m, std::regex("[a[=M=]z]",
- std::regex_constants::awk)));
- assert(m.size() == 0);
- }
{
std::cmatch m;
const char s[] = "01a45cef9";
@@ -1300,47 +1252,6 @@ int main(int, char**)
std::regex_constants::awk)));
assert(m.size() == 0);
}
- std::locale::global(std::locale(LOCALE_cs_CZ_ISO8859_2));
- {
- std::wcmatch m;
- const wchar_t s[] = L"m";
- assert(std::regex_match(s, m, std::wregex(L"[a[=M=]z]",
- std::regex_constants::awk)));
- assert(m.size() == 1);
- assert(!m.prefix().matched);
- assert(m.prefix().first == s);
- assert(m.prefix().second == m[0].first);
- assert(!m.suffix().matched);
- assert(m.suffix().first == m[0].second);
- assert(m.suffix().second == m[0].second);
- assert((size_t)m.length(0) == std::char_traits<wchar_t>::length(s));
- assert(m.position(0) == 0);
- assert(m.str(0) == s);
- }
- {
- std::wcmatch m;
- const wchar_t s[] = L"Ch";
- assert(std::regex_match(s, m, std::wregex(L"[a[.ch.]z]",
- std::regex_constants::awk | std::regex_constants::icase)));
- assert(m.size() == 1);
- assert(!m.prefix().matched);
- assert(m.prefix().first == s);
- assert(m.prefix().second == m[0].first);
- assert(!m.suffix().matched);
- assert(m.suffix().first == m[0].second);
- assert(m.suffix().second == m[0].second);
- assert((size_t)m.length(0) == std::char_traits<wchar_t>::length(s));
- assert(m.position(0) == 0);
- assert(m.str(0) == s);
- }
- std::locale::global(std::locale("C"));
- {
- std::wcmatch m;
- const wchar_t s[] = L"m";
- assert(!std::regex_match(s, m, std::wregex(L"[a[=M=]z]",
- std::regex_constants::awk)));
- assert(m.size() == 0);
- }
{
std::wcmatch m;
const wchar_t s[] = L"01a45cef9";
diff --git a/libcxx/test/std/re/re.alg/re.alg.match/basic.locale.pass.cpp b/libcxx/test/std/re/re.alg/re.alg.match/basic.locale.pass.cpp
new file mode 100644
index 000000000000..1cec60209648
--- /dev/null
+++ b/libcxx/test/std/re/re.alg/re.alg.match/basic.locale.pass.cpp
@@ -0,0 +1,118 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// NetBSD does not support LC_COLLATE at the moment
+// XFAIL: netbsd
+
+// REQUIRES: locale.cs_CZ.ISO8859-2
+
+// <regex>
+
+// template <class BidirectionalIterator, class Allocator, class charT, class traits>
+// bool
+// regex_match(BidirectionalIterator first, BidirectionalIterator last,
+// match_results<BidirectionalIterator, Allocator>& m,
+// const basic_regex<charT, traits>& e,
+// regex_constants::match_flag_type flags = regex_constants::match_default);
+
+// TODO: investigation needed
+// XFAIL: linux-gnu, freebsd
+
+#include <regex>
+#include <cassert>
+#include "test_macros.h"
+#include "test_iterators.h"
+
+#include "platform_support.h" // locale name macros
+
+int main(int, char**)
+{
+ std::locale::global(std::locale(LOCALE_cs_CZ_ISO8859_2));
+ {
+ std::cmatch m;
+ const char s[] = "m";
+ assert(std::regex_match(s, m, std::regex("[a[=M=]z]",
+ std::regex_constants::basic)));
+ assert(m.size() == 1);
+ assert(!m.prefix().matched);
+ assert(m.prefix().first == s);
+ assert(m.prefix().second == m[0].first);
+ assert(!m.suffix().matched);
+ assert(m.suffix().first == m[0].second);
+ assert(m.suffix().second == m[0].second);
+ assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s));
+ assert(m.position(0) == 0);
+ assert(m.str(0) == s);
+ }
+ {
+ std::cmatch m;
+ const char s[] = "Ch";
+ assert(std::regex_match(s, m, std::regex("[a[.ch.]z]",
+ std::regex_constants::basic | std::regex_constants::icase)));
+ assert(m.size() == 1);
+ assert(!m.prefix().matched);
+ assert(m.prefix().first == s);
+ assert(m.prefix().second == m[0].first);
+ assert(!m.suffix().matched);
+ assert(m.suffix().first == m[0].second);
+ assert(m.suffix().second == m[0].second);
+ assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s));
+ assert(m.position(0) == 0);
+ assert(m.str(0) == s);
+ }
+ std::locale::global(std::locale("C"));
+ {
+ std::cmatch m;
+ const char s[] = "m";
+ assert(!std::regex_match(s, m, std::regex("[a[=M=]z]",
+ std::regex_constants::basic)));
+ assert(m.size() == 0);
+ }
+ std::locale::global(std::locale(LOCALE_cs_CZ_ISO8859_2));
+ {
+ std::wcmatch m;
+ const wchar_t s[] = L"m";
+ assert(std::regex_match(s, m, std::wregex(L"[a[=M=]z]",
+ std::regex_constants::basic)));
+ assert(m.size() == 1);
+ assert(!m.prefix().matched);
+ assert(m.prefix().first == s);
+ assert(m.prefix().second == m[0].first);
+ assert(!m.suffix().matched);
+ assert(m.suffix().first == m[0].second);
+ assert(m.suffix().second == m[0].second);
+ assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
+ assert(m.position(0) == 0);
+ assert(m.str(0) == s);
+ }
+ {
+ std::wcmatch m;
+ const wchar_t s[] = L"Ch";
+ assert(std::regex_match(s, m, std::wregex(L"[a[.ch.]z]",
+ std::regex_constants::basic | std::regex_constants::icase)));
+ assert(m.size() == 1);
+ assert(!m.prefix().matched);
+ assert(m.prefix().first == s);
+ assert(m.prefix().second == m[0].first);
+ assert(!m.suffix().matched);
+ assert(m.suffix().first == m[0].second);
+ assert(m.suffix().second == m[0].second);
+ assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
+ assert(m.position(0) == 0);
+ assert(m.str(0) == s);
+ }
+ std::locale::global(std::locale("C"));
+ {
+ std::wcmatch m;
+ const wchar_t s[] = L"m";
+ assert(!std::regex_match(s, m, std::wregex(L"[a[=M=]z]",
+ std::regex_constants::basic)));
+ assert(m.size() == 0);
+ }
+ return 0;
+}
diff --git a/libcxx/test/std/re/re.alg/re.alg.match/basic.pass.cpp b/libcxx/test/std/re/re.alg/re.alg.match/basic.pass.cpp
index fd5e7e640a7b..aacf3ec7f1a1 100644
--- a/libcxx/test/std/re/re.alg/re.alg.match/basic.pass.cpp
+++ b/libcxx/test/std/re/re.alg/re.alg.match/basic.pass.cpp
@@ -6,10 +6,6 @@
//
//===----------------------------------------------------------------------===//
//
-// NetBSD does not support LC_COLLATE at the moment
-// XFAIL: netbsd
-
-// REQUIRES: locale.cs_CZ.ISO8859-2
// <regex>
@@ -20,16 +16,11 @@
// const basic_regex<charT, traits>& e,
// regex_constants::match_flag_type flags = regex_constants::match_default);
-// TODO: investigation needed
-// XFAIL: linux-gnu
-
#include <regex>
#include <cassert>
#include "test_macros.h"
#include "test_iterators.h"
-#include "platform_support.h" // locale name macros
-
int main(int, char**)
{
{
@@ -623,47 +614,6 @@ int main(int, char**)
std::regex_constants::basic)));
assert(m.size() == 0);
}
- std::locale::global(std::locale(LOCALE_cs_CZ_ISO8859_2));
- {
- std::cmatch m;
- const char s[] = "m";
- assert(std::regex_match(s, m, std::regex("[a[=M=]z]",
- std::regex_constants::basic)));
- assert(m.size() == 1);
- assert(!m.prefix().matched);
- assert(m.prefix().first == s);
- assert(m.prefix().second == m[0].first);
- assert(!m.suffix().matched);
- assert(m.suffix().first == m[0].second);
- assert(m.suffix().second == m[0].second);
- assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s));
- assert(m.position(0) == 0);
- assert(m.str(0) == s);
- }
- {
- std::cmatch m;
- const char s[] = "Ch";
- assert(std::regex_match(s, m, std::regex("[a[.ch.]z]",
- std::regex_constants::basic | std::regex_constants::icase)));
- assert(m.size() == 1);
- assert(!m.prefix().matched);
- assert(m.prefix().first == s);
- assert(m.prefix().second == m[0].first);
- assert(!m.suffix().matched);
- assert(m.suffix().first == m[0].second);
- assert(m.suffix().second == m[0].second);
- assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s));
- assert(m.position(0) == 0);
- assert(m.str(0) == s);
- }
- std::locale::global(std::locale("C"));
- {
- std::cmatch m;
- const char s[] = "m";
- assert(!std::regex_match(s, m, std::regex("[a[=M=]z]",
- std::regex_constants::basic)));
- assert(m.size() == 0);
- }
{
std::cmatch m;
const char s[] = "01a45cef9";
@@ -1291,47 +1241,6 @@ int main(int, char**)
std::regex_constants::basic)));
assert(m.size() == 0);
}
- std::locale::global(std::locale(LOCALE_cs_CZ_ISO8859_2));
- {
- std::wcmatch m;
- const wchar_t s[] = L"m";
- assert(std::regex_match(s, m, std::wregex(L"[a[=M=]z]",
- std::regex_constants::basic)));
- assert(m.size() == 1);
- assert(!m.prefix().matched);
- assert(m.prefix().first == s);
- assert(m.prefix().second == m[0].first);
- assert(!m.suffix().matched);
- assert(m.suffix().first == m[0].second);
- assert(m.suffix().second == m[0].second);
- assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
- assert(m.position(0) == 0);
- assert(m.str(0) == s);
- }
- {
- std::wcmatch m;
- const wchar_t s[] = L"Ch";
- assert(std::regex_match(s, m, std::wregex(L"[a[.ch.]z]",
- std::regex_constants::basic | std::regex_constants::icase)));
- assert(m.size() == 1);
- assert(!m.prefix().matched);
- assert(m.prefix().first == s);
- assert(m.prefix().second == m[0].first);
- assert(!m.suffix().matched);
- assert(m.suffix().first == m[0].second);
- assert(m.suffix().second == m[0].second);
- assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
- assert(m.position(0) == 0);
- assert(m.str(0) == s);
- }
- std::locale::global(std::locale("C"));
- {
- std::wcmatch m;
- const wchar_t s[] = L"m";
- assert(!std::regex_match(s, m, std::wregex(L"[a[=M=]z]",
- std::regex_constants::basic)));
- assert(m.size() == 0);
- }
{
std::wcmatch m;
const wchar_t s[] = L"01a45cef9";
diff --git a/libcxx/test/std/re/re.alg/re.alg.match/ecma.locale.pass.cpp b/libcxx/test/std/re/re.alg/re.alg.match/ecma.locale.pass.cpp
new file mode 100644
index 000000000000..8e651f6d0301
--- /dev/null
+++ b/libcxx/test/std/re/re.alg/re.alg.match/ecma.locale.pass.cpp
@@ -0,0 +1,75 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// NetBSD does not support LC_COLLATE at the moment
+// XFAIL: netbsd
+
+// REQUIRES: locale.cs_CZ.ISO8859-2
+
+// <regex>
+
+// template <class BidirectionalIterator, class Allocator, class charT, class traits>
+// bool
+// regex_match(BidirectionalIterator first, BidirectionalIterator last,
+// match_results<BidirectionalIterator, Allocator>& m,
+// const basic_regex<charT, traits>& e,
+// regex_constants::match_flag_type flags = regex_constants::match_default);
+
+// TODO: investigation needed
+// XFAIL: linux-gnu, freebsd
+
+#include <regex>
+#include <cassert>
+#include "test_macros.h"
+#include "test_iterators.h"
+
+#include "platform_support.h" // locale name macros
+
+int main(int, char**)
+{
+ std::locale::global(std::locale(LOCALE_cs_CZ_ISO8859_2));
+ {
+ std::wcmatch m;
+ const wchar_t s[] = L"m";
+ assert(std::regex_match(s, m, std::wregex(L"[a[=M=]z]")));
+ assert(m.size() == 1);
+ assert(!m.prefix().matched);
+ assert(m.prefix().first == s);
+ assert(m.prefix().second == m[0].first);
+ assert(!m.suffix().matched);
+ assert(m.suffix().first == m[0].second);
+ assert(m.suffix().second == m[0].second);
+ assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
+ assert(m.position(0) == 0);
+ assert(m.str(0) == s);
+ }
+ {
+ std::wcmatch m;
+ const wchar_t s[] = L"Ch";
+ assert(std::regex_match(s, m, std::wregex(L"[a[.ch.]z]",
+ std::regex_constants::icase)));
+ assert(m.size() == 1);
+ assert(!m.prefix().matched);
+ assert(m.prefix().first == s);
+ assert(m.prefix().second == m[0].first);
+ assert(!m.suffix().matched);
+ assert(m.suffix().first == m[0].second);
+ assert(m.suffix().second == m[0].second);
+ assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
+ assert(m.position(0) == 0);
+ assert(m.str(0) == s);
+ }
+ std::locale::global(std::locale("C"));
+ {
+ std::wcmatch m;
+ const wchar_t s[] = L"m";
+ assert(!std::regex_match(s, m, std::wregex(L"[a[=M=]z]")));
+ assert(m.size() == 0);
+ }
+ return 0;
+}
diff --git a/libcxx/test/std/re/re.alg/re.alg.match/ecma.pass.cpp b/libcxx/test/std/re/re.alg/re.alg.match/ecma.pass.cpp
index e15533da6f31..64be590257fe 100644
--- a/libcxx/test/std/re/re.alg/re.alg.match/ecma.pass.cpp
+++ b/libcxx/test/std/re/re.alg/re.alg.match/ecma.pass.cpp
@@ -6,10 +6,6 @@
//
//===----------------------------------------------------------------------===//
//
-// NetBSD does not support LC_COLLATE at the moment
-// XFAIL: netbsd
-
-// REQUIRES: locale.cs_CZ.ISO8859-2
// <regex>
@@ -20,16 +16,11 @@
// const basic_regex<charT, traits>& e,
// regex_constants::match_flag_type flags = regex_constants::match_default);
-// TODO: investigation needed
-// XFAIL: linux-gnu
-
#include <regex>
#include <cassert>
#include "test_macros.h"
#include "test_iterators.h"
-#include "platform_support.h" // locale name macros
-
int main(int, char**)
{
{
@@ -606,38 +597,6 @@ int main(int, char**)
assert(!std::regex_match(s, m, std::regex("[a[.hyphen.]z]")));
assert(m.size() == 0);
}
- std::locale::global(std::locale(LOCALE_cs_CZ_ISO8859_2));
- {
- std::cmatch m;
- const char s[] = "m";
- assert(std::regex_match(s, m, std::regex("[a[=M=]z]")));
- assert(m.size() == 1);
- assert(!m.prefix().matched);
- assert(m.prefix().first == s);
- assert(m.prefix().second == m[0].first);
- assert(!m.suffix().matched);
- assert(m.suffix().first == m[0].second);
- assert(m.suffix().second == m[0].second);
- assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s));
- assert(m.position(0) == 0);
- assert(m.str(0) == s);
- }
- {
- std::cmatch m;
- const char s[] = "Ch";
- assert(std::regex_match(s, m, std::regex("[a[.ch.]z]",
- std::regex_constants::icase)));
- assert(m.size() == 1);
- assert(!m.prefix().matched);
- assert(m.prefix().first == s);
- assert(m.prefix().second == m[0].first);
- assert(!m.suffix().matched);
- assert(m.suffix().first == m[0].second);
- assert(m.suffix().second == m[0].second);
- assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s));
- assert(m.position(0) == 0);
- assert(m.str(0) == s);
- }
{
std::cmatch m;
const char s[] = "foobar";
@@ -650,13 +609,6 @@ int main(int, char**)
assert(std::regex_match(s, s+7, m, std::regex("[abfor\\0]*")));
assert(m.size() == 1);
}
- std::locale::global(std::locale("C"));
- {
- std::cmatch m;
- const char s[] = "m";
- assert(!std::regex_match(s, m, std::regex("[a[=M=]z]")));
- assert(m.size() == 0);
- }
{
std::cmatch m;
const char s[] = "01a45cef9";
@@ -1292,45 +1244,6 @@ int main(int, char**)
assert(!std::regex_match(s, m, std::wregex(L"[a[.hyphen.]z]")));
assert(m.size() == 0);
}
- std::locale::global(std::locale(LOCALE_cs_CZ_ISO8859_2));
- {
- std::wcmatch m;
- const wchar_t s[] = L"m";
- assert(std::regex_match(s, m, std::wregex(L"[a[=M=]z]")));
- assert(m.size() == 1);
- assert(!m.prefix().matched);
- assert(m.prefix().first == s);
- assert(m.prefix().second == m[0].first);
- assert(!m.suffix().matched);
- assert(m.suffix().first == m[0].second);
- assert(m.suffix().second == m[0].second);
- assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
- assert(m.position(0) == 0);
- assert(m.str(0) == s);
- }
- {
- std::wcmatch m;
- const wchar_t s[] = L"Ch";
- assert(std::regex_match(s, m, std::wregex(L"[a[.ch.]z]",
- std::regex_constants::icase)));
- assert(m.size() == 1);
- assert(!m.prefix().matched);
- assert(m.prefix().first == s);
- assert(m.prefix().second == m[0].first);
- assert(!m.suffix().matched);
- assert(m.suffix().first == m[0].second);
- assert(m.suffix().second == m[0].second);
- assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
- assert(m.position(0) == 0);
- assert(m.str(0) == s);
- }
- std::locale::global(std::locale("C"));
- {
- std::wcmatch m;
- const wchar_t s[] = L"m";
- assert(!std::regex_match(s, m, std::wregex(L"[a[=M=]z]")));
- assert(m.size() == 0);
- }
{
std::wcmatch m;
const wchar_t s[] = L"01a45cef9";
diff --git a/libcxx/test/std/re/re.alg/re.alg.match/extended.locale.pass.cpp b/libcxx/test/std/re/re.alg/re.alg.match/extended.locale.pass.cpp
new file mode 100644
index 000000000000..ea77dd83fc97
--- /dev/null
+++ b/libcxx/test/std/re/re.alg/re.alg.match/extended.locale.pass.cpp
@@ -0,0 +1,118 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// NetBSD does not support LC_COLLATE at the moment
+// XFAIL: netbsd
+
+// REQUIRES: locale.cs_CZ.ISO8859-2
+
+// <regex>
+
+// template <class BidirectionalIterator, class Allocator, class charT, class traits>
+// bool
+// regex_match(BidirectionalIterator first, BidirectionalIterator last,
+// match_results<BidirectionalIterator, Allocator>& m,
+// const basic_regex<charT, traits>& e,
+// regex_constants::match_flag_type flags = regex_constants::match_default);
+
+// TODO: investigation needed
+// XFAIL: linux-gnu, freebsd
+
+#include <regex>
+#include <cassert>
+#include "test_macros.h"
+#include "test_iterators.h"
+
+#include "platform_support.h" // locale name macros
+
+int main(int, char**)
+{
+ std::locale::global(std::locale(LOCALE_cs_CZ_ISO8859_2));
+ {
+ std::cmatch m;
+ const char s[] = "m";
+ assert(std::regex_match(s, m, std::regex("[a[=M=]z]",
+ std::regex_constants::extended)));
+ assert(m.size() == 1);
+ assert(!m.prefix().matched);
+ assert(m.prefix().first == s);
+ assert(m.prefix().second == m[0].first);
+ assert(!m.suffix().matched);
+ assert(m.suffix().first == m[0].second);
+ assert(m.suffix().second == m[0].second);
+ assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s));
+ assert(m.position(0) == 0);
+ assert(m.str(0) == s);
+ }
+ {
+ std::cmatch m;
+ const char s[] = "Ch";
+ assert(std::regex_match(s, m, std::regex("[a[.ch.]z]",
+ std::regex_constants::extended | std::regex_constants::icase)));
+ assert(m.size() == 1);
+ assert(!m.prefix().matched);
+ assert(m.prefix().first == s);
+ assert(m.prefix().second == m[0].first);
+ assert(!m.suffix().matched);
+ assert(m.suffix().first == m[0].second);
+ assert(m.suffix().second == m[0].second);
+ assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s));
+ assert(m.position(0) == 0);
+ assert(m.str(0) == s);
+ }
+ std::locale::global(std::locale("C"));
+ {
+ std::cmatch m;
+ const char s[] = "m";
+ assert(!std::regex_match(s, m, std::regex("[a[=M=]z]",
+ std::regex_constants::extended)));
+ assert(m.size() == 0);
+ }
+ std::locale::global(std::locale(LOCALE_cs_CZ_ISO8859_2));
+ {
+ std::wcmatch m;
+ const wchar_t s[] = L"m";
+ assert(std::regex_match(s, m, std::wregex(L"[a[=M=]z]",
+ std::regex_constants::extended)));
+ assert(m.size() == 1);
+ assert(!m.prefix().matched);
+ assert(m.prefix().first == s);
+ assert(m.prefix().second == m[0].first);
+ assert(!m.suffix().matched);
+ assert(m.suffix().first == m[0].second);
+ assert(m.suffix().second == m[0].second);
+ assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
+ assert(m.position(0) == 0);
+ assert(m.str(0) == s);
+ }
+ {
+ std::wcmatch m;
+ const wchar_t s[] = L"Ch";
+ assert(std::regex_match(s, m, std::wregex(L"[a[.ch.]z]",
+ std::regex_constants::extended | std::regex_constants::icase)));
+ assert(m.size() == 1);
+ assert(!m.prefix().matched);
+ assert(m.prefix().first == s);
+ assert(m.prefix().second == m[0].first);
+ assert(!m.suffix().matched);
+ assert(m.suffix().first == m[0].second);
+ assert(m.suffix().second == m[0].second);
+ assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
+ assert(m.position(0) == 0);
+ assert(m.str(0) == s);
+ }
+ std::locale::global(std::locale("C"));
+ {
+ std::wcmatch m;
+ const wchar_t s[] = L"m";
+ assert(!std::regex_match(s, m, std::wregex(L"[a[=M=]z]",
+ std::regex_constants::extended)));
+ assert(m.size() == 0);
+ }
+ return 0;
+}
diff --git a/libcxx/test/std/re/re.alg/re.alg.match/extended.pass.cpp b/libcxx/test/std/re/re.alg/re.alg.match/extended.pass.cpp
index 28e5ea8560b7..e9d44917c8a4 100644
--- a/libcxx/test/std/re/re.alg/re.alg.match/extended.pass.cpp
+++ b/libcxx/test/std/re/re.alg/re.alg.match/extended.pass.cpp
@@ -6,11 +6,6 @@
//
//===----------------------------------------------------------------------===//
//
-// NetBSD does not support LC_COLLATE at the moment
-// XFAIL: netbsd
-
-// REQUIRES: locale.cs_CZ.ISO8859-2
-
// <regex>
// template <class BidirectionalIterator, class Allocator, class charT, class traits>
@@ -20,16 +15,11 @@
// const basic_regex<charT, traits>& e,
// regex_constants::match_flag_type flags = regex_constants::match_default);
-// TODO: investigation needed
-// XFAIL: linux-gnu
-
#include <regex>
#include <cassert>
#include "test_macros.h"
#include "test_iterators.h"
-#include "platform_support.h" // locale name macros
-
int main(int, char**)
{
{
@@ -639,47 +629,6 @@ int main(int, char**)
std::regex_constants::extended)));
assert(m.size() == 0);
}
- std::locale::global(std::locale(LOCALE_cs_CZ_ISO8859_2));
- {
- std::cmatch m;
- const char s[] = "m";
- assert(std::regex_match(s, m, std::regex("[a[=M=]z]",
- std::regex_constants::extended)));
- assert(m.size() == 1);
- assert(!m.prefix().matched);
- assert(m.prefix().first == s);
- assert(m.prefix().second == m[0].first);
- assert(!m.suffix().matched);
- assert(m.suffix().first == m[0].second);
- assert(m.suffix().second == m[0].second);
- assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s));
- assert(m.position(0) == 0);
- assert(m.str(0) == s);
- }
- {
- std::cmatch m;
- const char s[] = "Ch";
- assert(std::regex_match(s, m, std::regex("[a[.ch.]z]",
- std::regex_constants::extended | std::regex_constants::icase)));
- assert(m.size() == 1);
- assert(!m.prefix().matched);
- assert(m.prefix().first == s);
- assert(m.prefix().second == m[0].first);
- assert(!m.suffix().matched);
- assert(m.suffix().first == m[0].second);
- assert(m.suffix().second == m[0].second);
- assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s));
- assert(m.position(0) == 0);
- assert(m.str(0) == s);
- }
- std::locale::global(std::locale("C"));
- {
- std::cmatch m;
- const char s[] = "m";
- assert(!std::regex_match(s, m, std::regex("[a[=M=]z]",
- std::regex_constants::extended)));
- assert(m.size() == 0);
- }
{
std::cmatch m;
const char s[] = "01a45cef9";
@@ -1323,47 +1272,6 @@ int main(int, char**)
std::regex_constants::extended)));
assert(m.size() == 0);
}
- std::locale::global(std::locale(LOCALE_cs_CZ_ISO8859_2));
- {
- std::wcmatch m;
- const wchar_t s[] = L"m";
- assert(std::regex_match(s, m, std::wregex(L"[a[=M=]z]",
- std::regex_constants::extended)));
- assert(m.size() == 1);
- assert(!m.prefix().matched);
- assert(m.prefix().first == s);
- assert(m.prefix().second == m[0].first);
- assert(!m.suffix().matched);
- assert(m.suffix().first == m[0].second);
- assert(m.suffix().second == m[0].second);
- assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
- assert(m.position(0) == 0);
- assert(m.str(0) == s);
- }
- {
- std::wcmatch m;
- const wchar_t s[] = L"Ch";
- assert(std::regex_match(s, m, std::wregex(L"[a[.ch.]z]",
- std::regex_constants::extended | std::regex_constants::icase)));
- assert(m.size() == 1);
- assert(!m.prefix().matched);
- assert(m.prefix().first == s);
- assert(m.prefix().second == m[0].first);
- assert(!m.suffix().matched);
- assert(m.suffix().first == m[0].second);
- assert(m.suffix().second == m[0].second);
- assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
- assert(m.position(0) == 0);
- assert(m.str(0) == s);
- }
- std::locale::global(std::locale("C"));
- {
- std::wcmatch m;
- const wchar_t s[] = L"m";
- assert(!std::regex_match(s, m, std::wregex(L"[a[=M=]z]",
- std::regex_constants::extended)));
- assert(m.size() == 0);
- }
{
std::wcmatch m;
const wchar_t s[] = L"01a45cef9";
diff --git a/libcxx/test/std/re/re.alg/re.alg.search/awk.locale.pass.cpp b/libcxx/test/std/re/re.alg/re.alg.search/awk.locale.pass.cpp
new file mode 100644
index 000000000000..4ba87bb45232
--- /dev/null
+++ b/libcxx/test/std/re/re.alg/re.alg.search/awk.locale.pass.cpp
@@ -0,0 +1,118 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// NetBSD does not support LC_COLLATE at the moment
+// XFAIL: netbsd
+
+// REQUIRES: locale.cs_CZ.ISO8859-2
+
+// <regex>
+
+// template <class BidirectionalIterator, class Allocator, class charT, class traits>
+// bool
+// regex_search(BidirectionalIterator first, BidirectionalIterator last,
+// match_results<BidirectionalIterator, Allocator>& m,
+// const basic_regex<charT, traits>& e,
+// regex_constants::match_flag_type flags = regex_constants::match_default);
+
+// TODO: investigation needed
+// XFAIL: linux-gnu, freebsd
+
+#include <regex>
+#include <cassert>
+#include "test_macros.h"
+#include "test_iterators.h"
+
+#include "platform_support.h" // locale name macros
+
+int main(int, char**)
+{
+ std::locale::global(std::locale(LOCALE_cs_CZ_ISO8859_2));
+ {
+ std::cmatch m;
+ const char s[] = "m";
+ assert(std::regex_search(s, m, std::regex("[a[=M=]z]",
+ std::regex_constants::awk)));
+ assert(m.size() == 1);
+ assert(!m.prefix().matched);
+ assert(m.prefix().first == s);
+ assert(m.prefix().second == m[0].first);
+ assert(!m.suffix().matched);
+ assert(m.suffix().first == m[0].second);
+ assert(m.suffix().second == m[0].second);
+ assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s));
+ assert(m.position(0) == 0);
+ assert(m.str(0) == s);
+ }
+ {
+ std::cmatch m;
+ const char s[] = "Ch";
+ assert(std::regex_search(s, m, std::regex("[a[.ch.]z]",
+ std::regex_constants::awk | std::regex_constants::icase)));
+ assert(m.size() == 1);
+ assert(!m.prefix().matched);
+ assert(m.prefix().first == s);
+ assert(m.prefix().second == m[0].first);
+ assert(!m.suffix().matched);
+ assert(m.suffix().first == m[0].second);
+ assert(m.suffix().second == m[0].second);
+ assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s));
+ assert(m.position(0) == 0);
+ assert(m.str(0) == s);
+ }
+ std::locale::global(std::locale("C"));
+ {
+ std::cmatch m;
+ const char s[] = "m";
+ assert(!std::regex_search(s, m, std::regex("[a[=M=]z]",
+ std::regex_constants::awk)));
+ assert(m.size() == 0);
+ }
+ std::locale::global(std::locale(LOCALE_cs_CZ_ISO8859_2));
+ {
+ std::wcmatch m;
+ const wchar_t s[] = L"m";
+ assert(std::regex_search(s, m, std::wregex(L"[a[=M=]z]",
+ std::regex_constants::awk)));
+ assert(m.size() == 1);
+ assert(!m.prefix().matched);
+ assert(m.prefix().first == s);
+ assert(m.prefix().second == m[0].first);
+ assert(!m.suffix().matched);
+ assert(m.suffix().first == m[0].second);
+ assert(m.suffix().second == m[0].second);
+ assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
+ assert(m.position(0) == 0);
+ assert(m.str(0) == s);
+ }
+ {
+ std::wcmatch m;
+ const wchar_t s[] = L"Ch";
+ assert(std::regex_search(s, m, std::wregex(L"[a[.ch.]z]",
+ std::regex_constants::awk | std::regex_constants::icase)));
+ assert(m.size() == 1);
+ assert(!m.prefix().matched);
+ assert(m.prefix().first == s);
+ assert(m.prefix().second == m[0].first);
+ assert(!m.suffix().matched);
+ assert(m.suffix().first == m[0].second);
+ assert(m.suffix().second == m[0].second);
+ assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
+ assert(m.position(0) == 0);
+ assert(m.str(0) == s);
+ }
+ std::locale::global(std::locale("C"));
+ {
+ std::wcmatch m;
+ const wchar_t s[] = L"m";
+ assert(!std::regex_search(s, m, std::wregex(L"[a[=M=]z]",
+ std::regex_constants::awk)));
+ assert(m.size() == 0);
+ }
+ return 0;
+}
diff --git a/libcxx/test/std/re/re.alg/re.alg.search/awk.pass.cpp b/libcxx/test/std/re/re.alg/re.alg.search/awk.pass.cpp
index 0f8fb14f586f..e33f583559ff 100644
--- a/libcxx/test/std/re/re.alg/re.alg.search/awk.pass.cpp
+++ b/libcxx/test/std/re/re.alg/re.alg.search/awk.pass.cpp
@@ -6,10 +6,6 @@
//
//===----------------------------------------------------------------------===//
//
-// NetBSD does not support LC_COLLATE at the moment
-// XFAIL: netbsd
-
-// REQUIRES: locale.cs_CZ.ISO8859-2
// <regex>
@@ -20,16 +16,11 @@
// const basic_regex<charT, traits>& e,
// regex_constants::match_flag_type flags = regex_constants::match_default);
-// TODO: investigation needed
-// XFAIL: linux-gnu
-
#include <regex>
#include <cassert>
#include "test_macros.h"
#include "test_iterators.h"
-#include "platform_support.h" // locale name macros
-
int main(int, char**)
{
{
@@ -693,47 +684,6 @@ int main(int, char**)
std::regex_constants::awk)));
assert(m.size() == 0);
}
- std::locale::global(std::locale(LOCALE_cs_CZ_ISO8859_2));
- {
- std::cmatch m;
- const char s[] = "m";
- assert(std::regex_search(s, m, std::regex("[a[=M=]z]",
- std::regex_constants::awk)));
- assert(m.size() == 1);
- assert(!m.prefix().matched);
- assert(m.prefix().first == s);
- assert(m.prefix().second == m[0].first);
- assert(!m.suffix().matched);
- assert(m.suffix().first == m[0].second);
- assert(m.suffix().second == m[0].second);
- assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s));
- assert(m.position(0) == 0);
- assert(m.str(0) == s);
- }
- {
- std::cmatch m;
- const char s[] = "Ch";
- assert(std::regex_search(s, m, std::regex("[a[.ch.]z]",
- std::regex_constants::awk | std::regex_constants::icase)));
- assert(m.size() == 1);
- assert(!m.prefix().matched);
- assert(m.prefix().first == s);
- assert(m.prefix().second == m[0].first);
- assert(!m.suffix().matched);
- assert(m.suffix().first == m[0].second);
- assert(m.suffix().second == m[0].second);
- assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s));
- assert(m.position(0) == 0);
- assert(m.str(0) == s);
- }
- std::locale::global(std::locale("C"));
- {
- std::cmatch m;
- const char s[] = "m";
- assert(!std::regex_search(s, m, std::regex("[a[=M=]z]",
- std::regex_constants::awk)));
- assert(m.size() == 0);
- }
{
std::cmatch m;
const char s[] = "01a45cef9";
@@ -1464,47 +1414,6 @@ int main(int, char**)
std::regex_constants::awk)));
assert(m.size() == 0);
}
- std::locale::global(std::locale(LOCALE_cs_CZ_ISO8859_2));
- {
- std::wcmatch m;
- const wchar_t s[] = L"m";
- assert(std::regex_search(s, m, std::wregex(L"[a[=M=]z]",
- std::regex_constants::awk)));
- assert(m.size() == 1);
- assert(!m.prefix().matched);
- assert(m.prefix().first == s);
- assert(m.prefix().second == m[0].first);
- assert(!m.suffix().matched);
- assert(m.suffix().first == m[0].second);
- assert(m.suffix().second == m[0].second);
- assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
- assert(m.position(0) == 0);
- assert(m.str(0) == s);
- }
- {
- std::wcmatch m;
- const wchar_t s[] = L"Ch";
- assert(std::regex_search(s, m, std::wregex(L"[a[.ch.]z]",
- std::regex_constants::awk | std::regex_constants::icase)));
- assert(m.size() == 1);
- assert(!m.prefix().matched);
- assert(m.prefix().first == s);
- assert(m.prefix().second == m[0].first);
- assert(!m.suffix().matched);
- assert(m.suffix().first == m[0].second);
- assert(m.suffix().second == m[0].second);
- assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
- assert(m.position(0) == 0);
- assert(m.str(0) == s);
- }
- std::locale::global(std::locale("C"));
- {
- std::wcmatch m;
- const wchar_t s[] = L"m";
- assert(!std::regex_search(s, m, std::wregex(L"[a[=M=]z]",
- std::regex_constants::awk)));
- assert(m.size() == 0);
- }
{
std::wcmatch m;
const wchar_t s[] = L"01a45cef9";
diff --git a/libcxx/test/std/re/re.alg/re.alg.search/basic.locale.pass.cpp b/libcxx/test/std/re/re.alg/re.alg.search/basic.locale.pass.cpp
new file mode 100644
index 000000000000..fe3435eae929
--- /dev/null
+++ b/libcxx/test/std/re/re.alg/re.alg.search/basic.locale.pass.cpp
@@ -0,0 +1,118 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// NetBSD does not support LC_COLLATE at the moment
+// XFAIL: netbsd
+
+// REQUIRES: locale.cs_CZ.ISO8859-2
+
+// <regex>
+
+// template <class BidirectionalIterator, class Allocator, class charT, class traits>
+// bool
+// regex_search(BidirectionalIterator first, BidirectionalIterator last,
+// match_results<BidirectionalIterator, Allocator>& m,
+// const basic_regex<charT, traits>& e,
+// regex_constants::match_flag_type flags = regex_constants::match_default);
+
+// TODO: investigation needed
+// XFAIL: linux-gnu, freebsd
+
+#include <regex>
+#include <cassert>
+#include "test_macros.h"
+#include "test_iterators.h"
+
+#include "platform_support.h" // locale name macros
+
+int main(int, char**)
+{
+ std::locale::global(std::locale(LOCALE_cs_CZ_ISO8859_2));
+ {
+ std::cmatch m;
+ const char s[] = "m";
+ assert(std::regex_search(s, m, std::regex("[a[=M=]z]",
+ std::regex_constants::basic)));
+ assert(m.size() == 1);
+ assert(!m.prefix().matched);
+ assert(m.prefix().first == s);
+ assert(m.prefix().second == m[0].first);
+ assert(!m.suffix().matched);
+ assert(m.suffix().first == m[0].second);
+ assert(m.suffix().second == m[0].second);
+ assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s));
+ assert(m.position(0) == 0);
+ assert(m.str(0) == s);
+ }
+ {
+ std::cmatch m;
+ const char s[] = "Ch";
+ assert(std::regex_search(s, m, std::regex("[a[.ch.]z]",
+ std::regex_constants::basic | std::regex_constants::icase)));
+ assert(m.size() == 1);
+ assert(!m.prefix().matched);
+ assert(m.prefix().first == s);
+ assert(m.prefix().second == m[0].first);
+ assert(!m.suffix().matched);
+ assert(m.suffix().first == m[0].second);
+ assert(m.suffix().second == m[0].second);
+ assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s));
+ assert(m.position(0) == 0);
+ assert(m.str(0) == s);
+ }
+ std::locale::global(std::locale("C"));
+ {
+ std::cmatch m;
+ const char s[] = "m";
+ assert(!std::regex_search(s, m, std::regex("[a[=M=]z]",
+ std::regex_constants::basic)));
+ assert(m.size() == 0);
+ }
+ std::locale::global(std::locale(LOCALE_cs_CZ_ISO8859_2));
+ {
+ std::wcmatch m;
+ const wchar_t s[] = L"m";
+ assert(std::regex_search(s, m, std::wregex(L"[a[=M=]z]",
+ std::regex_constants::basic)));
+ assert(m.size() == 1);
+ assert(!m.prefix().matched);
+ assert(m.prefix().first == s);
+ assert(m.prefix().second == m[0].first);
+ assert(!m.suffix().matched);
+ assert(m.suffix().first == m[0].second);
+ assert(m.suffix().second == m[0].second);
+ assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
+ assert(m.position(0) == 0);
+ assert(m.str(0) == s);
+ }
+ {
+ std::wcmatch m;
+ const wchar_t s[] = L"Ch";
+ assert(std::regex_search(s, m, std::wregex(L"[a[.ch.]z]",
+ std::regex_constants::basic | std::regex_constants::icase)));
+ assert(m.size() == 1);
+ assert(!m.prefix().matched);
+ assert(m.prefix().first == s);
+ assert(m.prefix().second == m[0].first);
+ assert(!m.suffix().matched);
+ assert(m.suffix().first == m[0].second);
+ assert(m.suffix().second == m[0].second);
+ assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
+ assert(m.position(0) == 0);
+ assert(m.str(0) == s);
+ }
+ std::locale::global(std::locale("C"));
+ {
+ std::wcmatch m;
+ const wchar_t s[] = L"m";
+ assert(!std::regex_search(s, m, std::wregex(L"[a[=M=]z]",
+ std::regex_constants::basic)));
+ assert(m.size() == 0);
+ }
+ return 0;
+}
diff --git a/libcxx/test/std/re/re.alg/re.alg.search/basic.pass.cpp b/libcxx/test/std/re/re.alg/re.alg.search/basic.pass.cpp
index cb11f3bdf66d..0ea290e2b78f 100644
--- a/libcxx/test/std/re/re.alg/re.alg.search/basic.pass.cpp
+++ b/libcxx/test/std/re/re.alg/re.alg.search/basic.pass.cpp
@@ -6,10 +6,6 @@
//
//===----------------------------------------------------------------------===//
//
-// NetBSD does not support LC_COLLATE at the moment
-// XFAIL: netbsd
-
-// REQUIRES: locale.cs_CZ.ISO8859-2
// <regex>
@@ -20,16 +16,11 @@
// const basic_regex<charT, traits>& e,
// regex_constants::match_flag_type flags = regex_constants::match_default);
-// TODO: investigation needed
-// XFAIL: linux-gnu
-
#include <regex>
#include <cassert>
#include "test_macros.h"
#include "test_iterators.h"
-#include "platform_support.h" // locale name macros
-
int main(int, char**)
{
{
@@ -695,47 +686,6 @@ int main(int, char**)
std::regex_constants::basic)));
assert(m.size() == 0);
}
- std::locale::global(std::locale(LOCALE_cs_CZ_ISO8859_2));
- {
- std::cmatch m;
- const char s[] = "m";
- assert(std::regex_search(s, m, std::regex("[a[=M=]z]",
- std::regex_constants::basic)));
- assert(m.size() == 1);
- assert(!m.prefix().matched);
- assert(m.prefix().first == s);
- assert(m.prefix().second == m[0].first);
- assert(!m.suffix().matched);
- assert(m.suffix().first == m[0].second);
- assert(m.suffix().second == m[0].second);
- assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s));
- assert(m.position(0) == 0);
- assert(m.str(0) == s);
- }
- {
- std::cmatch m;
- const char s[] = "Ch";
- assert(std::regex_search(s, m, std::regex("[a[.ch.]z]",
- std::regex_constants::basic | std::regex_constants::icase)));
- assert(m.size() == 1);
- assert(!m.prefix().matched);
- assert(m.prefix().first == s);
- assert(m.prefix().second == m[0].first);
- assert(!m.suffix().matched);
- assert(m.suffix().first == m[0].second);
- assert(m.suffix().second == m[0].second);
- assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s));
- assert(m.position(0) == 0);
- assert(m.str(0) == s);
- }
- std::locale::global(std::locale("C"));
- {
- std::cmatch m;
- const char s[] = "m";
- assert(!std::regex_search(s, m, std::regex("[a[=M=]z]",
- std::regex_constants::basic)));
- assert(m.size() == 0);
- }
{
std::cmatch m;
const char s[] = "01a45cef9";
@@ -1453,47 +1403,6 @@ int main(int, char**)
std::regex_constants::basic)));
assert(m.size() == 0);
}
- std::locale::global(std::locale(LOCALE_cs_CZ_ISO8859_2));
- {
- std::wcmatch m;
- const wchar_t s[] = L"m";
- assert(std::regex_search(s, m, std::wregex(L"[a[=M=]z]",
- std::regex_constants::basic)));
- assert(m.size() == 1);
- assert(!m.prefix().matched);
- assert(m.prefix().first == s);
- assert(m.prefix().second == m[0].first);
- assert(!m.suffix().matched);
- assert(m.suffix().first == m[0].second);
- assert(m.suffix().second == m[0].second);
- assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
- assert(m.position(0) == 0);
- assert(m.str(0) == s);
- }
- {
- std::wcmatch m;
- const wchar_t s[] = L"Ch";
- assert(std::regex_search(s, m, std::wregex(L"[a[.ch.]z]",
- std::regex_constants::basic | std::regex_constants::icase)));
- assert(m.size() == 1);
- assert(!m.prefix().matched);
- assert(m.prefix().first == s);
- assert(m.prefix().second == m[0].first);
- assert(!m.suffix().matched);
- assert(m.suffix().first == m[0].second);
- assert(m.suffix().second == m[0].second);
- assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
- assert(m.position(0) == 0);
- assert(m.str(0) == s);
- }
- std::locale::global(std::locale("C"));
- {
- std::wcmatch m;
- const wchar_t s[] = L"m";
- assert(!std::regex_search(s, m, std::wregex(L"[a[=M=]z]",
- std::regex_constants::basic)));
- assert(m.size() == 0);
- }
{
std::wcmatch m;
const wchar_t s[] = L"01a45cef9";
diff --git a/libcxx/test/std/re/re.alg/re.alg.search/ecma.locale.pass.cpp b/libcxx/test/std/re/re.alg/re.alg.search/ecma.locale.pass.cpp
new file mode 100644
index 000000000000..840cc634a3da
--- /dev/null
+++ b/libcxx/test/std/re/re.alg/re.alg.search/ecma.locale.pass.cpp
@@ -0,0 +1,114 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// NetBSD does not support LC_COLLATE at the moment
+// XFAIL: netbsd
+
+// REQUIRES: locale.cs_CZ.ISO8859-2
+
+// <regex>
+
+// template <class BidirectionalIterator, class Allocator, class charT, class traits>
+// bool
+// regex_search(BidirectionalIterator first, BidirectionalIterator last,
+// match_results<BidirectionalIterator, Allocator>& m,
+// const basic_regex<charT, traits>& e,
+// regex_constants::match_flag_type flags = regex_constants::match_default);
+
+// TODO: investigation needed
+// XFAIL: linux-gnu, freebsd
+
+#include <regex>
+#include <cassert>
+#include "test_macros.h"
+#include "test_iterators.h"
+
+#include "platform_support.h" // locale name macros
+
+int main(int, char**)
+{
+ std::locale::global(std::locale(LOCALE_cs_CZ_ISO8859_2));
+ {
+ std::cmatch m;
+ const char s[] = "m";
+ assert(std::regex_search(s, m, std::regex("[a[=M=]z]")));
+ assert(m.size() == 1);
+ assert(!m.prefix().matched);
+ assert(m.prefix().first == s);
+ assert(m.prefix().second == m[0].first);
+ assert(!m.suffix().matched);
+ assert(m.suffix().first == m[0].second);
+ assert(m.suffix().second == m[0].second);
+ assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s));
+ assert(m.position(0) == 0);
+ assert(m.str(0) == s);
+ }
+ {
+ std::cmatch m;
+ const char s[] = "Ch";
+ assert(std::regex_search(s, m, std::regex("[a[.ch.]z]",
+ std::regex_constants::icase)));
+ assert(m.size() == 1);
+ assert(!m.prefix().matched);
+ assert(m.prefix().first == s);
+ assert(m.prefix().second == m[0].first);
+ assert(!m.suffix().matched);
+ assert(m.suffix().first == m[0].second);
+ assert(m.suffix().second == m[0].second);
+ assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s));
+ assert(m.position(0) == 0);
+ assert(m.str(0) == s);
+ }
+ std::locale::global(std::locale("C"));
+ {
+ std::cmatch m;
+ const char s[] = "m";
+ assert(!std::regex_search(s, m, std::regex("[a[=M=]z]")));
+ assert(m.size() == 0);
+ }
+ std::locale::global(std::locale(LOCALE_cs_CZ_ISO8859_2));
+ {
+ std::wcmatch m;
+ const wchar_t s[] = L"m";
+ assert(std::regex_search(s, m, std::wregex(L"[a[=M=]z]")));
+ assert(m.size() == 1);
+ assert(!m.prefix().matched);
+ assert(m.prefix().first == s);
+ assert(m.prefix().second == m[0].first);
+ assert(!m.suffix().matched);
+ assert(m.suffix().first == m[0].second);
+ assert(m.suffix().second == m[0].second);
+ assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
+ assert(m.position(0) == 0);
+ assert(m.str(0) == s);
+ }
+ {
+ std::wcmatch m;
+ const wchar_t s[] = L"Ch";
+ assert(std::regex_search(s, m, std::wregex(L"[a[.ch.]z]",
+ std::regex_constants::icase)));
+ assert(m.size() == 1);
+ assert(!m.prefix().matched);
+ assert(m.prefix().first == s);
+ assert(m.prefix().second == m[0].first);
+ assert(!m.suffix().matched);
+ assert(m.suffix().first == m[0].second);
+ assert(m.suffix().second == m[0].second);
+ assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
+ assert(m.position(0) == 0);
+ assert(m.str(0) == s);
+ }
+ std::locale::global(std::locale("C"));
+ {
+ std::wcmatch m;
+ const wchar_t s[] = L"m";
+ assert(!std::regex_search(s, m, std::wregex(L"[a[=M=]z]")));
+ assert(m.size() == 0);
+ }
+ return 0;
+}
diff --git a/libcxx/test/std/re/re.alg/re.alg.search/ecma.pass.cpp b/libcxx/test/std/re/re.alg/re.alg.search/ecma.pass.cpp
index 7e74caa0808a..57f71824961f 100644
--- a/libcxx/test/std/re/re.alg/re.alg.search/ecma.pass.cpp
+++ b/libcxx/test/std/re/re.alg/re.alg.search/ecma.pass.cpp
@@ -6,10 +6,6 @@
//
//===----------------------------------------------------------------------===//
//
-// NetBSD does not support LC_COLLATE at the moment
-// XFAIL: netbsd
-
-// REQUIRES: locale.cs_CZ.ISO8859-2
// <regex>
@@ -20,16 +16,11 @@
// const basic_regex<charT, traits>& e,
// regex_constants::match_flag_type flags = regex_constants::match_default);
-// TODO: investigation needed
-// XFAIL: linux-gnu
-
#include <regex>
#include <cassert>
#include "test_macros.h"
#include "test_iterators.h"
-#include "platform_support.h" // locale name macros
-
int main(int, char**)
{
{
@@ -675,45 +666,6 @@ int main(int, char**)
assert(!std::regex_search(s, m, std::regex("[a[.hyphen.]z]")));
assert(m.size() == 0);
}
- std::locale::global(std::locale(LOCALE_cs_CZ_ISO8859_2));
- {
- std::cmatch m;
- const char s[] = "m";
- assert(std::regex_search(s, m, std::regex("[a[=M=]z]")));
- assert(m.size() == 1);
- assert(!m.prefix().matched);
- assert(m.prefix().first == s);
- assert(m.prefix().second == m[0].first);
- assert(!m.suffix().matched);
- assert(m.suffix().first == m[0].second);
- assert(m.suffix().second == m[0].second);
- assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s));
- assert(m.position(0) == 0);
- assert(m.str(0) == s);
- }
- {
- std::cmatch m;
- const char s[] = "Ch";
- assert(std::regex_search(s, m, std::regex("[a[.ch.]z]",
- std::regex_constants::icase)));
- assert(m.size() == 1);
- assert(!m.prefix().matched);
- assert(m.prefix().first == s);
- assert(m.prefix().second == m[0].first);
- assert(!m.suffix().matched);
- assert(m.suffix().first == m[0].second);
- assert(m.suffix().second == m[0].second);
- assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s));
- assert(m.position(0) == 0);
- assert(m.str(0) == s);
- }
- std::locale::global(std::locale("C"));
- {
- std::cmatch m;
- const char s[] = "m";
- assert(!std::regex_search(s, m, std::regex("[a[=M=]z]")));
- assert(m.size() == 0);
- }
{
std::cmatch m;
const char s[] = "01a45cef9";
@@ -1454,45 +1406,6 @@ int main(int, char**)
assert(!std::regex_search(s, m, std::wregex(L"[a[.hyphen.]z]")));
assert(m.size() == 0);
}
- std::locale::global(std::locale(LOCALE_cs_CZ_ISO8859_2));
- {
- std::wcmatch m;
- const wchar_t s[] = L"m";
- assert(std::regex_search(s, m, std::wregex(L"[a[=M=]z]")));
- assert(m.size() == 1);
- assert(!m.prefix().matched);
- assert(m.prefix().first == s);
- assert(m.prefix().second == m[0].first);
- assert(!m.suffix().matched);
- assert(m.suffix().first == m[0].second);
- assert(m.suffix().second == m[0].second);
- assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
- assert(m.position(0) == 0);
- assert(m.str(0) == s);
- }
- {
- std::wcmatch m;
- const wchar_t s[] = L"Ch";
- assert(std::regex_search(s, m, std::wregex(L"[a[.ch.]z]",
- std::regex_constants::icase)));
- assert(m.size() == 1);
- assert(!m.prefix().matched);
- assert(m.prefix().first == s);
- assert(m.prefix().second == m[0].first);
- assert(!m.suffix().matched);
- assert(m.suffix().first == m[0].second);
- assert(m.suffix().second == m[0].second);
- assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
- assert(m.position(0) == 0);
- assert(m.str(0) == s);
- }
- std::locale::global(std::locale("C"));
- {
- std::wcmatch m;
- const wchar_t s[] = L"m";
- assert(!std::regex_search(s, m, std::wregex(L"[a[=M=]z]")));
- assert(m.size() == 0);
- }
{
std::wcmatch m;
const wchar_t s[] = L"01a45cef9";
diff --git a/libcxx/test/std/re/re.alg/re.alg.search/extended.locale.pass.cpp b/libcxx/test/std/re/re.alg/re.alg.search/extended.locale.pass.cpp
new file mode 100644
index 000000000000..3a171f81e696
--- /dev/null
+++ b/libcxx/test/std/re/re.alg/re.alg.search/extended.locale.pass.cpp
@@ -0,0 +1,118 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// NetBSD does not support LC_COLLATE at the moment
+// XFAIL: netbsd
+
+// REQUIRES: locale.cs_CZ.ISO8859-2
+
+// <regex>
+
+// template <class BidirectionalIterator, class Allocator, class charT, class traits>
+// bool
+// regex_search(BidirectionalIterator first, BidirectionalIterator last,
+// match_results<BidirectionalIterator, Allocator>& m,
+// const basic_regex<charT, traits>& e,
+// regex_constants::match_flag_type flags = regex_constants::match_default);
+
+// TODO: investigation needed
+// XFAIL: linux-gnu, freebsd
+
+#include <regex>
+#include <cassert>
+#include "test_macros.h"
+#include "test_iterators.h"
+
+#include "platform_support.h" // locale name macros
+
+int main(int, char**)
+{
+ std::locale::global(std::locale(LOCALE_cs_CZ_ISO8859_2));
+ {
+ std::cmatch m;
+ const char s[] = "m";
+ assert(std::regex_search(s, m, std::regex("[a[=M=]z]",
+ std::regex_constants::extended)));
+ assert(m.size() == 1);
+ assert(!m.prefix().matched);
+ assert(m.prefix().first == s);
+ assert(m.prefix().second == m[0].first);
+ assert(!m.suffix().matched);
+ assert(m.suffix().first == m[0].second);
+ assert(m.suffix().second == m[0].second);
+ assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s));
+ assert(m.position(0) == 0);
+ assert(m.str(0) == s);
+ }
+ {
+ std::cmatch m;
+ const char s[] = "Ch";
+ assert(std::regex_search(s, m, std::regex("[a[.ch.]z]",
+ std::regex_constants::extended | std::regex_constants::icase)));
+ assert(m.size() == 1);
+ assert(!m.prefix().matched);
+ assert(m.prefix().first == s);
+ assert(m.prefix().second == m[0].first);
+ assert(!m.suffix().matched);
+ assert(m.suffix().first == m[0].second);
+ assert(m.suffix().second == m[0].second);
+ assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s));
+ assert(m.position(0) == 0);
+ assert(m.str(0) == s);
+ }
+ std::locale::global(std::locale("C"));
+ {
+ std::cmatch m;
+ const char s[] = "m";
+ assert(!std::regex_search(s, m, std::regex("[a[=M=]z]",
+ std::regex_constants::extended)));
+ assert(m.size() == 0);
+ }
+ std::locale::global(std::locale(LOCALE_cs_CZ_ISO8859_2));
+ {
+ std::wcmatch m;
+ const wchar_t s[] = L"m";
+ assert(std::regex_search(s, m, std::wregex(L"[a[=M=]z]",
+ std::regex_constants::extended)));
+ assert(m.size() == 1);
+ assert(!m.prefix().matched);
+ assert(m.prefix().first == s);
+ assert(m.prefix().second == m[0].first);
+ assert(!m.suffix().matched);
+ assert(m.suffix().first == m[0].second);
+ assert(m.suffix().second == m[0].second);
+ assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
+ assert(m.position(0) == 0);
+ assert(m.str(0) == s);
+ }
+ {
+ std::wcmatch m;
+ const wchar_t s[] = L"Ch";
+ assert(std::regex_search(s, m, std::wregex(L"[a[.ch.]z]",
+ std::regex_constants::extended | std::regex_constants::icase)));
+ assert(m.size() == 1);
+ assert(!m.prefix().matched);
+ assert(m.prefix().first == s);
+ assert(m.prefix().second == m[0].first);
+ assert(!m.suffix().matched);
+ assert(m.suffix().first == m[0].second);
+ assert(m.suffix().second == m[0].second);
+ assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
+ assert(m.position(0) == 0);
+ assert(m.str(0) == s);
+ }
+ std::locale::global(std::locale("C"));
+ {
+ std::wcmatch m;
+ const wchar_t s[] = L"m";
+ assert(!std::regex_search(s, m, std::wregex(L"[a[=M=]z]",
+ std::regex_constants::extended)));
+ assert(m.size() == 0);
+ }
+ return 0;
+}
diff --git a/libcxx/test/std/re/re.alg/re.alg.search/extended.pass.cpp b/libcxx/test/std/re/re.alg/re.alg.search/extended.pass.cpp
index 0bc83fc747d3..b5b7718d5768 100644
--- a/libcxx/test/std/re/re.alg/re.alg.search/extended.pass.cpp
+++ b/libcxx/test/std/re/re.alg/re.alg.search/extended.pass.cpp
@@ -6,10 +6,6 @@
//
//===----------------------------------------------------------------------===//
//
-// NetBSD does not support LC_COLLATE at the moment
-// XFAIL: netbsd
-
-// REQUIRES: locale.cs_CZ.ISO8859-2
// <regex>
@@ -20,16 +16,11 @@
// const basic_regex<charT, traits>& e,
// regex_constants::match_flag_type flags = regex_constants::match_default);
-// TODO: investigation needed
-// XFAIL: linux-gnu
-
#include <regex>
#include <cassert>
#include "test_macros.h"
#include "test_iterators.h"
-#include "platform_support.h" // locale name macros
-
int main(int, char**)
{
{
@@ -711,47 +702,6 @@ int main(int, char**)
std::regex_constants::extended)));
assert(m.size() == 0);
}
- std::locale::global(std::locale(LOCALE_cs_CZ_ISO8859_2));
- {
- std::cmatch m;
- const char s[] = "m";
- assert(std::regex_search(s, m, std::regex("[a[=M=]z]",
- std::regex_constants::extended)));
- assert(m.size() == 1);
- assert(!m.prefix().matched);
- assert(m.prefix().first == s);
- assert(m.prefix().second == m[0].first);
- assert(!m.suffix().matched);
- assert(m.suffix().first == m[0].second);
- assert(m.suffix().second == m[0].second);
- assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s));
- assert(m.position(0) == 0);
- assert(m.str(0) == s);
- }
- {
- std::cmatch m;
- const char s[] = "Ch";
- assert(std::regex_search(s, m, std::regex("[a[.ch.]z]",
- std::regex_constants::extended | std::regex_constants::icase)));
- assert(m.size() == 1);
- assert(!m.prefix().matched);
- assert(m.prefix().first == s);
- assert(m.prefix().second == m[0].first);
- assert(!m.suffix().matched);
- assert(m.suffix().first == m[0].second);
- assert(m.suffix().second == m[0].second);
- assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s));
- assert(m.position(0) == 0);
- assert(m.str(0) == s);
- }
- std::locale::global(std::locale("C"));
- {
- std::cmatch m;
- const char s[] = "m";
- assert(!std::regex_search(s, m, std::regex("[a[=M=]z]",
- std::regex_constants::extended)));
- assert(m.size() == 0);
- }
{
std::cmatch m;
const char s[] = "01a45cef9";
@@ -1485,47 +1435,6 @@ int main(int, char**)
std::regex_constants::extended)));
assert(m.size() == 0);
}
- std::locale::global(std::locale(LOCALE_cs_CZ_ISO8859_2));
- {
- std::wcmatch m;
- const wchar_t s[] = L"m";
- assert(std::regex_search(s, m, std::wregex(L"[a[=M=]z]",
- std::regex_constants::extended)));
- assert(m.size() == 1);
- assert(!m.prefix().matched);
- assert(m.prefix().first == s);
- assert(m.prefix().second == m[0].first);
- assert(!m.suffix().matched);
- assert(m.suffix().first == m[0].second);
- assert(m.suffix().second == m[0].second);
- assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
- assert(m.position(0) == 0);
- assert(m.str(0) == s);
- }
- {
- std::wcmatch m;
- const wchar_t s[] = L"Ch";
- assert(std::regex_search(s, m, std::wregex(L"[a[.ch.]z]",
- std::regex_constants::extended | std::regex_constants::icase)));
- assert(m.size() == 1);
- assert(!m.prefix().matched);
- assert(m.prefix().first == s);
- assert(m.prefix().second == m[0].first);
- assert(!m.suffix().matched);
- assert(m.suffix().first == m[0].second);
- assert(m.suffix().second == m[0].second);
- assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
- assert(m.position(0) == 0);
- assert(m.str(0) == s);
- }
- std::locale::global(std::locale("C"));
- {
- std::wcmatch m;
- const wchar_t s[] = L"m";
- assert(!std::regex_search(s, m, std::wregex(L"[a[=M=]z]",
- std::regex_constants::extended)));
- assert(m.size() == 0);
- }
{
std::wcmatch m;
const wchar_t s[] = L"01a45cef9";
diff --git a/libcxx/utils/libcxx/test/features.py b/libcxx/utils/libcxx/test/features.py
index 248e4bfbee3c..3353f00faf35 100644
--- a/libcxx/utils/libcxx/test/features.py
+++ b/libcxx/utils/libcxx/test/features.py
@@ -148,7 +148,8 @@
Feature(name='darwin', when=lambda cfg: '__APPLE__' in compilerMacros(cfg)),
Feature(name='windows', when=lambda cfg: '_WIN32' in compilerMacros(cfg)),
Feature(name='linux', when=lambda cfg: '__linux__' in compilerMacros(cfg)),
- Feature(name='netbsd', when=lambda cfg: '__NetBSD__' in compilerMacros(cfg))
+ Feature(name='netbsd', when=lambda cfg: '__NetBSD__' in compilerMacros(cfg)),
+ Feature(name='freebsd', when=lambda cfg: '__FreeBSD__' in compilerMacros(cfg))
]
More information about the libcxx-commits
mailing list