size_string.pass.cpp revision 9dcdcdee2582575dd4a2e5857b9f32735763f9c7
1//===----------------------------------------------------------------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10// <string>
11
12// basic_string<charT,traits,Allocator>&
13//   insert(size_type pos1, const basic_string& str);
14
15#include <string>
16#include <stdexcept>
17#include <cassert>
18
19#include "../../min_allocator.h"
20
21template <class S>
22void
23test(S s, typename S::size_type pos, S str, S expected)
24{
25    typename S::size_type old_size = s.size();
26    S s0 = s;
27    try
28    {
29        s.insert(pos, str);
30        assert(s.__invariants());
31        assert(pos <= old_size);
32        assert(s == expected);
33    }
34    catch (std::out_of_range&)
35    {
36        assert(pos > old_size);
37        assert(s == s0);
38    }
39}
40
41int main()
42{
43    {
44    typedef std::string S;
45    test(S(""), 0, S(""), S(""));
46    test(S(""), 0, S("12345"), S("12345"));
47    test(S(""), 0, S("1234567890"), S("1234567890"));
48    test(S(""), 0, S("12345678901234567890"), S("12345678901234567890"));
49    test(S(""), 1, S(""), S("can't happen"));
50    test(S(""), 1, S("12345"), S("can't happen"));
51    test(S(""), 1, S("1234567890"), S("can't happen"));
52    test(S(""), 1, S("12345678901234567890"), S("can't happen"));
53    test(S("abcde"), 0, S(""), S("abcde"));
54    test(S("abcde"), 0, S("12345"), S("12345abcde"));
55    test(S("abcde"), 0, S("1234567890"), S("1234567890abcde"));
56    test(S("abcde"), 0, S("12345678901234567890"), S("12345678901234567890abcde"));
57    test(S("abcde"), 1, S(""), S("abcde"));
58    test(S("abcde"), 1, S("12345"), S("a12345bcde"));
59    test(S("abcde"), 1, S("1234567890"), S("a1234567890bcde"));
60    test(S("abcde"), 1, S("12345678901234567890"), S("a12345678901234567890bcde"));
61    test(S("abcde"), 2, S(""), S("abcde"));
62    test(S("abcde"), 2, S("12345"), S("ab12345cde"));
63    test(S("abcde"), 2, S("1234567890"), S("ab1234567890cde"));
64    test(S("abcde"), 2, S("12345678901234567890"), S("ab12345678901234567890cde"));
65    test(S("abcde"), 4, S(""), S("abcde"));
66    test(S("abcde"), 4, S("12345"), S("abcd12345e"));
67    test(S("abcde"), 4, S("1234567890"), S("abcd1234567890e"));
68    test(S("abcde"), 4, S("12345678901234567890"), S("abcd12345678901234567890e"));
69    test(S("abcde"), 5, S(""), S("abcde"));
70    test(S("abcde"), 5, S("12345"), S("abcde12345"));
71    test(S("abcde"), 5, S("1234567890"), S("abcde1234567890"));
72    test(S("abcde"), 5, S("12345678901234567890"), S("abcde12345678901234567890"));
73    test(S("abcde"), 6, S(""), S("can't happen"));
74    test(S("abcde"), 6, S("12345"), S("can't happen"));
75    test(S("abcde"), 6, S("1234567890"), S("can't happen"));
76    test(S("abcde"), 6, S("12345678901234567890"), S("can't happen"));
77    test(S("abcdefghij"), 0, S(""), S("abcdefghij"));
78    test(S("abcdefghij"), 0, S("12345"), S("12345abcdefghij"));
79    test(S("abcdefghij"), 0, S("1234567890"), S("1234567890abcdefghij"));
80    test(S("abcdefghij"), 0, S("12345678901234567890"), S("12345678901234567890abcdefghij"));
81    test(S("abcdefghij"), 1, S(""), S("abcdefghij"));
82    test(S("abcdefghij"), 1, S("12345"), S("a12345bcdefghij"));
83    test(S("abcdefghij"), 1, S("1234567890"), S("a1234567890bcdefghij"));
84    test(S("abcdefghij"), 1, S("12345678901234567890"), S("a12345678901234567890bcdefghij"));
85    test(S("abcdefghij"), 5, S(""), S("abcdefghij"));
86    test(S("abcdefghij"), 5, S("12345"), S("abcde12345fghij"));
87    test(S("abcdefghij"), 5, S("1234567890"), S("abcde1234567890fghij"));
88    test(S("abcdefghij"), 5, S("12345678901234567890"), S("abcde12345678901234567890fghij"));
89    test(S("abcdefghij"), 9, S(""), S("abcdefghij"));
90    test(S("abcdefghij"), 9, S("12345"), S("abcdefghi12345j"));
91    test(S("abcdefghij"), 9, S("1234567890"), S("abcdefghi1234567890j"));
92    test(S("abcdefghij"), 9, S("12345678901234567890"), S("abcdefghi12345678901234567890j"));
93    test(S("abcdefghij"), 10, S(""), S("abcdefghij"));
94    test(S("abcdefghij"), 10, S("12345"), S("abcdefghij12345"));
95    test(S("abcdefghij"), 10, S("1234567890"), S("abcdefghij1234567890"));
96    test(S("abcdefghij"), 10, S("12345678901234567890"), S("abcdefghij12345678901234567890"));
97    test(S("abcdefghij"), 11, S(""), S("can't happen"));
98    test(S("abcdefghij"), 11, S("12345"), S("can't happen"));
99    test(S("abcdefghij"), 11, S("1234567890"), S("can't happen"));
100    test(S("abcdefghij"), 11, S("12345678901234567890"), S("can't happen"));
101    test(S("abcdefghijklmnopqrst"), 0, S(""), S("abcdefghijklmnopqrst"));
102    test(S("abcdefghijklmnopqrst"), 0, S("12345"), S("12345abcdefghijklmnopqrst"));
103    test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), S("1234567890abcdefghijklmnopqrst"));
104    test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), S("12345678901234567890abcdefghijklmnopqrst"));
105    test(S("abcdefghijklmnopqrst"), 1, S(""), S("abcdefghijklmnopqrst"));
106    test(S("abcdefghijklmnopqrst"), 1, S("12345"), S("a12345bcdefghijklmnopqrst"));
107    test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), S("a1234567890bcdefghijklmnopqrst"));
108    test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), S("a12345678901234567890bcdefghijklmnopqrst"));
109    test(S("abcdefghijklmnopqrst"), 10, S(""), S("abcdefghijklmnopqrst"));
110    test(S("abcdefghijklmnopqrst"), 10, S("12345"), S("abcdefghij12345klmnopqrst"));
111    test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), S("abcdefghij1234567890klmnopqrst"));
112    test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), S("abcdefghij12345678901234567890klmnopqrst"));
113    test(S("abcdefghijklmnopqrst"), 19, S(""), S("abcdefghijklmnopqrst"));
114    test(S("abcdefghijklmnopqrst"), 19, S("12345"), S("abcdefghijklmnopqrs12345t"));
115    test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), S("abcdefghijklmnopqrs1234567890t"));
116    test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), S("abcdefghijklmnopqrs12345678901234567890t"));
117    test(S("abcdefghijklmnopqrst"), 20, S(""), S("abcdefghijklmnopqrst"));
118    test(S("abcdefghijklmnopqrst"), 20, S("12345"), S("abcdefghijklmnopqrst12345"));
119    test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), S("abcdefghijklmnopqrst1234567890"));
120    test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), S("abcdefghijklmnopqrst12345678901234567890"));
121    test(S("abcdefghijklmnopqrst"), 21, S(""), S("can't happen"));
122    test(S("abcdefghijklmnopqrst"), 21, S("12345"), S("can't happen"));
123    test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), S("can't happen"));
124    test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), S("can't happen"));
125    }
126#if __cplusplus >= 201103L
127    {
128    typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
129    test(S(""), 0, S(""), S(""));
130    test(S(""), 0, S("12345"), S("12345"));
131    test(S(""), 0, S("1234567890"), S("1234567890"));
132    test(S(""), 0, S("12345678901234567890"), S("12345678901234567890"));
133    test(S(""), 1, S(""), S("can't happen"));
134    test(S(""), 1, S("12345"), S("can't happen"));
135    test(S(""), 1, S("1234567890"), S("can't happen"));
136    test(S(""), 1, S("12345678901234567890"), S("can't happen"));
137    test(S("abcde"), 0, S(""), S("abcde"));
138    test(S("abcde"), 0, S("12345"), S("12345abcde"));
139    test(S("abcde"), 0, S("1234567890"), S("1234567890abcde"));
140    test(S("abcde"), 0, S("12345678901234567890"), S("12345678901234567890abcde"));
141    test(S("abcde"), 1, S(""), S("abcde"));
142    test(S("abcde"), 1, S("12345"), S("a12345bcde"));
143    test(S("abcde"), 1, S("1234567890"), S("a1234567890bcde"));
144    test(S("abcde"), 1, S("12345678901234567890"), S("a12345678901234567890bcde"));
145    test(S("abcde"), 2, S(""), S("abcde"));
146    test(S("abcde"), 2, S("12345"), S("ab12345cde"));
147    test(S("abcde"), 2, S("1234567890"), S("ab1234567890cde"));
148    test(S("abcde"), 2, S("12345678901234567890"), S("ab12345678901234567890cde"));
149    test(S("abcde"), 4, S(""), S("abcde"));
150    test(S("abcde"), 4, S("12345"), S("abcd12345e"));
151    test(S("abcde"), 4, S("1234567890"), S("abcd1234567890e"));
152    test(S("abcde"), 4, S("12345678901234567890"), S("abcd12345678901234567890e"));
153    test(S("abcde"), 5, S(""), S("abcde"));
154    test(S("abcde"), 5, S("12345"), S("abcde12345"));
155    test(S("abcde"), 5, S("1234567890"), S("abcde1234567890"));
156    test(S("abcde"), 5, S("12345678901234567890"), S("abcde12345678901234567890"));
157    test(S("abcde"), 6, S(""), S("can't happen"));
158    test(S("abcde"), 6, S("12345"), S("can't happen"));
159    test(S("abcde"), 6, S("1234567890"), S("can't happen"));
160    test(S("abcde"), 6, S("12345678901234567890"), S("can't happen"));
161    test(S("abcdefghij"), 0, S(""), S("abcdefghij"));
162    test(S("abcdefghij"), 0, S("12345"), S("12345abcdefghij"));
163    test(S("abcdefghij"), 0, S("1234567890"), S("1234567890abcdefghij"));
164    test(S("abcdefghij"), 0, S("12345678901234567890"), S("12345678901234567890abcdefghij"));
165    test(S("abcdefghij"), 1, S(""), S("abcdefghij"));
166    test(S("abcdefghij"), 1, S("12345"), S("a12345bcdefghij"));
167    test(S("abcdefghij"), 1, S("1234567890"), S("a1234567890bcdefghij"));
168    test(S("abcdefghij"), 1, S("12345678901234567890"), S("a12345678901234567890bcdefghij"));
169    test(S("abcdefghij"), 5, S(""), S("abcdefghij"));
170    test(S("abcdefghij"), 5, S("12345"), S("abcde12345fghij"));
171    test(S("abcdefghij"), 5, S("1234567890"), S("abcde1234567890fghij"));
172    test(S("abcdefghij"), 5, S("12345678901234567890"), S("abcde12345678901234567890fghij"));
173    test(S("abcdefghij"), 9, S(""), S("abcdefghij"));
174    test(S("abcdefghij"), 9, S("12345"), S("abcdefghi12345j"));
175    test(S("abcdefghij"), 9, S("1234567890"), S("abcdefghi1234567890j"));
176    test(S("abcdefghij"), 9, S("12345678901234567890"), S("abcdefghi12345678901234567890j"));
177    test(S("abcdefghij"), 10, S(""), S("abcdefghij"));
178    test(S("abcdefghij"), 10, S("12345"), S("abcdefghij12345"));
179    test(S("abcdefghij"), 10, S("1234567890"), S("abcdefghij1234567890"));
180    test(S("abcdefghij"), 10, S("12345678901234567890"), S("abcdefghij12345678901234567890"));
181    test(S("abcdefghij"), 11, S(""), S("can't happen"));
182    test(S("abcdefghij"), 11, S("12345"), S("can't happen"));
183    test(S("abcdefghij"), 11, S("1234567890"), S("can't happen"));
184    test(S("abcdefghij"), 11, S("12345678901234567890"), S("can't happen"));
185    test(S("abcdefghijklmnopqrst"), 0, S(""), S("abcdefghijklmnopqrst"));
186    test(S("abcdefghijklmnopqrst"), 0, S("12345"), S("12345abcdefghijklmnopqrst"));
187    test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), S("1234567890abcdefghijklmnopqrst"));
188    test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), S("12345678901234567890abcdefghijklmnopqrst"));
189    test(S("abcdefghijklmnopqrst"), 1, S(""), S("abcdefghijklmnopqrst"));
190    test(S("abcdefghijklmnopqrst"), 1, S("12345"), S("a12345bcdefghijklmnopqrst"));
191    test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), S("a1234567890bcdefghijklmnopqrst"));
192    test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), S("a12345678901234567890bcdefghijklmnopqrst"));
193    test(S("abcdefghijklmnopqrst"), 10, S(""), S("abcdefghijklmnopqrst"));
194    test(S("abcdefghijklmnopqrst"), 10, S("12345"), S("abcdefghij12345klmnopqrst"));
195    test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), S("abcdefghij1234567890klmnopqrst"));
196    test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), S("abcdefghij12345678901234567890klmnopqrst"));
197    test(S("abcdefghijklmnopqrst"), 19, S(""), S("abcdefghijklmnopqrst"));
198    test(S("abcdefghijklmnopqrst"), 19, S("12345"), S("abcdefghijklmnopqrs12345t"));
199    test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), S("abcdefghijklmnopqrs1234567890t"));
200    test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), S("abcdefghijklmnopqrs12345678901234567890t"));
201    test(S("abcdefghijklmnopqrst"), 20, S(""), S("abcdefghijklmnopqrst"));
202    test(S("abcdefghijklmnopqrst"), 20, S("12345"), S("abcdefghijklmnopqrst12345"));
203    test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), S("abcdefghijklmnopqrst1234567890"));
204    test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), S("abcdefghijklmnopqrst12345678901234567890"));
205    test(S("abcdefghijklmnopqrst"), 21, S(""), S("can't happen"));
206    test(S("abcdefghijklmnopqrst"), 21, S("12345"), S("can't happen"));
207    test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), S("can't happen"));
208    test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), S("can't happen"));
209    }
210#endif
211}
212