summaryrefslogtreecommitdiff
path: root/test/std/strings/basic.string/string.modifiers
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2017-04-16 16:03:23 +0000
committerDimitry Andric <dim@FreeBSD.org>2017-04-16 16:03:23 +0000
commit0dc0969cd0a732760f0aa79942a04e0eaef297c4 (patch)
tree051bdb57b1ac6ee143f61ddbb47bd0da619f6f0c /test/std/strings/basic.string/string.modifiers
parent868847c6900e575417c03bced6e562b3af891318 (diff)
Notes
Diffstat (limited to 'test/std/strings/basic.string/string.modifiers')
-rw-r--r--test/std/strings/basic.string/string.modifiers/string_append/iterator.pass.cpp16
-rw-r--r--test/std/strings/basic.string/string.modifiers/string_insert/iter_iter_iter.pass.cpp33
-rw-r--r--test/std/strings/basic.string/string.modifiers/string_replace/size_size_T_size_size.pass.cpp19
3 files changed, 58 insertions, 10 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 dac8860f9a64..b464291d4c5d 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
@@ -204,4 +204,20 @@ int main()
assert(s == "ABCD");
}
+ { // test with a move iterator that returns char&&
+ typedef forward_iterator<const char*> It;
+ typedef std::move_iterator<It> MoveIt;
+ const char p[] = "ABCD";
+ std::string s;
+ s.append(MoveIt(It(std::begin(p))), MoveIt(It(std::end(p) - 1)));
+ assert(s == "ABCD");
+ }
+ { // test with a move iterator that returns char&&
+ typedef const char* It;
+ typedef std::move_iterator<It> MoveIt;
+ const char p[] = "ABCD";
+ std::string s;
+ s.append(MoveIt(It(std::begin(p))), MoveIt(It(std::end(p) - 1)));
+ assert(s == "ABCD");
+ }
}
diff --git a/test/std/strings/basic.string/string.modifiers/string_insert/iter_iter_iter.pass.cpp b/test/std/strings/basic.string/string.modifiers/string_insert/iter_iter_iter.pass.cpp
index e5ce8e51e1d6..2c8b6e4a1882 100644
--- a/test/std/strings/basic.string/string.modifiers/string_insert/iter_iter_iter.pass.cpp
+++ b/test/std/strings/basic.string/string.modifiers/string_insert/iter_iter_iter.pass.cpp
@@ -188,10 +188,35 @@ int main()
{ // test assigning a different type
typedef std::string S;
- const uint8_t p[] = "ABCD";
+ const uint8_t p[] = "ABCD";
- S s;
- s.insert(s.begin(), p, p + 4);
- assert(s == "ABCD");
+ S s;
+ s.insert(s.begin(), p, p + 4);
+ assert(s == "ABCD");
}
+
+ { // test with a move iterator that returns char&&
+ typedef input_iterator<const char*> It;
+ typedef std::move_iterator<It> MoveIt;
+ const char p[] = "ABCD";
+ std::string s;
+ s.insert(s.begin(), MoveIt(It(std::begin(p))), MoveIt(It(std::end(p) - 1)));
+ assert(s == "ABCD");
+ }
+ { // test with a move iterator that returns char&&
+ typedef forward_iterator<const char*> It;
+ typedef std::move_iterator<It> MoveIt;
+ const char p[] = "ABCD";
+ std::string s;
+ s.insert(s.begin(), MoveIt(It(std::begin(p))), MoveIt(It(std::end(p) - 1)));
+ assert(s == "ABCD");
+ }
+ { // test with a move iterator that returns char&&
+ typedef const char* It;
+ typedef std::move_iterator<It> MoveIt;
+ const char p[] = "ABCD";
+ std::string s;
+ s.insert(s.begin(), MoveIt(It(std::begin(p))), MoveIt(It(std::end(p) - 1)));
+ assert(s == "ABCD");
+ }
}
diff --git a/test/std/strings/basic.string/string.modifiers/string_replace/size_size_T_size_size.pass.cpp b/test/std/strings/basic.string/string.modifiers/string_replace/size_size_T_size_size.pass.cpp
index 840b7614f482..dbf5f5b64446 100644
--- a/test/std/strings/basic.string/string.modifiers/string_replace/size_size_T_size_size.pass.cpp
+++ b/test/std/strings/basic.string/string.modifiers/string_replace/size_size_T_size_size.pass.cpp
@@ -29,16 +29,22 @@ test(S s, typename S::size_type pos1, typename S::size_type n1,
SV sv, typename S::size_type pos2, typename S::size_type n2,
S expected)
{
+ typedef typename S::size_type SizeT;
static_assert((!std::is_same<S, SV>::value), "");
- const typename S::size_type old_size = s.size();
+
+ // String and string_view may not always share the same size type,
+ // but both types should have the same size (ex. int vs long)
+ static_assert(sizeof(SizeT) == sizeof(typename SV::size_type), "");
+
+ const SizeT old_size = s.size();
S s0 = s;
if (pos1 <= old_size && pos2 <= sv.size())
{
s.replace(pos1, n1, sv, pos2, n2);
LIBCPP_ASSERT(s.__invariants());
assert(s == expected);
- typename S::size_type xlen = std::min(n1, old_size - pos1);
- typename S::size_type rlen = std::min(n2, sv.size() - pos2);
+ SizeT xlen = std::min<SizeT>(n1, old_size - pos1);
+ SizeT rlen = std::min<SizeT>(n2, sv.size() - pos2);
assert(s.size() == old_size - xlen + rlen);
}
#ifndef TEST_HAS_NO_EXCEPTIONS
@@ -64,16 +70,17 @@ test_npos(S s, typename S::size_type pos1, typename S::size_type n1,
SV sv, typename S::size_type pos2,
S expected)
{
+ typedef typename S::size_type SizeT;
static_assert((!std::is_same<S, SV>::value), "");
- const typename S::size_type old_size = s.size();
+ const SizeT old_size = s.size();
S s0 = s;
if (pos1 <= old_size && pos2 <= sv.size())
{
s.replace(pos1, n1, sv, pos2);
LIBCPP_ASSERT(s.__invariants());
assert(s == expected);
- typename S::size_type xlen = std::min(n1, old_size - pos1);
- typename S::size_type rlen = std::min(S::npos, sv.size() - pos2);
+ SizeT xlen = std::min<SizeT>(n1, old_size - pos1);
+ SizeT rlen = std::min<SizeT>(S::npos, sv.size() - pos2);
assert(s.size() == old_size - xlen + rlen);
}
#ifndef TEST_HAS_NO_EXCEPTIONS