From 537d90db827d1df0fef400653eefd857834ca0ba Mon Sep 17 00:00:00 2001 From: Alex Richardson Date: Wed, 20 Jan 2021 15:43:57 +0000 Subject: [PATCH] [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 --- .../re.alg/re.alg.match/awk.locale.pass.cpp | 116 +++++++++++++++++ .../std/re/re.alg/re.alg.match/awk.pass.cpp | 89 ------------- .../re.alg/re.alg.match/basic.locale.pass.cpp | 118 ++++++++++++++++++ .../std/re/re.alg/re.alg.match/basic.pass.cpp | 91 -------------- .../re.alg/re.alg.match/ecma.locale.pass.cpp | 75 +++++++++++ .../std/re/re.alg/re.alg.match/ecma.pass.cpp | 87 ------------- .../re.alg.match/extended.locale.pass.cpp | 118 ++++++++++++++++++ .../re/re.alg/re.alg.match/extended.pass.cpp | 92 -------------- .../re.alg/re.alg.search/awk.locale.pass.cpp | 118 ++++++++++++++++++ .../std/re/re.alg/re.alg.search/awk.pass.cpp | 91 -------------- .../re.alg.search/basic.locale.pass.cpp | 118 ++++++++++++++++++ .../re/re.alg/re.alg.search/basic.pass.cpp | 91 -------------- .../re.alg/re.alg.search/ecma.locale.pass.cpp | 114 +++++++++++++++++ .../std/re/re.alg/re.alg.search/ecma.pass.cpp | 87 ------------- .../re.alg.search/extended.locale.pass.cpp | 118 ++++++++++++++++++ .../re/re.alg/re.alg.search/extended.pass.cpp | 91 -------------- libcxx/utils/libcxx/test/features.py | 3 +- 17 files changed, 897 insertions(+), 720 deletions(-) create mode 100644 libcxx/test/std/re/re.alg/re.alg.match/awk.locale.pass.cpp create mode 100644 libcxx/test/std/re/re.alg/re.alg.match/basic.locale.pass.cpp create mode 100644 libcxx/test/std/re/re.alg/re.alg.match/ecma.locale.pass.cpp create mode 100644 libcxx/test/std/re/re.alg/re.alg.match/extended.locale.pass.cpp create mode 100644 libcxx/test/std/re/re.alg/re.alg.search/awk.locale.pass.cpp create mode 100644 libcxx/test/std/re/re.alg/re.alg.search/basic.locale.pass.cpp create mode 100644 libcxx/test/std/re/re.alg/re.alg.search/ecma.locale.pass.cpp create mode 100644 libcxx/test/std/re/re.alg/re.alg.search/extended.locale.pass.cpp 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 +// +//===----------------------------------------------------------------------===// + +// + +// template +// bool regex_match(BidirectionalIterator first, BidirectionalIterator last, +// match_results& m, +// const basic_regex& 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 +#include +#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::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::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::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::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 #include #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::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::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::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::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 + +// + +// template +// bool +// regex_match(BidirectionalIterator first, BidirectionalIterator last, +// match_results& m, +// const basic_regex& e, +// regex_constants::match_flag_type flags = regex_constants::match_default); + +// TODO: investigation needed +// XFAIL: linux-gnu, freebsd + +#include +#include +#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(m.length(0)) == std::char_traits::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(m.length(0)) == std::char_traits::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(m.length(0)) == std::char_traits::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(m.length(0)) == std::char_traits::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 // @@ -20,16 +16,11 @@ // const basic_regex& e, // regex_constants::match_flag_type flags = regex_constants::match_default); -// TODO: investigation needed -// XFAIL: linux-gnu - #include #include #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(m.length(0)) == std::char_traits::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(m.length(0)) == std::char_traits::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(m.length(0)) == std::char_traits::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(m.length(0)) == std::char_traits::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 + +// + +// template +// bool +// regex_match(BidirectionalIterator first, BidirectionalIterator last, +// match_results& m, +// const basic_regex& e, +// regex_constants::match_flag_type flags = regex_constants::match_default); + +// TODO: investigation needed +// XFAIL: linux-gnu, freebsd + +#include +#include +#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(m.length(0)) == std::char_traits::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(m.length(0)) == std::char_traits::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 // @@ -20,16 +16,11 @@ // const basic_regex& e, // regex_constants::match_flag_type flags = regex_constants::match_default); -// TODO: investigation needed -// XFAIL: linux-gnu - #include #include #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(m.length(0)) == std::char_traits::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(m.length(0)) == std::char_traits::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(m.length(0)) == std::char_traits::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(m.length(0)) == std::char_traits::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 + +// + +// template +// bool +// regex_match(BidirectionalIterator first, BidirectionalIterator last, +// match_results& m, +// const basic_regex& e, +// regex_constants::match_flag_type flags = regex_constants::match_default); + +// TODO: investigation needed +// XFAIL: linux-gnu, freebsd + +#include +#include +#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(m.length(0)) == std::char_traits::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(m.length(0)) == std::char_traits::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(m.length(0)) == std::char_traits::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(m.length(0)) == std::char_traits::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 - // // template @@ -20,16 +15,11 @@ // const basic_regex& e, // regex_constants::match_flag_type flags = regex_constants::match_default); -// TODO: investigation needed -// XFAIL: linux-gnu - #include #include #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(m.length(0)) == std::char_traits::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(m.length(0)) == std::char_traits::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(m.length(0)) == std::char_traits::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(m.length(0)) == std::char_traits::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 + +// + +// template +// bool +// regex_search(BidirectionalIterator first, BidirectionalIterator last, +// match_results& m, +// const basic_regex& e, +// regex_constants::match_flag_type flags = regex_constants::match_default); + +// TODO: investigation needed +// XFAIL: linux-gnu, freebsd + +#include +#include +#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(m.length(0)) == std::char_traits::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(m.length(0)) == std::char_traits::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(m.length(0)) == std::char_traits::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(m.length(0)) == std::char_traits::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 // @@ -20,16 +16,11 @@ // const basic_regex& e, // regex_constants::match_flag_type flags = regex_constants::match_default); -// TODO: investigation needed -// XFAIL: linux-gnu - #include #include #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(m.length(0)) == std::char_traits::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(m.length(0)) == std::char_traits::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(m.length(0)) == std::char_traits::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(m.length(0)) == std::char_traits::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 + +// + +// template +// bool +// regex_search(BidirectionalIterator first, BidirectionalIterator last, +// match_results& m, +// const basic_regex& e, +// regex_constants::match_flag_type flags = regex_constants::match_default); + +// TODO: investigation needed +// XFAIL: linux-gnu, freebsd + +#include +#include +#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(m.length(0)) == std::char_traits::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(m.length(0)) == std::char_traits::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(m.length(0)) == std::char_traits::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(m.length(0)) == std::char_traits::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 // @@ -20,16 +16,11 @@ // const basic_regex& e, // regex_constants::match_flag_type flags = regex_constants::match_default); -// TODO: investigation needed -// XFAIL: linux-gnu - #include #include #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(m.length(0)) == std::char_traits::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(m.length(0)) == std::char_traits::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(m.length(0)) == std::char_traits::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(m.length(0)) == std::char_traits::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 + +// + +// template +// bool +// regex_search(BidirectionalIterator first, BidirectionalIterator last, +// match_results& m, +// const basic_regex& e, +// regex_constants::match_flag_type flags = regex_constants::match_default); + +// TODO: investigation needed +// XFAIL: linux-gnu, freebsd + +#include +#include +#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(m.length(0)) == std::char_traits::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(m.length(0)) == std::char_traits::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(m.length(0)) == std::char_traits::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(m.length(0)) == std::char_traits::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 // @@ -20,16 +16,11 @@ // const basic_regex& e, // regex_constants::match_flag_type flags = regex_constants::match_default); -// TODO: investigation needed -// XFAIL: linux-gnu - #include #include #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(m.length(0)) == std::char_traits::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(m.length(0)) == std::char_traits::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(m.length(0)) == std::char_traits::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(m.length(0)) == std::char_traits::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 + +// + +// template +// bool +// regex_search(BidirectionalIterator first, BidirectionalIterator last, +// match_results& m, +// const basic_regex& e, +// regex_constants::match_flag_type flags = regex_constants::match_default); + +// TODO: investigation needed +// XFAIL: linux-gnu, freebsd + +#include +#include +#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(m.length(0)) == std::char_traits::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(m.length(0)) == std::char_traits::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(m.length(0)) == std::char_traits::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(m.length(0)) == std::char_traits::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 // @@ -20,16 +16,11 @@ // const basic_regex& e, // regex_constants::match_flag_type flags = regex_constants::match_default); -// TODO: investigation needed -// XFAIL: linux-gnu - #include #include #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(m.length(0)) == std::char_traits::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(m.length(0)) == std::char_traits::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(m.length(0)) == std::char_traits::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(m.length(0)) == std::char_traits::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 @@ DEFAULT_FEATURES += [ 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)) ]