summaryrefslogtreecommitdiffstats
path: root/libcxx/test/std/strings/basic.string/string.modifiers/string_assign
diff options
context:
space:
mode:
authorMarshall Clow <mclow.lists@gmail.com>2016-09-05 01:54:30 +0000
committerMarshall Clow <mclow.lists@gmail.com>2016-09-05 01:54:30 +0000
commit7e1a23001d68893ee10d68e8664021a00fa0bb2c (patch)
treec7483c76c95ae7d44c39f7093522ae8174c92411 /libcxx/test/std/strings/basic.string/string.modifiers/string_assign
parente9dd46f4d0863e8bc9fa55357dd4d3adf563afa0 (diff)
downloadbcm5719-llvm-7e1a23001d68893ee10d68e8664021a00fa0bb2c.tar.gz
bcm5719-llvm-7e1a23001d68893ee10d68e8664021a00fa0bb2c.zip
Fix Bug 30240 - std::string: append(first, last) error when aliasing. Add test cases for append/insert/assign/replace while we're at it, and fix a similar bug in insert.
llvm-svn: 280643
Diffstat (limited to 'libcxx/test/std/strings/basic.string/string.modifiers/string_assign')
-rw-r--r--libcxx/test/std/strings/basic.string/string.modifiers/string_assign/iterator.pass.cpp17
-rw-r--r--libcxx/test/std/strings/basic.string/string.modifiers/string_assign/pointer.pass.cpp14
-rw-r--r--libcxx/test/std/strings/basic.string/string.modifiers/string_assign/pointer_size.pass.cpp16
3 files changed, 47 insertions, 0 deletions
diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/iterator.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/iterator.pass.cpp
index e6a57519f34..0d3dac74308 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/iterator.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/iterator.pass.cpp
@@ -179,4 +179,21 @@ int main()
test_exceptions(S(), TIter(s, s+10, 6, TIter::TAComparison), TIter());
}
#endif
+
+ { // test assigning to self
+ typedef std::string S;
+ S s_short = "123/";
+ S s_long = "Lorem ipsum dolor sit amet, consectetur/";
+
+ s_short.assign(s_short.begin(), s_short.end());
+ assert(s_short == "123/");
+ s_short.assign(s_short.begin() + 2, s_short.end());
+ assert(s_short == "3/");
+
+ s_long.assign(s_long.begin(), s_long.end());
+ assert(s_long == "Lorem ipsum dolor sit amet, consectetur/");
+
+ s_long.assign(s_long.begin() + 30, s_long.end());
+ assert(s_long == "nsectetur/");
+ }
}
diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/pointer.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/pointer.pass.cpp
index 386dee6d580..1a509e742e2 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/pointer.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/pointer.pass.cpp
@@ -61,4 +61,18 @@ int main()
S("12345678901234567890"));
}
#endif
+
+ { // test assignment to self
+ typedef std::string S;
+ S s_short = "123/";
+ S s_long = "Lorem ipsum dolor sit amet, consectetur/";
+
+ s_short.assign(s_short.c_str());
+ assert(s_short == "123/");
+ s_short.assign(s_short.c_str() + 2);
+ assert(s_short == "3/");
+
+ s_long.assign(s_long.c_str() + 30);
+ assert(s_long == "nsectetur/");
+ }
}
diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/pointer_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/pointer_size.pass.cpp
index 0eeb9266f40..b657127d3c0 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/pointer_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/pointer_size.pass.cpp
@@ -70,4 +70,20 @@ int main()
S("12345678901234567890"));
}
#endif
+ { // test assign to self
+ typedef std::string S;
+ S s_short = "123/";
+ S s_long = "Lorem ipsum dolor sit amet, consectetur/";
+
+ s_short.assign(s_short.data(), s_short.size());
+ assert(s_short == "123/");
+ s_short.assign(s_short.data() + 2, s_short.size() - 2);
+ assert(s_short == "3/");
+
+ s_long.assign(s_long.data(), s_long.size());
+ assert(s_long == "Lorem ipsum dolor sit amet, consectetur/");
+
+ s_long.assign(s_long.data() + 2, 8 );
+ assert(s_long == "rem ipsu");
+ }
}
OpenPOWER on IntegriCloud