From 51072bd6bf79ef2bc6a922079bff57c31c1effbc Mon Sep 17 00:00:00 2001 From: Dimitry Andric Date: Sat, 23 Jul 2016 20:47:26 +0000 Subject: Vendor import of libc++ release_39 branch r276489: https://llvm.org/svn/llvm-project/libcxx/branches/release_39@276489 --- .../string.modifiers/string_assign/string.pass.cpp | 36 ++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) (limited to 'test/std/strings/basic.string/string.modifiers/string_assign/string.pass.cpp') diff --git a/test/std/strings/basic.string/string.modifiers/string_assign/string.pass.cpp b/test/std/strings/basic.string/string.modifiers/string_assign/string.pass.cpp index 2bc5dd223e62f..788512ba3d3e8 100644 --- a/test/std/strings/basic.string/string.modifiers/string_assign/string.pass.cpp +++ b/test/std/strings/basic.string/string.modifiers/string_assign/string.pass.cpp @@ -15,17 +15,29 @@ #include #include +#include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template void test(S s, S str, S expected) { s.assign(str); - assert(s.__invariants()); + LIBCPP_ASSERT(s.__invariants()); assert(s == expected); } +template +void +testAlloc(S s, S str, const typename S::allocator_type& a) +{ + s.assign(str); + LIBCPP_ASSERT(s.__invariants()); + assert(s == str); + assert(s.get_allocator() == a); +} + int main() { { @@ -50,7 +62,22 @@ int main() test(S("12345678901234567890"), S("1234567890"), S("1234567890")); test(S("12345678901234567890"), S("12345678901234567890"), S("12345678901234567890")); + + testAlloc(S(), S(), std::allocator()); + testAlloc(S(), S("12345"), std::allocator()); + testAlloc(S(), S("1234567890"), std::allocator()); + testAlloc(S(), S("12345678901234567890"), std::allocator()); + } + + { // LWG#5579 make sure assign takes the allocators where appropriate + typedef other_allocator A; // has POCCA --> true + typedef std::basic_string, A> S; + testAlloc(S(A(5)), S(A(3)), A(3)); + testAlloc(S(A(5)), S("1"), A()); + testAlloc(S(A(5)), S("1", A(7)), A(7)); + testAlloc(S(A(5)), S("1234567890123456789012345678901234567890123456789012345678901234567890", A(7)), A(7)); } + #if TEST_STD_VER >= 11 { typedef std::basic_string, min_allocator> S; @@ -74,9 +101,14 @@ int main() test(S("12345678901234567890"), S("1234567890"), S("1234567890")); test(S("12345678901234567890"), S("12345678901234567890"), S("12345678901234567890")); + + testAlloc(S(), S(), min_allocator()); + testAlloc(S(), S("12345"), min_allocator()); + testAlloc(S(), S("1234567890"), min_allocator()); + testAlloc(S(), S("12345678901234567890"), min_allocator()); } #endif -#if __cplusplus > 201402L +#if TEST_STD_VER > 14 { typedef std::string S; static_assert(noexcept(S().assign(S())), ""); // LWG#2063 -- cgit v1.2.3