diff options
| author | Arthur O'Dwyer <arthur.j.odwyer@gmail.com> | 2021-04-16 17:31:33 -0400 |
|---|---|---|
| committer | Arthur O'Dwyer <arthur.j.odwyer@gmail.com> | 2021-04-26 16:22:43 -0400 |
| commit | 036b80fcbbccee8199851158fd349230aa77d75e (patch) | |
| tree | 05f4a56b399ac320a8cfe57d13b18f4c55562cdc /libcxx/test/std/strings/basic.string/string.modifiers/string_insert | |
| parent | e87479b00fcc852a54b79d2fd7f8d779e2b75f68 (diff) | |
[libc++] [test] Improve test_exceptions() in each string.modifiers test.
When checking the strong exception guarantee, also check that
iterators haven't been invalidated.
Reviewed as part of https://reviews.llvm.org/D98573
Diffstat (limited to 'libcxx/test/std/strings/basic.string/string.modifiers/string_insert')
| -rw-r--r-- | libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_iter_iter.pass.cpp | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_iter_iter.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_iter_iter.pass.cpp index 471e3019ffce..d86da1cacc87 100644 --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_iter_iter.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_iter_iter.pass.cpp @@ -37,14 +37,22 @@ void test_exceptions(S s, typename S::difference_type pos, It first, It last) { typename S::const_iterator p = s.cbegin() + pos; - S aCopy = s; + + S original = s; + typename S::iterator begin = s.begin(); + typename S::iterator end = s.end(); + try { s.insert(p, first, last); assert(false); - } - catch (...) {} + } catch (...) {} + + // Part of "no effects" is that iterators and pointers + // into the string must not have been invalidated. LIBCPP_ASSERT(s.__invariants()); - assert(s == aCopy); + assert(s == original); + assert(s.begin() == begin); + assert(s.end() == end); } #endif |
