diff options
| author | Marshall Clow <mclow.lists@gmail.com> | 2014-03-04 19:17:19 +0000 |
|---|---|---|
| committer | Marshall Clow <mclow.lists@gmail.com> | 2014-03-04 19:17:19 +0000 |
| commit | 53b88dad6f5e54ad443ef428b1e1dfcea8f7f3d9 (patch) | |
| tree | 33715cefc61657271056321c505d163f1f83775f /libcxx/test/strings/basic.string/string.modifiers/string_insert | |
| parent | 5aa88fe1e7baf087dbff0f8b6dbd517832576fec (diff) | |
| download | bcm5719-llvm-53b88dad6f5e54ad443ef428b1e1dfcea8f7f3d9.tar.gz bcm5719-llvm-53b88dad6f5e54ad443ef428b1e1dfcea8f7f3d9.zip | |
Implement LWG #2268: Setting a default argument in the declaration of a member function assign of std::basic_string.
llvm-svn: 202876
Diffstat (limited to 'libcxx/test/strings/basic.string/string.modifiers/string_insert')
| -rw-r--r-- | libcxx/test/strings/basic.string/string.modifiers/string_insert/size_string_size_size.pass.cpp | 43 |
1 files changed, 42 insertions, 1 deletions
diff --git a/libcxx/test/strings/basic.string/string.modifiers/string_insert/size_string_size_size.pass.cpp b/libcxx/test/strings/basic.string/string.modifiers/string_insert/size_string_size_size.pass.cpp index b7317a32b41..51c9e72fc56 100644 --- a/libcxx/test/strings/basic.string/string.modifiers/string_insert/size_string_size_size.pass.cpp +++ b/libcxx/test/strings/basic.string/string.modifiers/string_insert/size_string_size_size.pass.cpp @@ -11,7 +11,8 @@ // basic_string<charT,traits,Allocator>& // insert(size_type pos1, const basic_string<charT,traits,Allocator>& str, -// size_type pos2, size_type n); +// size_type pos2, size_type n=npos); +// the "=npos" was added in C++14 #include <string> #include <stdexcept> @@ -41,6 +42,27 @@ test(S s, typename S::size_type pos1, S str, typename S::size_type pos2, } template <class S> +void +test_npos(S s, typename S::size_type pos1, S str, typename S::size_type pos2, S expected) +{ + typename S::size_type old_size = s.size(); + S s0 = s; + try + { + s.insert(pos1, str, pos2); + assert(s.__invariants()); + assert(pos1 <= old_size && pos2 <= str.size()); + assert(s == expected); + } + catch (std::out_of_range&) + { + assert(pos1 > old_size || pos2 > str.size()); + assert(s == s0); + } +} + + +template <class S> void test0() { test(S(""), 0, S(""), 0, 0, S("")); @@ -1670,6 +1692,23 @@ void test29() test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 21, 0, S("can't happen")); } +template <class S> +void test30() +{ + test_npos(S(""), 0, S("12345678901234567890"), 0, S("12345678901234567890")); + test_npos(S(""), 0, S("12345678901234567890"), 1, S( "2345678901234567890")); + test_npos(S(""), 0, S("12345678901234567890"), 2, S( "345678901234567890")); + test_npos(S(""), 0, S("12345678901234567890"), 3, S( "45678901234567890")); + test_npos(S(""), 0, S("12345678901234567890"), 5, S( "678901234567890")); + test_npos(S(""), 0, S("12345678901234567890"), 10, S( "1234567890")); + test_npos(S(""), 0, S("12345678901234567890"), 21, S("can't happen")); + test_npos(S("abcdefghijklmnopqrst"), 10, S("12345"), 0, S("abcdefghij12345klmnopqrst")); + test_npos(S("abcdefghijklmnopqrst"), 10, S("12345"), 1, S("abcdefghij2345klmnopqrst")); + test_npos(S("abcdefghijklmnopqrst"), 10, S("12345"), 3, S("abcdefghij45klmnopqrst")); + test_npos(S("abcdefghijklmnopqrst"), 10, S("12345"), 5, S("abcdefghijklmnopqrst")); + test_npos(S("abcdefghijklmnopqrst"), 10, S("12345"), 6, S("can't happen")); +} + int main() { { @@ -1704,6 +1743,7 @@ int main() test27<S>(); test28<S>(); test29<S>(); + test30<S>(); } #if __cplusplus >= 201103L { @@ -1738,6 +1778,7 @@ int main() test27<S>(); test28<S>(); test29<S>(); + test30<S>(); } #endif } |

