[PowerPC][NFC] Cleanup PPCCTRLoopsVerify pass
[llvm-project.git] / libcxx / test / std / strings / basic.string / string.modifiers / string_assign / iterator.pass.cpp
blobc03b5efdfd57779519b6b552908a5bd79e6635e9
1 //===----------------------------------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
9 // <string>
11 // template<class InputIterator>
12 // basic_string& assign(InputIterator first, InputIterator last);
14 #include <string>
15 #include <cassert>
17 #include "test_macros.h"
18 #include "test_iterators.h"
19 #include "min_allocator.h"
21 template <class S, class It>
22 void
23 test(S s, It first, It last, S expected)
25 s.assign(first, last);
26 LIBCPP_ASSERT(s.__invariants());
27 assert(s == expected);
30 #ifndef TEST_HAS_NO_EXCEPTIONS
31 template <class S, class It>
32 void
33 test_exceptions(S s, It first, It last)
35 S aCopy = s;
36 try {
37 s.assign(first, last);
38 assert(false);
40 catch (...) {}
41 LIBCPP_ASSERT(s.__invariants());
42 assert(s == aCopy);
44 #endif
46 int main(int, char**)
49 typedef std::string S;
50 const char* s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
51 test(S(), s, s, S());
52 test(S(), s, s+1, S("A"));
53 test(S(), s, s+10, S("ABCDEFGHIJ"));
54 test(S(), s, s+52, S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
56 test(S("12345"), s, s, S());
57 test(S("12345"), s, s+1, S("A"));
58 test(S("12345"), s, s+10, S("ABCDEFGHIJ"));
59 test(S("12345"), s, s+52, S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
61 test(S("1234567890"), s, s, S());
62 test(S("1234567890"), s, s+1, S("A"));
63 test(S("1234567890"), s, s+10, S("ABCDEFGHIJ"));
64 test(S("1234567890"), s, s+52, S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
66 test(S("12345678901234567890"), s, s, S());
67 test(S("12345678901234567890"), s, s+1, S("A"));
68 test(S("12345678901234567890"), s, s+10, S("ABCDEFGHIJ"));
69 test(S("12345678901234567890"), s, s+52,
70 S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
72 test(S(), input_iterator<const char*>(s), input_iterator<const char*>(s), S());
73 test(S(), input_iterator<const char*>(s), input_iterator<const char*>(s+1), S("A"));
74 test(S(), input_iterator<const char*>(s), input_iterator<const char*>(s+10),
75 S("ABCDEFGHIJ"));
76 test(S(), input_iterator<const char*>(s), input_iterator<const char*>(s+52),
77 S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
79 test(S("12345"), input_iterator<const char*>(s), input_iterator<const char*>(s),
80 S());
81 test(S("12345"), input_iterator<const char*>(s), input_iterator<const char*>(s+1),
82 S("A"));
83 test(S("12345"), input_iterator<const char*>(s), input_iterator<const char*>(s+10),
84 S("ABCDEFGHIJ"));
85 test(S("12345"), input_iterator<const char*>(s), input_iterator<const char*>(s+52),
86 S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
88 test(S("1234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s),
89 S());
90 test(S("1234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s+1),
91 S("A"));
92 test(S("1234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s+10),
93 S("ABCDEFGHIJ"));
94 test(S("1234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s+52),
95 S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
97 test(S("12345678901234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s),
98 S());
99 test(S("12345678901234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s+1),
100 S("A"));
101 test(S("12345678901234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s+10),
102 S("ABCDEFGHIJ"));
103 test(S("12345678901234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s+52),
104 S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
106 #if TEST_STD_VER >= 11
108 typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
109 const char* s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
110 test(S(), s, s, S());
111 test(S(), s, s+1, S("A"));
112 test(S(), s, s+10, S("ABCDEFGHIJ"));
113 test(S(), s, s+52, S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
115 test(S("12345"), s, s, S());
116 test(S("12345"), s, s+1, S("A"));
117 test(S("12345"), s, s+10, S("ABCDEFGHIJ"));
118 test(S("12345"), s, s+52, S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
120 test(S("1234567890"), s, s, S());
121 test(S("1234567890"), s, s+1, S("A"));
122 test(S("1234567890"), s, s+10, S("ABCDEFGHIJ"));
123 test(S("1234567890"), s, s+52, S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
125 test(S("12345678901234567890"), s, s, S());
126 test(S("12345678901234567890"), s, s+1, S("A"));
127 test(S("12345678901234567890"), s, s+10, S("ABCDEFGHIJ"));
128 test(S("12345678901234567890"), s, s+52,
129 S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
131 test(S(), input_iterator<const char*>(s), input_iterator<const char*>(s), S());
132 test(S(), input_iterator<const char*>(s), input_iterator<const char*>(s+1), S("A"));
133 test(S(), input_iterator<const char*>(s), input_iterator<const char*>(s+10),
134 S("ABCDEFGHIJ"));
135 test(S(), input_iterator<const char*>(s), input_iterator<const char*>(s+52),
136 S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
138 test(S("12345"), input_iterator<const char*>(s), input_iterator<const char*>(s),
139 S());
140 test(S("12345"), input_iterator<const char*>(s), input_iterator<const char*>(s+1),
141 S("A"));
142 test(S("12345"), input_iterator<const char*>(s), input_iterator<const char*>(s+10),
143 S("ABCDEFGHIJ"));
144 test(S("12345"), input_iterator<const char*>(s), input_iterator<const char*>(s+52),
145 S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
147 test(S("1234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s),
148 S());
149 test(S("1234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s+1),
150 S("A"));
151 test(S("1234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s+10),
152 S("ABCDEFGHIJ"));
153 test(S("1234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s+52),
154 S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
156 test(S("12345678901234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s),
157 S());
158 test(S("12345678901234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s+1),
159 S("A"));
160 test(S("12345678901234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s+10),
161 S("ABCDEFGHIJ"));
162 test(S("12345678901234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s+52),
163 S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
165 #endif
166 #ifndef TEST_HAS_NO_EXCEPTIONS
167 { // test iterator operations that throw
168 typedef std::string S;
169 typedef ThrowingIterator<char> TIter;
170 typedef input_iterator<TIter> IIter;
171 const char* s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
172 test_exceptions(S(), IIter(TIter(s, s+10, 4, TIter::TAIncrement)), IIter());
173 test_exceptions(S(), IIter(TIter(s, s+10, 5, TIter::TADereference)), IIter());
174 test_exceptions(S(), IIter(TIter(s, s+10, 6, TIter::TAComparison)), IIter());
176 test_exceptions(S(), TIter(s, s+10, 4, TIter::TAIncrement), TIter());
177 test_exceptions(S(), TIter(s, s+10, 5, TIter::TADereference), TIter());
178 test_exceptions(S(), TIter(s, s+10, 6, TIter::TAComparison), TIter());
180 #endif
182 { // test assigning to self
183 typedef std::string S;
184 S s_short = "123/";
185 S s_long = "Lorem ipsum dolor sit amet, consectetur/";
187 s_short.assign(s_short.begin(), s_short.end());
188 assert(s_short == "123/");
189 s_short.assign(s_short.begin() + 2, s_short.end());
190 assert(s_short == "3/");
192 s_long.assign(s_long.begin(), s_long.end());
193 assert(s_long == "Lorem ipsum dolor sit amet, consectetur/");
195 s_long.assign(s_long.begin() + 30, s_long.end());
196 assert(s_long == "nsectetur/");
199 { // test assigning a different type
200 typedef std::string S;
201 const uint8_t p[] = "ABCD";
203 S s;
204 s.assign(p, p + 4);
205 assert(s == "ABCD");
208 return 0;