diff options
Diffstat (limited to 'test/std/strings/basic.string/string.modifiers/string_append')
4 files changed, 66 insertions, 50 deletions
diff --git a/test/std/strings/basic.string/string.modifiers/string_append/iterator.pass.cpp b/test/std/strings/basic.string/string.modifiers/string_append/iterator.pass.cpp index b464291d4c5dc..7ed55403927ea 100644 --- a/test/std/strings/basic.string/string.modifiers/string_append/iterator.pass.cpp +++ b/test/std/strings/basic.string/string.modifiers/string_append/iterator.pass.cpp @@ -32,11 +32,11 @@ template <class S, class It> void test_exceptions(S s, It first, It last) { - S aCopy = s; + S aCopy = s; try { - s.append(first, last); - assert(false); - } + s.append(first, last); + assert(false); + } catch (...) {} LIBCPP_ASSERT(s.__invariants()); assert(s == aCopy); @@ -164,7 +164,7 @@ int main() } #endif #ifndef TEST_HAS_NO_EXCEPTIONS - { // test iterator operations that throw + { // test iterator operations that throw typedef std::string S; typedef ThrowingIterator<char> TIter; typedef input_iterator<TIter> IIter; @@ -176,33 +176,33 @@ int main() test_exceptions(S(), TIter(s, s+10, 4, TIter::TAIncrement), TIter()); test_exceptions(S(), TIter(s, s+10, 5, TIter::TADereference), TIter()); test_exceptions(S(), TIter(s, s+10, 6, TIter::TAComparison), TIter()); - } + } #endif - { // test appending to self + { // test appending to self typedef std::string S; - S s_short = "123/"; - S s_long = "Lorem ipsum dolor sit amet, consectetur/"; - - s_short.append(s_short.begin(), s_short.end()); - assert(s_short == "123/123/"); - s_short.append(s_short.begin(), s_short.end()); - assert(s_short == "123/123/123/123/"); - s_short.append(s_short.begin(), s_short.end()); - assert(s_short == "123/123/123/123/123/123/123/123/"); - - s_long.append(s_long.begin(), s_long.end()); - assert(s_long == "Lorem ipsum dolor sit amet, consectetur/Lorem ipsum dolor sit amet, consectetur/"); - } + S s_short = "123/"; + S s_long = "Lorem ipsum dolor sit amet, consectetur/"; + + s_short.append(s_short.begin(), s_short.end()); + assert(s_short == "123/123/"); + s_short.append(s_short.begin(), s_short.end()); + assert(s_short == "123/123/123/123/"); + s_short.append(s_short.begin(), s_short.end()); + assert(s_short == "123/123/123/123/123/123/123/123/"); + + s_long.append(s_long.begin(), s_long.end()); + assert(s_long == "Lorem ipsum dolor sit amet, consectetur/Lorem ipsum dolor sit amet, consectetur/"); + } - { // test appending a different type + { // test appending a different type typedef std::string S; - const uint8_t p[] = "ABCD"; + const uint8_t p[] = "ABCD"; - S s; - s.append(p, p + 4); - assert(s == "ABCD"); - } + S s; + s.append(p, p + 4); + assert(s == "ABCD"); + } { // test with a move iterator that returns char&& typedef forward_iterator<const char*> It; diff --git a/test/std/strings/basic.string/string.modifiers/string_append/pointer.pass.cpp b/test/std/strings/basic.string/string.modifiers/string_append/pointer.pass.cpp index eb552ca839283..823905df4a149 100644 --- a/test/std/strings/basic.string/string.modifiers/string_append/pointer.pass.cpp +++ b/test/std/strings/basic.string/string.modifiers/string_append/pointer.pass.cpp @@ -62,19 +62,19 @@ int main() } #endif - { // test appending to self + { // test appending to self typedef std::string S; - S s_short = "123/"; - S s_long = "Lorem ipsum dolor sit amet, consectetur/"; + S s_short = "123/"; + S s_long = "Lorem ipsum dolor sit amet, consectetur/"; - s_short.append(s_short.c_str()); - assert(s_short == "123/123/"); - s_short.append(s_short.c_str()); - assert(s_short == "123/123/123/123/"); - s_short.append(s_short.c_str()); - assert(s_short == "123/123/123/123/123/123/123/123/"); + s_short.append(s_short.c_str()); + assert(s_short == "123/123/"); + s_short.append(s_short.c_str()); + assert(s_short == "123/123/123/123/"); + s_short.append(s_short.c_str()); + assert(s_short == "123/123/123/123/123/123/123/123/"); - s_long.append(s_long.c_str()); - assert(s_long == "Lorem ipsum dolor sit amet, consectetur/Lorem ipsum dolor sit amet, consectetur/"); - } + s_long.append(s_long.c_str()); + assert(s_long == "Lorem ipsum dolor sit amet, consectetur/Lorem ipsum dolor sit amet, consectetur/"); + } } diff --git a/test/std/strings/basic.string/string.modifiers/string_append/pointer_size.pass.cpp b/test/std/strings/basic.string/string.modifiers/string_append/pointer_size.pass.cpp index fc80d7cccce6e..f09ec682e9f93 100644 --- a/test/std/strings/basic.string/string.modifiers/string_append/pointer_size.pass.cpp +++ b/test/std/strings/basic.string/string.modifiers/string_append/pointer_size.pass.cpp @@ -71,19 +71,19 @@ int main() } #endif - { // test appending to self + { // test appending to self typedef std::string S; - S s_short = "123/"; - S s_long = "Lorem ipsum dolor sit amet, consectetur/"; + S s_short = "123/"; + S s_long = "Lorem ipsum dolor sit amet, consectetur/"; - s_short.append(s_short.data(), s_short.size()); - assert(s_short == "123/123/"); - s_short.append(s_short.data(), s_short.size()); - assert(s_short == "123/123/123/123/"); - s_short.append(s_short.data(), s_short.size()); - assert(s_short == "123/123/123/123/123/123/123/123/"); + s_short.append(s_short.data(), s_short.size()); + assert(s_short == "123/123/"); + s_short.append(s_short.data(), s_short.size()); + assert(s_short == "123/123/123/123/"); + s_short.append(s_short.data(), s_short.size()); + assert(s_short == "123/123/123/123/123/123/123/123/"); - s_long.append(s_long.data(), s_long.size()); - assert(s_long == "Lorem ipsum dolor sit amet, consectetur/Lorem ipsum dolor sit amet, consectetur/"); - } + s_long.append(s_long.data(), s_long.size()); + assert(s_long == "Lorem ipsum dolor sit amet, consectetur/Lorem ipsum dolor sit amet, consectetur/"); + } } diff --git a/test/std/strings/basic.string/string.modifiers/string_append/push_back.pass.cpp b/test/std/strings/basic.string/string.modifiers/string_append/push_back.pass.cpp index f2fb8782a21da..5ca5aaf8629c4 100644 --- a/test/std/strings/basic.string/string.modifiers/string_append/push_back.pass.cpp +++ b/test/std/strings/basic.string/string.modifiers/string_append/push_back.pass.cpp @@ -17,6 +17,12 @@ #include "test_macros.h" #include "min_allocator.h" +struct veryLarge +{ + long long a; + char b; +}; + template <class S> void test(S s, typename S::value_type c, S expected) @@ -42,4 +48,14 @@ int main() test(S("12345678901234567890"), 'a', S("12345678901234567890a")); } #endif +#if 0 + { +// https://bugs.llvm.org/show_bug.cgi?id=31454 + std::basic_string<veryLarge> s; + veryLarge vl; + s.push_back(vl); + s.push_back(vl); + s.push_back(vl); + } +#endif } |
