Fix tests that fail with _GLIBCXX_USE_CXX11_ABI=0
The pmr::string typedef isn't available for the old COW string, so some tests that use it were failing. * testsuite/20_util/variant/run.cc: Use a new Hashable type to test hashing, because pmr::string depends on _GLIBCXX_USE_CXX11_ABI==1. * testsuite/21_strings/basic_string/hash/hash.cc [!_GLIBCXX_USE_CXX11_ABI]: Don't test pmr strings. * testsuite/21_strings/basic_string/hash/hash_char8_t.cc [!_GLIBCXX_USE_CXX11_ABI]: Likewise. From-SVN: r270604
This commit is contained in:
parent
69dad6faf9
commit
53e6927367
|
@ -1,5 +1,12 @@
|
||||||
2019-04-26 Jonathan Wakely <jwakely@redhat.com>
|
2019-04-26 Jonathan Wakely <jwakely@redhat.com>
|
||||||
|
|
||||||
|
* testsuite/20_util/variant/run.cc: Use a new Hashable type to test
|
||||||
|
hashing, because pmr::string depends on _GLIBCXX_USE_CXX11_ABI==1.
|
||||||
|
* testsuite/21_strings/basic_string/hash/hash.cc
|
||||||
|
[!_GLIBCXX_USE_CXX11_ABI]: Don't test pmr strings.
|
||||||
|
* testsuite/21_strings/basic_string/hash/hash_char8_t.cc
|
||||||
|
[!_GLIBCXX_USE_CXX11_ABI]: Likewise.
|
||||||
|
|
||||||
* config/abi/pre/gnu.ver (GLIBCXX_3.4): Replace wildcard that matches
|
* config/abi/pre/gnu.ver (GLIBCXX_3.4): Replace wildcard that matches
|
||||||
wstring::_M_replace_dispatch with more specific patterns.
|
wstring::_M_replace_dispatch with more specific patterns.
|
||||||
* include/bits/fs_path.h (path::_S_convert_loc<_InputIterator>):
|
* include/bits/fs_path.h (path::_S_convert_loc<_InputIterator>):
|
||||||
|
|
|
@ -22,7 +22,6 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <unordered_set>
|
#include <unordered_set>
|
||||||
#include <memory_resource>
|
|
||||||
#include <ext/throw_allocator.h>
|
#include <ext/throw_allocator.h>
|
||||||
#include <testsuite_hooks.h>
|
#include <testsuite_hooks.h>
|
||||||
|
|
||||||
|
@ -433,9 +432,30 @@ void test_visit()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct Hashable
|
||||||
|
{
|
||||||
|
Hashable(const char* s) : s(s) { }
|
||||||
|
// Non-trivial special member functions:
|
||||||
|
Hashable(const Hashable&) { }
|
||||||
|
Hashable(Hashable&&) noexcept { }
|
||||||
|
~Hashable() { }
|
||||||
|
|
||||||
|
string s;
|
||||||
|
|
||||||
|
bool operator==(const Hashable& rhs) const noexcept
|
||||||
|
{ return s == rhs.s; }
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace std {
|
||||||
|
template<> struct hash<Hashable> {
|
||||||
|
size_t operator()(const Hashable& h) const noexcept
|
||||||
|
{ return hash<std::string>()(h.s); }
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
void test_hash()
|
void test_hash()
|
||||||
{
|
{
|
||||||
unordered_set<variant<int, pmr::string>> s;
|
unordered_set<variant<int, Hashable>> s;
|
||||||
VERIFY(s.emplace(3).second);
|
VERIFY(s.emplace(3).second);
|
||||||
VERIFY(s.emplace("asdf").second);
|
VERIFY(s.emplace("asdf").second);
|
||||||
VERIFY(s.emplace().second);
|
VERIFY(s.emplace().second);
|
||||||
|
@ -447,12 +467,12 @@ void test_hash()
|
||||||
{
|
{
|
||||||
struct A
|
struct A
|
||||||
{
|
{
|
||||||
operator pmr::string()
|
operator Hashable()
|
||||||
{
|
{
|
||||||
throw nullptr;
|
throw nullptr;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
variant<int, pmr::string> v;
|
variant<int, Hashable> v;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
v.emplace<1>(A{});
|
v.emplace<1>(A{});
|
||||||
|
|
|
@ -39,19 +39,29 @@ void
|
||||||
test01()
|
test01()
|
||||||
{
|
{
|
||||||
VERIFY( test(std::string("a narrow string")) );
|
VERIFY( test(std::string("a narrow string")) );
|
||||||
VERIFY( test(std::pmr::string("a narrow string, but with PMR!")) );
|
|
||||||
VERIFY( test(std::u16string(u"a utf-16 string")) );
|
VERIFY( test(std::u16string(u"a utf-16 string")) );
|
||||||
VERIFY( test(std::pmr::u16string(u"a utf-16 string, but with PMR!")) );
|
|
||||||
VERIFY( test(std::u32string(U"a utf-32 string")) );
|
VERIFY( test(std::u32string(U"a utf-32 string")) );
|
||||||
VERIFY( test(std::pmr::u32string(U"a utf-32 string, but with PMR!")) );
|
|
||||||
#if _GLIBCXX_USE_WCHAR_T
|
#if _GLIBCXX_USE_WCHAR_T
|
||||||
VERIFY( test(std::wstring(L"a wide string")) );
|
VERIFY( test(std::wstring(L"a wide string")) );
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
test02()
|
||||||
|
{
|
||||||
|
#if _GLIBCXX_USE_CXX11_ABI
|
||||||
|
VERIFY( test(std::pmr::string("a narrow string, but with PMR!")) );
|
||||||
|
VERIFY( test(std::pmr::u16string(u"a utf-16 string, but with PMR!")) );
|
||||||
|
VERIFY( test(std::pmr::u32string(U"a utf-32 string, but with PMR!")) );
|
||||||
|
#if _GLIBCXX_USE_WCHAR_T
|
||||||
VERIFY( test(std::pmr::wstring(L"a wide string, but with PMR!")) );
|
VERIFY( test(std::pmr::wstring(L"a wide string, but with PMR!")) );
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
test01();
|
test01();
|
||||||
|
test02();
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,9 +39,11 @@ void
|
||||||
test01()
|
test01()
|
||||||
{
|
{
|
||||||
VERIFY( test(std::string("a narrow string")) );
|
VERIFY( test(std::string("a narrow string")) );
|
||||||
VERIFY( test(std::pmr::string("a narrow string, but with PMR!")) );
|
|
||||||
VERIFY( test(std::u8string(u8"a utf-8 string")) );
|
VERIFY( test(std::u8string(u8"a utf-8 string")) );
|
||||||
|
#if _GLIBCXX_USE_CXX11_ABI
|
||||||
|
VERIFY( test(std::pmr::string("a narrow string, but with PMR!")) );
|
||||||
VERIFY( test(std::pmr::u8string(u8"a utf-8 string, but with PMR!")) );
|
VERIFY( test(std::pmr::u8string(u8"a utf-8 string, but with PMR!")) );
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
Loading…
Reference in New Issue