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 pos, size_type n, charT c);
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, typename S::size_type n,
24     typename S::value_type str, S expected)
25{
26    typename S::size_type old_size = s.size();
27    S s0 = s;
28    try
29    {
30        s.insert(pos, n, str);
31        assert(s.__invariants());
32        assert(pos <= old_size);
33        assert(s == expected);
34    }
35    catch (std::out_of_range&)
36    {
37        assert(pos > old_size);
38        assert(s == s0);
39    }
40}
41
42int main()
43{
44    {
45    typedef std::string S;
46    test(S(""), 0, 0, '1', S(""));
47    test(S(""), 0, 5, '1', S("11111"));
48    test(S(""), 0, 10, '1', S("1111111111"));
49    test(S(""), 0, 20, '1', S("11111111111111111111"));
50    test(S(""), 1, 0, '1', S("can't happen"));
51    test(S(""), 1, 5, '1', S("can't happen"));
52    test(S(""), 1, 10, '1', S("can't happen"));
53    test(S(""), 1, 20, '1', S("can't happen"));
54    test(S("abcde"), 0, 0, '1', S("abcde"));
55    test(S("abcde"), 0, 5, '1', S("11111abcde"));
56    test(S("abcde"), 0, 10, '1', S("1111111111abcde"));
57    test(S("abcde"), 0, 20, '1', S("11111111111111111111abcde"));
58    test(S("abcde"), 1, 0, '1', S("abcde"));
59    test(S("abcde"), 1, 5, '1', S("a11111bcde"));
60    test(S("abcde"), 1, 10, '1', S("a1111111111bcde"));
61    test(S("abcde"), 1, 20, '1', S("a11111111111111111111bcde"));
62    test(S("abcde"), 2, 0, '1', S("abcde"));
63    test(S("abcde"), 2, 5, '1', S("ab11111cde"));
64    test(S("abcde"), 2, 10, '1', S("ab1111111111cde"));
65    test(S("abcde"), 2, 20, '1', S("ab11111111111111111111cde"));
66    test(S("abcde"), 4, 0, '1', S("abcde"));
67    test(S("abcde"), 4, 5, '1', S("abcd11111e"));
68    test(S("abcde"), 4, 10, '1', S("abcd1111111111e"));
69    test(S("abcde"), 4, 20, '1', S("abcd11111111111111111111e"));
70    test(S("abcde"), 5, 0, '1', S("abcde"));
71    test(S("abcde"), 5, 5, '1', S("abcde11111"));
72    test(S("abcde"), 5, 10, '1', S("abcde1111111111"));
73    test(S("abcde"), 5, 20, '1', S("abcde11111111111111111111"));
74    test(S("abcde"), 6, 0, '1', S("can't happen"));
75    test(S("abcde"), 6, 5, '1', S("can't happen"));
76    test(S("abcde"), 6, 10, '1', S("can't happen"));
77    test(S("abcde"), 6, 20, '1', S("can't happen"));
78    test(S("abcdefghij"), 0, 0, '1', S("abcdefghij"));
79    test(S("abcdefghij"), 0, 5, '1', S("11111abcdefghij"));
80    test(S("abcdefghij"), 0, 10, '1', S("1111111111abcdefghij"));
81    test(S("abcdefghij"), 0, 20, '1', S("11111111111111111111abcdefghij"));
82    test(S("abcdefghij"), 1, 0, '1', S("abcdefghij"));
83    test(S("abcdefghij"), 1, 5, '1', S("a11111bcdefghij"));
84    test(S("abcdefghij"), 1, 10, '1', S("a1111111111bcdefghij"));
85    test(S("abcdefghij"), 1, 20, '1', S("a11111111111111111111bcdefghij"));
86    test(S("abcdefghij"), 5, 0, '1', S("abcdefghij"));
87    test(S("abcdefghij"), 5, 5, '1', S("abcde11111fghij"));
88    test(S("abcdefghij"), 5, 10, '1', S("abcde1111111111fghij"));
89    test(S("abcdefghij"), 5, 20, '1', S("abcde11111111111111111111fghij"));
90    test(S("abcdefghij"), 9, 0, '1', S("abcdefghij"));
91    test(S("abcdefghij"), 9, 5, '1', S("abcdefghi11111j"));
92    test(S("abcdefghij"), 9, 10, '1', S("abcdefghi1111111111j"));
93    test(S("abcdefghij"), 9, 20, '1', S("abcdefghi11111111111111111111j"));
94    test(S("abcdefghij"), 10, 0, '1', S("abcdefghij"));
95    test(S("abcdefghij"), 10, 5, '1', S("abcdefghij11111"));
96    test(S("abcdefghij"), 10, 10, '1', S("abcdefghij1111111111"));
97    test(S("abcdefghij"), 10, 20, '1', S("abcdefghij11111111111111111111"));
98    test(S("abcdefghij"), 11, 0, '1', S("can't happen"));
99    test(S("abcdefghij"), 11, 5, '1', S("can't happen"));
100    test(S("abcdefghij"), 11, 10, '1', S("can't happen"));
101    test(S("abcdefghij"), 11, 20, '1', S("can't happen"));
102    test(S("abcdefghijklmnopqrst"), 0, 0, '1', S("abcdefghijklmnopqrst"));
103    test(S("abcdefghijklmnopqrst"), 0, 5, '1', S("11111abcdefghijklmnopqrst"));
104    test(S("abcdefghijklmnopqrst"), 0, 10, '1', S("1111111111abcdefghijklmnopqrst"));
105    test(S("abcdefghijklmnopqrst"), 0, 20, '1', S("11111111111111111111abcdefghijklmnopqrst"));
106    test(S("abcdefghijklmnopqrst"), 1, 0, '1', S("abcdefghijklmnopqrst"));
107    test(S("abcdefghijklmnopqrst"), 1, 5, '1', S("a11111bcdefghijklmnopqrst"));
108    test(S("abcdefghijklmnopqrst"), 1, 10, '1', S("a1111111111bcdefghijklmnopqrst"));
109    test(S("abcdefghijklmnopqrst"), 1, 20, '1', S("a11111111111111111111bcdefghijklmnopqrst"));
110    test(S("abcdefghijklmnopqrst"), 10, 0, '1', S("abcdefghijklmnopqrst"));
111    test(S("abcdefghijklmnopqrst"), 10, 5, '1', S("abcdefghij11111klmnopqrst"));
112    test(S("abcdefghijklmnopqrst"), 10, 10, '1', S("abcdefghij1111111111klmnopqrst"));
113    test(S("abcdefghijklmnopqrst"), 10, 20, '1', S("abcdefghij11111111111111111111klmnopqrst"));
114    test(S("abcdefghijklmnopqrst"), 19, 0, '1', S("abcdefghijklmnopqrst"));
115    test(S("abcdefghijklmnopqrst"), 19, 5, '1', S("abcdefghijklmnopqrs11111t"));
116    test(S("abcdefghijklmnopqrst"), 19, 10, '1', S("abcdefghijklmnopqrs1111111111t"));
117    test(S("abcdefghijklmnopqrst"), 19, 20, '1', S("abcdefghijklmnopqrs11111111111111111111t"));
118    test(S("abcdefghijklmnopqrst"), 20, 0, '1', S("abcdefghijklmnopqrst"));
119    test(S("abcdefghijklmnopqrst"), 20, 5, '1', S("abcdefghijklmnopqrst11111"));
120    test(S("abcdefghijklmnopqrst"), 20, 10, '1', S("abcdefghijklmnopqrst1111111111"));
121    test(S("abcdefghijklmnopqrst"), 20, 20, '1', S("abcdefghijklmnopqrst11111111111111111111"));
122    test(S("abcdefghijklmnopqrst"), 21, 0, '1', S("can't happen"));
123    test(S("abcdefghijklmnopqrst"), 21, 5, '1', S("can't happen"));
124    test(S("abcdefghijklmnopqrst"), 21, 10, '1', S("can't happen"));
125    test(S("abcdefghijklmnopqrst"), 21, 20, '1', S("can't happen"));
126    }
127#if __cplusplus >= 201103L
128    {
129    typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
130    test(S(""), 0, 0, '1', S(""));
131    test(S(""), 0, 5, '1', S("11111"));
132    test(S(""), 0, 10, '1', S("1111111111"));
133    test(S(""), 0, 20, '1', S("11111111111111111111"));
134    test(S(""), 1, 0, '1', S("can't happen"));
135    test(S(""), 1, 5, '1', S("can't happen"));
136    test(S(""), 1, 10, '1', S("can't happen"));
137    test(S(""), 1, 20, '1', S("can't happen"));
138    test(S("abcde"), 0, 0, '1', S("abcde"));
139    test(S("abcde"), 0, 5, '1', S("11111abcde"));
140    test(S("abcde"), 0, 10, '1', S("1111111111abcde"));
141    test(S("abcde"), 0, 20, '1', S("11111111111111111111abcde"));
142    test(S("abcde"), 1, 0, '1', S("abcde"));
143    test(S("abcde"), 1, 5, '1', S("a11111bcde"));
144    test(S("abcde"), 1, 10, '1', S("a1111111111bcde"));
145    test(S("abcde"), 1, 20, '1', S("a11111111111111111111bcde"));
146    test(S("abcde"), 2, 0, '1', S("abcde"));
147    test(S("abcde"), 2, 5, '1', S("ab11111cde"));
148    test(S("abcde"), 2, 10, '1', S("ab1111111111cde"));
149    test(S("abcde"), 2, 20, '1', S("ab11111111111111111111cde"));
150    test(S("abcde"), 4, 0, '1', S("abcde"));
151    test(S("abcde"), 4, 5, '1', S("abcd11111e"));
152    test(S("abcde"), 4, 10, '1', S("abcd1111111111e"));
153    test(S("abcde"), 4, 20, '1', S("abcd11111111111111111111e"));
154    test(S("abcde"), 5, 0, '1', S("abcde"));
155    test(S("abcde"), 5, 5, '1', S("abcde11111"));
156    test(S("abcde"), 5, 10, '1', S("abcde1111111111"));
157    test(S("abcde"), 5, 20, '1', S("abcde11111111111111111111"));
158    test(S("abcde"), 6, 0, '1', S("can't happen"));
159    test(S("abcde"), 6, 5, '1', S("can't happen"));
160    test(S("abcde"), 6, 10, '1', S("can't happen"));
161    test(S("abcde"), 6, 20, '1', S("can't happen"));
162    test(S("abcdefghij"), 0, 0, '1', S("abcdefghij"));
163    test(S("abcdefghij"), 0, 5, '1', S("11111abcdefghij"));
164    test(S("abcdefghij"), 0, 10, '1', S("1111111111abcdefghij"));
165    test(S("abcdefghij"), 0, 20, '1', S("11111111111111111111abcdefghij"));
166    test(S("abcdefghij"), 1, 0, '1', S("abcdefghij"));
167    test(S("abcdefghij"), 1, 5, '1', S("a11111bcdefghij"));
168    test(S("abcdefghij"), 1, 10, '1', S("a1111111111bcdefghij"));
169    test(S("abcdefghij"), 1, 20, '1', S("a11111111111111111111bcdefghij"));
170    test(S("abcdefghij"), 5, 0, '1', S("abcdefghij"));
171    test(S("abcdefghij"), 5, 5, '1', S("abcde11111fghij"));
172    test(S("abcdefghij"), 5, 10, '1', S("abcde1111111111fghij"));
173    test(S("abcdefghij"), 5, 20, '1', S("abcde11111111111111111111fghij"));
174    test(S("abcdefghij"), 9, 0, '1', S("abcdefghij"));
175    test(S("abcdefghij"), 9, 5, '1', S("abcdefghi11111j"));
176    test(S("abcdefghij"), 9, 10, '1', S("abcdefghi1111111111j"));
177    test(S("abcdefghij"), 9, 20, '1', S("abcdefghi11111111111111111111j"));
178    test(S("abcdefghij"), 10, 0, '1', S("abcdefghij"));
179    test(S("abcdefghij"), 10, 5, '1', S("abcdefghij11111"));
180    test(S("abcdefghij"), 10, 10, '1', S("abcdefghij1111111111"));
181    test(S("abcdefghij"), 10, 20, '1', S("abcdefghij11111111111111111111"));
182    test(S("abcdefghij"), 11, 0, '1', S("can't happen"));
183    test(S("abcdefghij"), 11, 5, '1', S("can't happen"));
184    test(S("abcdefghij"), 11, 10, '1', S("can't happen"));
185    test(S("abcdefghij"), 11, 20, '1', S("can't happen"));
186    test(S("abcdefghijklmnopqrst"), 0, 0, '1', S("abcdefghijklmnopqrst"));
187    test(S("abcdefghijklmnopqrst"), 0, 5, '1', S("11111abcdefghijklmnopqrst"));
188    test(S("abcdefghijklmnopqrst"), 0, 10, '1', S("1111111111abcdefghijklmnopqrst"));
189    test(S("abcdefghijklmnopqrst"), 0, 20, '1', S("11111111111111111111abcdefghijklmnopqrst"));
190    test(S("abcdefghijklmnopqrst"), 1, 0, '1', S("abcdefghijklmnopqrst"));
191    test(S("abcdefghijklmnopqrst"), 1, 5, '1', S("a11111bcdefghijklmnopqrst"));
192    test(S("abcdefghijklmnopqrst"), 1, 10, '1', S("a1111111111bcdefghijklmnopqrst"));
193    test(S("abcdefghijklmnopqrst"), 1, 20, '1', S("a11111111111111111111bcdefghijklmnopqrst"));
194    test(S("abcdefghijklmnopqrst"), 10, 0, '1', S("abcdefghijklmnopqrst"));
195    test(S("abcdefghijklmnopqrst"), 10, 5, '1', S("abcdefghij11111klmnopqrst"));
196    test(S("abcdefghijklmnopqrst"), 10, 10, '1', S("abcdefghij1111111111klmnopqrst"));
197    test(S("abcdefghijklmnopqrst"), 10, 20, '1', S("abcdefghij11111111111111111111klmnopqrst"));
198    test(S("abcdefghijklmnopqrst"), 19, 0, '1', S("abcdefghijklmnopqrst"));
199    test(S("abcdefghijklmnopqrst"), 19, 5, '1', S("abcdefghijklmnopqrs11111t"));
200    test(S("abcdefghijklmnopqrst"), 19, 10, '1', S("abcdefghijklmnopqrs1111111111t"));
201    test(S("abcdefghijklmnopqrst"), 19, 20, '1', S("abcdefghijklmnopqrs11111111111111111111t"));
202    test(S("abcdefghijklmnopqrst"), 20, 0, '1', S("abcdefghijklmnopqrst"));
203    test(S("abcdefghijklmnopqrst"), 20, 5, '1', S("abcdefghijklmnopqrst11111"));
204    test(S("abcdefghijklmnopqrst"), 20, 10, '1', S("abcdefghijklmnopqrst1111111111"));
205    test(S("abcdefghijklmnopqrst"), 20, 20, '1', S("abcdefghijklmnopqrst11111111111111111111"));
206    test(S("abcdefghijklmnopqrst"), 21, 0, '1', S("can't happen"));
207    test(S("abcdefghijklmnopqrst"), 21, 5, '1', S("can't happen"));
208    test(S("abcdefghijklmnopqrst"), 21, 10, '1', S("can't happen"));
209    test(S("abcdefghijklmnopqrst"), 21, 20, '1', S("can't happen"));
210    }
211#endif
212}
213