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// XFAIL: libcpp-no-exceptions
11// <string>
12
13// basic_string<charT,traits,Allocator>&
14//   insert(size_type pos, const charT* s, size_type n);
15
16#include <string>
17#include <stdexcept>
18#include <cassert>
19
20#include "test_macros.h"
21#include "min_allocator.h"
22
23template <class S>
24void
25test(S s, typename S::size_type pos, const typename S::value_type* str,
26     typename S::size_type n, S expected)
27{
28    typename S::size_type old_size = s.size();
29    S s0 = s;
30    try
31    {
32        s.insert(pos, str, n);
33        LIBCPP_ASSERT(s.__invariants());
34        assert(pos <= old_size);
35        assert(s == expected);
36    }
37    catch (std::out_of_range&)
38    {
39        assert(pos > old_size);
40        assert(s == s0);
41    }
42}
43
44int main()
45{
46    {
47    typedef std::string S;
48    test(S(""), 0, "", 0, S(""));
49    test(S(""), 0, "12345", 0, S(""));
50    test(S(""), 0, "12345", 1, S("1"));
51    test(S(""), 0, "12345", 2, S("12"));
52    test(S(""), 0, "12345", 4, S("1234"));
53    test(S(""), 0, "12345", 5, S("12345"));
54    test(S(""), 0, "1234567890", 0, S(""));
55    test(S(""), 0, "1234567890", 1, S("1"));
56    test(S(""), 0, "1234567890", 5, S("12345"));
57    test(S(""), 0, "1234567890", 9, S("123456789"));
58    test(S(""), 0, "1234567890", 10, S("1234567890"));
59    test(S(""), 0, "12345678901234567890", 0, S(""));
60    test(S(""), 0, "12345678901234567890", 1, S("1"));
61    test(S(""), 0, "12345678901234567890", 10, S("1234567890"));
62    test(S(""), 0, "12345678901234567890", 19, S("1234567890123456789"));
63    test(S(""), 0, "12345678901234567890", 20, S("12345678901234567890"));
64    test(S(""), 1, "", 0, S("can't happen"));
65    test(S(""), 1, "12345", 0, S("can't happen"));
66    test(S(""), 1, "12345", 1, S("can't happen"));
67    test(S(""), 1, "12345", 2, S("can't happen"));
68    test(S(""), 1, "12345", 4, S("can't happen"));
69    test(S(""), 1, "12345", 5, S("can't happen"));
70    test(S(""), 1, "1234567890", 0, S("can't happen"));
71    test(S(""), 1, "1234567890", 1, S("can't happen"));
72    test(S(""), 1, "1234567890", 5, S("can't happen"));
73    test(S(""), 1, "1234567890", 9, S("can't happen"));
74    test(S(""), 1, "1234567890", 10, S("can't happen"));
75    test(S(""), 1, "12345678901234567890", 0, S("can't happen"));
76    test(S(""), 1, "12345678901234567890", 1, S("can't happen"));
77    test(S(""), 1, "12345678901234567890", 10, S("can't happen"));
78    test(S(""), 1, "12345678901234567890", 19, S("can't happen"));
79    test(S(""), 1, "12345678901234567890", 20, S("can't happen"));
80    test(S("abcde"), 0, "", 0, S("abcde"));
81    test(S("abcde"), 0, "12345", 0, S("abcde"));
82    test(S("abcde"), 0, "12345", 1, S("1abcde"));
83    test(S("abcde"), 0, "12345", 2, S("12abcde"));
84    test(S("abcde"), 0, "12345", 4, S("1234abcde"));
85    test(S("abcde"), 0, "12345", 5, S("12345abcde"));
86    test(S("abcde"), 0, "1234567890", 0, S("abcde"));
87    test(S("abcde"), 0, "1234567890", 1, S("1abcde"));
88    test(S("abcde"), 0, "1234567890", 5, S("12345abcde"));
89    test(S("abcde"), 0, "1234567890", 9, S("123456789abcde"));
90    test(S("abcde"), 0, "1234567890", 10, S("1234567890abcde"));
91    test(S("abcde"), 0, "12345678901234567890", 0, S("abcde"));
92    test(S("abcde"), 0, "12345678901234567890", 1, S("1abcde"));
93    test(S("abcde"), 0, "12345678901234567890", 10, S("1234567890abcde"));
94    test(S("abcde"), 0, "12345678901234567890", 19, S("1234567890123456789abcde"));
95    test(S("abcde"), 0, "12345678901234567890", 20, S("12345678901234567890abcde"));
96    test(S("abcde"), 1, "", 0, S("abcde"));
97    test(S("abcde"), 1, "12345", 0, S("abcde"));
98    test(S("abcde"), 1, "12345", 1, S("a1bcde"));
99    test(S("abcde"), 1, "12345", 2, S("a12bcde"));
100    test(S("abcde"), 1, "12345", 4, S("a1234bcde"));
101    test(S("abcde"), 1, "12345", 5, S("a12345bcde"));
102    test(S("abcde"), 1, "1234567890", 0, S("abcde"));
103    test(S("abcde"), 1, "1234567890", 1, S("a1bcde"));
104    test(S("abcde"), 1, "1234567890", 5, S("a12345bcde"));
105    test(S("abcde"), 1, "1234567890", 9, S("a123456789bcde"));
106    test(S("abcde"), 1, "1234567890", 10, S("a1234567890bcde"));
107    test(S("abcde"), 1, "12345678901234567890", 0, S("abcde"));
108    test(S("abcde"), 1, "12345678901234567890", 1, S("a1bcde"));
109    test(S("abcde"), 1, "12345678901234567890", 10, S("a1234567890bcde"));
110    test(S("abcde"), 1, "12345678901234567890", 19, S("a1234567890123456789bcde"));
111    test(S("abcde"), 1, "12345678901234567890", 20, S("a12345678901234567890bcde"));
112    test(S("abcde"), 2, "", 0, S("abcde"));
113    test(S("abcde"), 2, "12345", 0, S("abcde"));
114    test(S("abcde"), 2, "12345", 1, S("ab1cde"));
115    test(S("abcde"), 2, "12345", 2, S("ab12cde"));
116    test(S("abcde"), 2, "12345", 4, S("ab1234cde"));
117    test(S("abcde"), 2, "12345", 5, S("ab12345cde"));
118    test(S("abcde"), 2, "1234567890", 0, S("abcde"));
119    test(S("abcde"), 2, "1234567890", 1, S("ab1cde"));
120    test(S("abcde"), 2, "1234567890", 5, S("ab12345cde"));
121    test(S("abcde"), 2, "1234567890", 9, S("ab123456789cde"));
122    test(S("abcde"), 2, "1234567890", 10, S("ab1234567890cde"));
123    test(S("abcde"), 2, "12345678901234567890", 0, S("abcde"));
124    test(S("abcde"), 2, "12345678901234567890", 1, S("ab1cde"));
125    test(S("abcde"), 2, "12345678901234567890", 10, S("ab1234567890cde"));
126    test(S("abcde"), 2, "12345678901234567890", 19, S("ab1234567890123456789cde"));
127    test(S("abcde"), 2, "12345678901234567890", 20, S("ab12345678901234567890cde"));
128    test(S("abcde"), 4, "", 0, S("abcde"));
129    test(S("abcde"), 4, "12345", 0, S("abcde"));
130    test(S("abcde"), 4, "12345", 1, S("abcd1e"));
131    test(S("abcde"), 4, "12345", 2, S("abcd12e"));
132    test(S("abcde"), 4, "12345", 4, S("abcd1234e"));
133    test(S("abcde"), 4, "12345", 5, S("abcd12345e"));
134    test(S("abcde"), 4, "1234567890", 0, S("abcde"));
135    test(S("abcde"), 4, "1234567890", 1, S("abcd1e"));
136    test(S("abcde"), 4, "1234567890", 5, S("abcd12345e"));
137    test(S("abcde"), 4, "1234567890", 9, S("abcd123456789e"));
138    test(S("abcde"), 4, "1234567890", 10, S("abcd1234567890e"));
139    test(S("abcde"), 4, "12345678901234567890", 0, S("abcde"));
140    test(S("abcde"), 4, "12345678901234567890", 1, S("abcd1e"));
141    test(S("abcde"), 4, "12345678901234567890", 10, S("abcd1234567890e"));
142    test(S("abcde"), 4, "12345678901234567890", 19, S("abcd1234567890123456789e"));
143    test(S("abcde"), 4, "12345678901234567890", 20, S("abcd12345678901234567890e"));
144    test(S("abcde"), 5, "", 0, S("abcde"));
145    test(S("abcde"), 5, "12345", 0, S("abcde"));
146    test(S("abcde"), 5, "12345", 1, S("abcde1"));
147    test(S("abcde"), 5, "12345", 2, S("abcde12"));
148    test(S("abcde"), 5, "12345", 4, S("abcde1234"));
149    test(S("abcde"), 5, "12345", 5, S("abcde12345"));
150    test(S("abcde"), 5, "1234567890", 0, S("abcde"));
151    test(S("abcde"), 5, "1234567890", 1, S("abcde1"));
152    test(S("abcde"), 5, "1234567890", 5, S("abcde12345"));
153    test(S("abcde"), 5, "1234567890", 9, S("abcde123456789"));
154    test(S("abcde"), 5, "1234567890", 10, S("abcde1234567890"));
155    test(S("abcde"), 5, "12345678901234567890", 0, S("abcde"));
156    test(S("abcde"), 5, "12345678901234567890", 1, S("abcde1"));
157    test(S("abcde"), 5, "12345678901234567890", 10, S("abcde1234567890"));
158    test(S("abcde"), 5, "12345678901234567890", 19, S("abcde1234567890123456789"));
159    test(S("abcde"), 5, "12345678901234567890", 20, S("abcde12345678901234567890"));
160    test(S("abcde"), 6, "", 0, S("can't happen"));
161    test(S("abcde"), 6, "12345", 0, S("can't happen"));
162    test(S("abcde"), 6, "12345", 1, S("can't happen"));
163    test(S("abcde"), 6, "12345", 2, S("can't happen"));
164    test(S("abcde"), 6, "12345", 4, S("can't happen"));
165    test(S("abcde"), 6, "12345", 5, S("can't happen"));
166    test(S("abcde"), 6, "1234567890", 0, S("can't happen"));
167    test(S("abcde"), 6, "1234567890", 1, S("can't happen"));
168    test(S("abcde"), 6, "1234567890", 5, S("can't happen"));
169    test(S("abcde"), 6, "1234567890", 9, S("can't happen"));
170    test(S("abcde"), 6, "1234567890", 10, S("can't happen"));
171    test(S("abcde"), 6, "12345678901234567890", 0, S("can't happen"));
172    test(S("abcde"), 6, "12345678901234567890", 1, S("can't happen"));
173    test(S("abcde"), 6, "12345678901234567890", 10, S("can't happen"));
174    test(S("abcde"), 6, "12345678901234567890", 19, S("can't happen"));
175    test(S("abcde"), 6, "12345678901234567890", 20, S("can't happen"));
176    test(S("abcdefghij"), 0, "", 0, S("abcdefghij"));
177    test(S("abcdefghij"), 0, "12345", 0, S("abcdefghij"));
178    test(S("abcdefghij"), 0, "12345", 1, S("1abcdefghij"));
179    test(S("abcdefghij"), 0, "12345", 2, S("12abcdefghij"));
180    test(S("abcdefghij"), 0, "12345", 4, S("1234abcdefghij"));
181    test(S("abcdefghij"), 0, "12345", 5, S("12345abcdefghij"));
182    test(S("abcdefghij"), 0, "1234567890", 0, S("abcdefghij"));
183    test(S("abcdefghij"), 0, "1234567890", 1, S("1abcdefghij"));
184    test(S("abcdefghij"), 0, "1234567890", 5, S("12345abcdefghij"));
185    test(S("abcdefghij"), 0, "1234567890", 9, S("123456789abcdefghij"));
186    test(S("abcdefghij"), 0, "1234567890", 10, S("1234567890abcdefghij"));
187    test(S("abcdefghij"), 0, "12345678901234567890", 0, S("abcdefghij"));
188    test(S("abcdefghij"), 0, "12345678901234567890", 1, S("1abcdefghij"));
189    test(S("abcdefghij"), 0, "12345678901234567890", 10, S("1234567890abcdefghij"));
190    test(S("abcdefghij"), 0, "12345678901234567890", 19, S("1234567890123456789abcdefghij"));
191    test(S("abcdefghij"), 0, "12345678901234567890", 20, S("12345678901234567890abcdefghij"));
192    test(S("abcdefghij"), 1, "", 0, S("abcdefghij"));
193    test(S("abcdefghij"), 1, "12345", 0, S("abcdefghij"));
194    test(S("abcdefghij"), 1, "12345", 1, S("a1bcdefghij"));
195    test(S("abcdefghij"), 1, "12345", 2, S("a12bcdefghij"));
196    test(S("abcdefghij"), 1, "12345", 4, S("a1234bcdefghij"));
197    test(S("abcdefghij"), 1, "12345", 5, S("a12345bcdefghij"));
198    test(S("abcdefghij"), 1, "1234567890", 0, S("abcdefghij"));
199    test(S("abcdefghij"), 1, "1234567890", 1, S("a1bcdefghij"));
200    test(S("abcdefghij"), 1, "1234567890", 5, S("a12345bcdefghij"));
201    test(S("abcdefghij"), 1, "1234567890", 9, S("a123456789bcdefghij"));
202    test(S("abcdefghij"), 1, "1234567890", 10, S("a1234567890bcdefghij"));
203    test(S("abcdefghij"), 1, "12345678901234567890", 0, S("abcdefghij"));
204    test(S("abcdefghij"), 1, "12345678901234567890", 1, S("a1bcdefghij"));
205    test(S("abcdefghij"), 1, "12345678901234567890", 10, S("a1234567890bcdefghij"));
206    test(S("abcdefghij"), 1, "12345678901234567890", 19, S("a1234567890123456789bcdefghij"));
207    test(S("abcdefghij"), 1, "12345678901234567890", 20, S("a12345678901234567890bcdefghij"));
208    test(S("abcdefghij"), 5, "", 0, S("abcdefghij"));
209    test(S("abcdefghij"), 5, "12345", 0, S("abcdefghij"));
210    test(S("abcdefghij"), 5, "12345", 1, S("abcde1fghij"));
211    test(S("abcdefghij"), 5, "12345", 2, S("abcde12fghij"));
212    test(S("abcdefghij"), 5, "12345", 4, S("abcde1234fghij"));
213    test(S("abcdefghij"), 5, "12345", 5, S("abcde12345fghij"));
214    test(S("abcdefghij"), 5, "1234567890", 0, S("abcdefghij"));
215    test(S("abcdefghij"), 5, "1234567890", 1, S("abcde1fghij"));
216    test(S("abcdefghij"), 5, "1234567890", 5, S("abcde12345fghij"));
217    test(S("abcdefghij"), 5, "1234567890", 9, S("abcde123456789fghij"));
218    test(S("abcdefghij"), 5, "1234567890", 10, S("abcde1234567890fghij"));
219    test(S("abcdefghij"), 5, "12345678901234567890", 0, S("abcdefghij"));
220    test(S("abcdefghij"), 5, "12345678901234567890", 1, S("abcde1fghij"));
221    test(S("abcdefghij"), 5, "12345678901234567890", 10, S("abcde1234567890fghij"));
222    test(S("abcdefghij"), 5, "12345678901234567890", 19, S("abcde1234567890123456789fghij"));
223    test(S("abcdefghij"), 5, "12345678901234567890", 20, S("abcde12345678901234567890fghij"));
224    test(S("abcdefghij"), 9, "", 0, S("abcdefghij"));
225    test(S("abcdefghij"), 9, "12345", 0, S("abcdefghij"));
226    test(S("abcdefghij"), 9, "12345", 1, S("abcdefghi1j"));
227    test(S("abcdefghij"), 9, "12345", 2, S("abcdefghi12j"));
228    test(S("abcdefghij"), 9, "12345", 4, S("abcdefghi1234j"));
229    test(S("abcdefghij"), 9, "12345", 5, S("abcdefghi12345j"));
230    test(S("abcdefghij"), 9, "1234567890", 0, S("abcdefghij"));
231    test(S("abcdefghij"), 9, "1234567890", 1, S("abcdefghi1j"));
232    test(S("abcdefghij"), 9, "1234567890", 5, S("abcdefghi12345j"));
233    test(S("abcdefghij"), 9, "1234567890", 9, S("abcdefghi123456789j"));
234    test(S("abcdefghij"), 9, "1234567890", 10, S("abcdefghi1234567890j"));
235    test(S("abcdefghij"), 9, "12345678901234567890", 0, S("abcdefghij"));
236    test(S("abcdefghij"), 9, "12345678901234567890", 1, S("abcdefghi1j"));
237    test(S("abcdefghij"), 9, "12345678901234567890", 10, S("abcdefghi1234567890j"));
238    test(S("abcdefghij"), 9, "12345678901234567890", 19, S("abcdefghi1234567890123456789j"));
239    test(S("abcdefghij"), 9, "12345678901234567890", 20, S("abcdefghi12345678901234567890j"));
240    test(S("abcdefghij"), 10, "", 0, S("abcdefghij"));
241    test(S("abcdefghij"), 10, "12345", 0, S("abcdefghij"));
242    test(S("abcdefghij"), 10, "12345", 1, S("abcdefghij1"));
243    test(S("abcdefghij"), 10, "12345", 2, S("abcdefghij12"));
244    test(S("abcdefghij"), 10, "12345", 4, S("abcdefghij1234"));
245    test(S("abcdefghij"), 10, "12345", 5, S("abcdefghij12345"));
246    test(S("abcdefghij"), 10, "1234567890", 0, S("abcdefghij"));
247    test(S("abcdefghij"), 10, "1234567890", 1, S("abcdefghij1"));
248    test(S("abcdefghij"), 10, "1234567890", 5, S("abcdefghij12345"));
249    test(S("abcdefghij"), 10, "1234567890", 9, S("abcdefghij123456789"));
250    test(S("abcdefghij"), 10, "1234567890", 10, S("abcdefghij1234567890"));
251    test(S("abcdefghij"), 10, "12345678901234567890", 0, S("abcdefghij"));
252    test(S("abcdefghij"), 10, "12345678901234567890", 1, S("abcdefghij1"));
253    test(S("abcdefghij"), 10, "12345678901234567890", 10, S("abcdefghij1234567890"));
254    test(S("abcdefghij"), 10, "12345678901234567890", 19, S("abcdefghij1234567890123456789"));
255    test(S("abcdefghij"), 10, "12345678901234567890", 20, S("abcdefghij12345678901234567890"));
256    test(S("abcdefghij"), 11, "", 0, S("can't happen"));
257    test(S("abcdefghij"), 11, "12345", 0, S("can't happen"));
258    test(S("abcdefghij"), 11, "12345", 1, S("can't happen"));
259    test(S("abcdefghij"), 11, "12345", 2, S("can't happen"));
260    test(S("abcdefghij"), 11, "12345", 4, S("can't happen"));
261    test(S("abcdefghij"), 11, "12345", 5, S("can't happen"));
262    test(S("abcdefghij"), 11, "1234567890", 0, S("can't happen"));
263    test(S("abcdefghij"), 11, "1234567890", 1, S("can't happen"));
264    test(S("abcdefghij"), 11, "1234567890", 5, S("can't happen"));
265    test(S("abcdefghij"), 11, "1234567890", 9, S("can't happen"));
266    test(S("abcdefghij"), 11, "1234567890", 10, S("can't happen"));
267    test(S("abcdefghij"), 11, "12345678901234567890", 0, S("can't happen"));
268    test(S("abcdefghij"), 11, "12345678901234567890", 1, S("can't happen"));
269    test(S("abcdefghij"), 11, "12345678901234567890", 10, S("can't happen"));
270    test(S("abcdefghij"), 11, "12345678901234567890", 19, S("can't happen"));
271    test(S("abcdefghij"), 11, "12345678901234567890", 20, S("can't happen"));
272    test(S("abcdefghijklmnopqrst"), 0, "", 0, S("abcdefghijklmnopqrst"));
273    test(S("abcdefghijklmnopqrst"), 0, "12345", 0, S("abcdefghijklmnopqrst"));
274    test(S("abcdefghijklmnopqrst"), 0, "12345", 1, S("1abcdefghijklmnopqrst"));
275    test(S("abcdefghijklmnopqrst"), 0, "12345", 2, S("12abcdefghijklmnopqrst"));
276    test(S("abcdefghijklmnopqrst"), 0, "12345", 4, S("1234abcdefghijklmnopqrst"));
277    test(S("abcdefghijklmnopqrst"), 0, "12345", 5, S("12345abcdefghijklmnopqrst"));
278    test(S("abcdefghijklmnopqrst"), 0, "1234567890", 0, S("abcdefghijklmnopqrst"));
279    test(S("abcdefghijklmnopqrst"), 0, "1234567890", 1, S("1abcdefghijklmnopqrst"));
280    test(S("abcdefghijklmnopqrst"), 0, "1234567890", 5, S("12345abcdefghijklmnopqrst"));
281    test(S("abcdefghijklmnopqrst"), 0, "1234567890", 9, S("123456789abcdefghijklmnopqrst"));
282    test(S("abcdefghijklmnopqrst"), 0, "1234567890", 10, S("1234567890abcdefghijklmnopqrst"));
283    test(S("abcdefghijklmnopqrst"), 0, "12345678901234567890", 0, S("abcdefghijklmnopqrst"));
284    test(S("abcdefghijklmnopqrst"), 0, "12345678901234567890", 1, S("1abcdefghijklmnopqrst"));
285    test(S("abcdefghijklmnopqrst"), 0, "12345678901234567890", 10, S("1234567890abcdefghijklmnopqrst"));
286    test(S("abcdefghijklmnopqrst"), 0, "12345678901234567890", 19, S("1234567890123456789abcdefghijklmnopqrst"));
287    test(S("abcdefghijklmnopqrst"), 0, "12345678901234567890", 20, S("12345678901234567890abcdefghijklmnopqrst"));
288    test(S("abcdefghijklmnopqrst"), 1, "", 0, S("abcdefghijklmnopqrst"));
289    test(S("abcdefghijklmnopqrst"), 1, "12345", 0, S("abcdefghijklmnopqrst"));
290    test(S("abcdefghijklmnopqrst"), 1, "12345", 1, S("a1bcdefghijklmnopqrst"));
291    test(S("abcdefghijklmnopqrst"), 1, "12345", 2, S("a12bcdefghijklmnopqrst"));
292    test(S("abcdefghijklmnopqrst"), 1, "12345", 4, S("a1234bcdefghijklmnopqrst"));
293    test(S("abcdefghijklmnopqrst"), 1, "12345", 5, S("a12345bcdefghijklmnopqrst"));
294    test(S("abcdefghijklmnopqrst"), 1, "1234567890", 0, S("abcdefghijklmnopqrst"));
295    test(S("abcdefghijklmnopqrst"), 1, "1234567890", 1, S("a1bcdefghijklmnopqrst"));
296    test(S("abcdefghijklmnopqrst"), 1, "1234567890", 5, S("a12345bcdefghijklmnopqrst"));
297    test(S("abcdefghijklmnopqrst"), 1, "1234567890", 9, S("a123456789bcdefghijklmnopqrst"));
298    test(S("abcdefghijklmnopqrst"), 1, "1234567890", 10, S("a1234567890bcdefghijklmnopqrst"));
299    test(S("abcdefghijklmnopqrst"), 1, "12345678901234567890", 0, S("abcdefghijklmnopqrst"));
300    test(S("abcdefghijklmnopqrst"), 1, "12345678901234567890", 1, S("a1bcdefghijklmnopqrst"));
301    test(S("abcdefghijklmnopqrst"), 1, "12345678901234567890", 10, S("a1234567890bcdefghijklmnopqrst"));
302    test(S("abcdefghijklmnopqrst"), 1, "12345678901234567890", 19, S("a1234567890123456789bcdefghijklmnopqrst"));
303    test(S("abcdefghijklmnopqrst"), 1, "12345678901234567890", 20, S("a12345678901234567890bcdefghijklmnopqrst"));
304    test(S("abcdefghijklmnopqrst"), 10, "", 0, S("abcdefghijklmnopqrst"));
305    test(S("abcdefghijklmnopqrst"), 10, "12345", 0, S("abcdefghijklmnopqrst"));
306    test(S("abcdefghijklmnopqrst"), 10, "12345", 1, S("abcdefghij1klmnopqrst"));
307    test(S("abcdefghijklmnopqrst"), 10, "12345", 2, S("abcdefghij12klmnopqrst"));
308    test(S("abcdefghijklmnopqrst"), 10, "12345", 4, S("abcdefghij1234klmnopqrst"));
309    test(S("abcdefghijklmnopqrst"), 10, "12345", 5, S("abcdefghij12345klmnopqrst"));
310    test(S("abcdefghijklmnopqrst"), 10, "1234567890", 0, S("abcdefghijklmnopqrst"));
311    test(S("abcdefghijklmnopqrst"), 10, "1234567890", 1, S("abcdefghij1klmnopqrst"));
312    test(S("abcdefghijklmnopqrst"), 10, "1234567890", 5, S("abcdefghij12345klmnopqrst"));
313    test(S("abcdefghijklmnopqrst"), 10, "1234567890", 9, S("abcdefghij123456789klmnopqrst"));
314    test(S("abcdefghijklmnopqrst"), 10, "1234567890", 10, S("abcdefghij1234567890klmnopqrst"));
315    test(S("abcdefghijklmnopqrst"), 10, "12345678901234567890", 0, S("abcdefghijklmnopqrst"));
316    test(S("abcdefghijklmnopqrst"), 10, "12345678901234567890", 1, S("abcdefghij1klmnopqrst"));
317    test(S("abcdefghijklmnopqrst"), 10, "12345678901234567890", 10, S("abcdefghij1234567890klmnopqrst"));
318    test(S("abcdefghijklmnopqrst"), 10, "12345678901234567890", 19, S("abcdefghij1234567890123456789klmnopqrst"));
319    test(S("abcdefghijklmnopqrst"), 10, "12345678901234567890", 20, S("abcdefghij12345678901234567890klmnopqrst"));
320    test(S("abcdefghijklmnopqrst"), 19, "", 0, S("abcdefghijklmnopqrst"));
321    test(S("abcdefghijklmnopqrst"), 19, "12345", 0, S("abcdefghijklmnopqrst"));
322    test(S("abcdefghijklmnopqrst"), 19, "12345", 1, S("abcdefghijklmnopqrs1t"));
323    test(S("abcdefghijklmnopqrst"), 19, "12345", 2, S("abcdefghijklmnopqrs12t"));
324    test(S("abcdefghijklmnopqrst"), 19, "12345", 4, S("abcdefghijklmnopqrs1234t"));
325    test(S("abcdefghijklmnopqrst"), 19, "12345", 5, S("abcdefghijklmnopqrs12345t"));
326    test(S("abcdefghijklmnopqrst"), 19, "1234567890", 0, S("abcdefghijklmnopqrst"));
327    test(S("abcdefghijklmnopqrst"), 19, "1234567890", 1, S("abcdefghijklmnopqrs1t"));
328    test(S("abcdefghijklmnopqrst"), 19, "1234567890", 5, S("abcdefghijklmnopqrs12345t"));
329    test(S("abcdefghijklmnopqrst"), 19, "1234567890", 9, S("abcdefghijklmnopqrs123456789t"));
330    test(S("abcdefghijklmnopqrst"), 19, "1234567890", 10, S("abcdefghijklmnopqrs1234567890t"));
331    test(S("abcdefghijklmnopqrst"), 19, "12345678901234567890", 0, S("abcdefghijklmnopqrst"));
332    test(S("abcdefghijklmnopqrst"), 19, "12345678901234567890", 1, S("abcdefghijklmnopqrs1t"));
333    test(S("abcdefghijklmnopqrst"), 19, "12345678901234567890", 10, S("abcdefghijklmnopqrs1234567890t"));
334    test(S("abcdefghijklmnopqrst"), 19, "12345678901234567890", 19, S("abcdefghijklmnopqrs1234567890123456789t"));
335    test(S("abcdefghijklmnopqrst"), 19, "12345678901234567890", 20, S("abcdefghijklmnopqrs12345678901234567890t"));
336    test(S("abcdefghijklmnopqrst"), 20, "", 0, S("abcdefghijklmnopqrst"));
337    test(S("abcdefghijklmnopqrst"), 20, "12345", 0, S("abcdefghijklmnopqrst"));
338    test(S("abcdefghijklmnopqrst"), 20, "12345", 1, S("abcdefghijklmnopqrst1"));
339    test(S("abcdefghijklmnopqrst"), 20, "12345", 2, S("abcdefghijklmnopqrst12"));
340    test(S("abcdefghijklmnopqrst"), 20, "12345", 4, S("abcdefghijklmnopqrst1234"));
341    test(S("abcdefghijklmnopqrst"), 20, "12345", 5, S("abcdefghijklmnopqrst12345"));
342    test(S("abcdefghijklmnopqrst"), 20, "1234567890", 0, S("abcdefghijklmnopqrst"));
343    test(S("abcdefghijklmnopqrst"), 20, "1234567890", 1, S("abcdefghijklmnopqrst1"));
344    test(S("abcdefghijklmnopqrst"), 20, "1234567890", 5, S("abcdefghijklmnopqrst12345"));
345    test(S("abcdefghijklmnopqrst"), 20, "1234567890", 9, S("abcdefghijklmnopqrst123456789"));
346    test(S("abcdefghijklmnopqrst"), 20, "1234567890", 10, S("abcdefghijklmnopqrst1234567890"));
347    test(S("abcdefghijklmnopqrst"), 20, "12345678901234567890", 0, S("abcdefghijklmnopqrst"));
348    test(S("abcdefghijklmnopqrst"), 20, "12345678901234567890", 1, S("abcdefghijklmnopqrst1"));
349    test(S("abcdefghijklmnopqrst"), 20, "12345678901234567890", 10, S("abcdefghijklmnopqrst1234567890"));
350    test(S("abcdefghijklmnopqrst"), 20, "12345678901234567890", 19, S("abcdefghijklmnopqrst1234567890123456789"));
351    test(S("abcdefghijklmnopqrst"), 20, "12345678901234567890", 20, S("abcdefghijklmnopqrst12345678901234567890"));
352    test(S("abcdefghijklmnopqrst"), 21, "", 0, S("can't happen"));
353    test(S("abcdefghijklmnopqrst"), 21, "12345", 0, S("can't happen"));
354    test(S("abcdefghijklmnopqrst"), 21, "12345", 1, S("can't happen"));
355    test(S("abcdefghijklmnopqrst"), 21, "12345", 2, S("can't happen"));
356    test(S("abcdefghijklmnopqrst"), 21, "12345", 4, S("can't happen"));
357    test(S("abcdefghijklmnopqrst"), 21, "12345", 5, S("can't happen"));
358    test(S("abcdefghijklmnopqrst"), 21, "1234567890", 0, S("can't happen"));
359    test(S("abcdefghijklmnopqrst"), 21, "1234567890", 1, S("can't happen"));
360    test(S("abcdefghijklmnopqrst"), 21, "1234567890", 5, S("can't happen"));
361    test(S("abcdefghijklmnopqrst"), 21, "1234567890", 9, S("can't happen"));
362    test(S("abcdefghijklmnopqrst"), 21, "1234567890", 10, S("can't happen"));
363    test(S("abcdefghijklmnopqrst"), 21, "12345678901234567890", 0, S("can't happen"));
364    test(S("abcdefghijklmnopqrst"), 21, "12345678901234567890", 1, S("can't happen"));
365    test(S("abcdefghijklmnopqrst"), 21, "12345678901234567890", 10, S("can't happen"));
366    test(S("abcdefghijklmnopqrst"), 21, "12345678901234567890", 19, S("can't happen"));
367    test(S("abcdefghijklmnopqrst"), 21, "12345678901234567890", 20, S("can't happen"));
368    }
369#if TEST_STD_VER >= 11
370    {
371    typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
372    test(S(""), 0, "", 0, S(""));
373    test(S(""), 0, "12345", 0, S(""));
374    test(S(""), 0, "12345", 1, S("1"));
375    test(S(""), 0, "12345", 2, S("12"));
376    test(S(""), 0, "12345", 4, S("1234"));
377    test(S(""), 0, "12345", 5, S("12345"));
378    test(S(""), 0, "1234567890", 0, S(""));
379    test(S(""), 0, "1234567890", 1, S("1"));
380    test(S(""), 0, "1234567890", 5, S("12345"));
381    test(S(""), 0, "1234567890", 9, S("123456789"));
382    test(S(""), 0, "1234567890", 10, S("1234567890"));
383    test(S(""), 0, "12345678901234567890", 0, S(""));
384    test(S(""), 0, "12345678901234567890", 1, S("1"));
385    test(S(""), 0, "12345678901234567890", 10, S("1234567890"));
386    test(S(""), 0, "12345678901234567890", 19, S("1234567890123456789"));
387    test(S(""), 0, "12345678901234567890", 20, S("12345678901234567890"));
388    test(S(""), 1, "", 0, S("can't happen"));
389    test(S(""), 1, "12345", 0, S("can't happen"));
390    test(S(""), 1, "12345", 1, S("can't happen"));
391    test(S(""), 1, "12345", 2, S("can't happen"));
392    test(S(""), 1, "12345", 4, S("can't happen"));
393    test(S(""), 1, "12345", 5, S("can't happen"));
394    test(S(""), 1, "1234567890", 0, S("can't happen"));
395    test(S(""), 1, "1234567890", 1, S("can't happen"));
396    test(S(""), 1, "1234567890", 5, S("can't happen"));
397    test(S(""), 1, "1234567890", 9, S("can't happen"));
398    test(S(""), 1, "1234567890", 10, S("can't happen"));
399    test(S(""), 1, "12345678901234567890", 0, S("can't happen"));
400    test(S(""), 1, "12345678901234567890", 1, S("can't happen"));
401    test(S(""), 1, "12345678901234567890", 10, S("can't happen"));
402    test(S(""), 1, "12345678901234567890", 19, S("can't happen"));
403    test(S(""), 1, "12345678901234567890", 20, S("can't happen"));
404    test(S("abcde"), 0, "", 0, S("abcde"));
405    test(S("abcde"), 0, "12345", 0, S("abcde"));
406    test(S("abcde"), 0, "12345", 1, S("1abcde"));
407    test(S("abcde"), 0, "12345", 2, S("12abcde"));
408    test(S("abcde"), 0, "12345", 4, S("1234abcde"));
409    test(S("abcde"), 0, "12345", 5, S("12345abcde"));
410    test(S("abcde"), 0, "1234567890", 0, S("abcde"));
411    test(S("abcde"), 0, "1234567890", 1, S("1abcde"));
412    test(S("abcde"), 0, "1234567890", 5, S("12345abcde"));
413    test(S("abcde"), 0, "1234567890", 9, S("123456789abcde"));
414    test(S("abcde"), 0, "1234567890", 10, S("1234567890abcde"));
415    test(S("abcde"), 0, "12345678901234567890", 0, S("abcde"));
416    test(S("abcde"), 0, "12345678901234567890", 1, S("1abcde"));
417    test(S("abcde"), 0, "12345678901234567890", 10, S("1234567890abcde"));
418    test(S("abcde"), 0, "12345678901234567890", 19, S("1234567890123456789abcde"));
419    test(S("abcde"), 0, "12345678901234567890", 20, S("12345678901234567890abcde"));
420    test(S("abcde"), 1, "", 0, S("abcde"));
421    test(S("abcde"), 1, "12345", 0, S("abcde"));
422    test(S("abcde"), 1, "12345", 1, S("a1bcde"));
423    test(S("abcde"), 1, "12345", 2, S("a12bcde"));
424    test(S("abcde"), 1, "12345", 4, S("a1234bcde"));
425    test(S("abcde"), 1, "12345", 5, S("a12345bcde"));
426    test(S("abcde"), 1, "1234567890", 0, S("abcde"));
427    test(S("abcde"), 1, "1234567890", 1, S("a1bcde"));
428    test(S("abcde"), 1, "1234567890", 5, S("a12345bcde"));
429    test(S("abcde"), 1, "1234567890", 9, S("a123456789bcde"));
430    test(S("abcde"), 1, "1234567890", 10, S("a1234567890bcde"));
431    test(S("abcde"), 1, "12345678901234567890", 0, S("abcde"));
432    test(S("abcde"), 1, "12345678901234567890", 1, S("a1bcde"));
433    test(S("abcde"), 1, "12345678901234567890", 10, S("a1234567890bcde"));
434    test(S("abcde"), 1, "12345678901234567890", 19, S("a1234567890123456789bcde"));
435    test(S("abcde"), 1, "12345678901234567890", 20, S("a12345678901234567890bcde"));
436    test(S("abcde"), 2, "", 0, S("abcde"));
437    test(S("abcde"), 2, "12345", 0, S("abcde"));
438    test(S("abcde"), 2, "12345", 1, S("ab1cde"));
439    test(S("abcde"), 2, "12345", 2, S("ab12cde"));
440    test(S("abcde"), 2, "12345", 4, S("ab1234cde"));
441    test(S("abcde"), 2, "12345", 5, S("ab12345cde"));
442    test(S("abcde"), 2, "1234567890", 0, S("abcde"));
443    test(S("abcde"), 2, "1234567890", 1, S("ab1cde"));
444    test(S("abcde"), 2, "1234567890", 5, S("ab12345cde"));
445    test(S("abcde"), 2, "1234567890", 9, S("ab123456789cde"));
446    test(S("abcde"), 2, "1234567890", 10, S("ab1234567890cde"));
447    test(S("abcde"), 2, "12345678901234567890", 0, S("abcde"));
448    test(S("abcde"), 2, "12345678901234567890", 1, S("ab1cde"));
449    test(S("abcde"), 2, "12345678901234567890", 10, S("ab1234567890cde"));
450    test(S("abcde"), 2, "12345678901234567890", 19, S("ab1234567890123456789cde"));
451    test(S("abcde"), 2, "12345678901234567890", 20, S("ab12345678901234567890cde"));
452    test(S("abcde"), 4, "", 0, S("abcde"));
453    test(S("abcde"), 4, "12345", 0, S("abcde"));
454    test(S("abcde"), 4, "12345", 1, S("abcd1e"));
455    test(S("abcde"), 4, "12345", 2, S("abcd12e"));
456    test(S("abcde"), 4, "12345", 4, S("abcd1234e"));
457    test(S("abcde"), 4, "12345", 5, S("abcd12345e"));
458    test(S("abcde"), 4, "1234567890", 0, S("abcde"));
459    test(S("abcde"), 4, "1234567890", 1, S("abcd1e"));
460    test(S("abcde"), 4, "1234567890", 5, S("abcd12345e"));
461    test(S("abcde"), 4, "1234567890", 9, S("abcd123456789e"));
462    test(S("abcde"), 4, "1234567890", 10, S("abcd1234567890e"));
463    test(S("abcde"), 4, "12345678901234567890", 0, S("abcde"));
464    test(S("abcde"), 4, "12345678901234567890", 1, S("abcd1e"));
465    test(S("abcde"), 4, "12345678901234567890", 10, S("abcd1234567890e"));
466    test(S("abcde"), 4, "12345678901234567890", 19, S("abcd1234567890123456789e"));
467    test(S("abcde"), 4, "12345678901234567890", 20, S("abcd12345678901234567890e"));
468    test(S("abcde"), 5, "", 0, S("abcde"));
469    test(S("abcde"), 5, "12345", 0, S("abcde"));
470    test(S("abcde"), 5, "12345", 1, S("abcde1"));
471    test(S("abcde"), 5, "12345", 2, S("abcde12"));
472    test(S("abcde"), 5, "12345", 4, S("abcde1234"));
473    test(S("abcde"), 5, "12345", 5, S("abcde12345"));
474    test(S("abcde"), 5, "1234567890", 0, S("abcde"));
475    test(S("abcde"), 5, "1234567890", 1, S("abcde1"));
476    test(S("abcde"), 5, "1234567890", 5, S("abcde12345"));
477    test(S("abcde"), 5, "1234567890", 9, S("abcde123456789"));
478    test(S("abcde"), 5, "1234567890", 10, S("abcde1234567890"));
479    test(S("abcde"), 5, "12345678901234567890", 0, S("abcde"));
480    test(S("abcde"), 5, "12345678901234567890", 1, S("abcde1"));
481    test(S("abcde"), 5, "12345678901234567890", 10, S("abcde1234567890"));
482    test(S("abcde"), 5, "12345678901234567890", 19, S("abcde1234567890123456789"));
483    test(S("abcde"), 5, "12345678901234567890", 20, S("abcde12345678901234567890"));
484    test(S("abcde"), 6, "", 0, S("can't happen"));
485    test(S("abcde"), 6, "12345", 0, S("can't happen"));
486    test(S("abcde"), 6, "12345", 1, S("can't happen"));
487    test(S("abcde"), 6, "12345", 2, S("can't happen"));
488    test(S("abcde"), 6, "12345", 4, S("can't happen"));
489    test(S("abcde"), 6, "12345", 5, S("can't happen"));
490    test(S("abcde"), 6, "1234567890", 0, S("can't happen"));
491    test(S("abcde"), 6, "1234567890", 1, S("can't happen"));
492    test(S("abcde"), 6, "1234567890", 5, S("can't happen"));
493    test(S("abcde"), 6, "1234567890", 9, S("can't happen"));
494    test(S("abcde"), 6, "1234567890", 10, S("can't happen"));
495    test(S("abcde"), 6, "12345678901234567890", 0, S("can't happen"));
496    test(S("abcde"), 6, "12345678901234567890", 1, S("can't happen"));
497    test(S("abcde"), 6, "12345678901234567890", 10, S("can't happen"));
498    test(S("abcde"), 6, "12345678901234567890", 19, S("can't happen"));
499    test(S("abcde"), 6, "12345678901234567890", 20, S("can't happen"));
500    test(S("abcdefghij"), 0, "", 0, S("abcdefghij"));
501    test(S("abcdefghij"), 0, "12345", 0, S("abcdefghij"));
502    test(S("abcdefghij"), 0, "12345", 1, S("1abcdefghij"));
503    test(S("abcdefghij"), 0, "12345", 2, S("12abcdefghij"));
504    test(S("abcdefghij"), 0, "12345", 4, S("1234abcdefghij"));
505    test(S("abcdefghij"), 0, "12345", 5, S("12345abcdefghij"));
506    test(S("abcdefghij"), 0, "1234567890", 0, S("abcdefghij"));
507    test(S("abcdefghij"), 0, "1234567890", 1, S("1abcdefghij"));
508    test(S("abcdefghij"), 0, "1234567890", 5, S("12345abcdefghij"));
509    test(S("abcdefghij"), 0, "1234567890", 9, S("123456789abcdefghij"));
510    test(S("abcdefghij"), 0, "1234567890", 10, S("1234567890abcdefghij"));
511    test(S("abcdefghij"), 0, "12345678901234567890", 0, S("abcdefghij"));
512    test(S("abcdefghij"), 0, "12345678901234567890", 1, S("1abcdefghij"));
513    test(S("abcdefghij"), 0, "12345678901234567890", 10, S("1234567890abcdefghij"));
514    test(S("abcdefghij"), 0, "12345678901234567890", 19, S("1234567890123456789abcdefghij"));
515    test(S("abcdefghij"), 0, "12345678901234567890", 20, S("12345678901234567890abcdefghij"));
516    test(S("abcdefghij"), 1, "", 0, S("abcdefghij"));
517    test(S("abcdefghij"), 1, "12345", 0, S("abcdefghij"));
518    test(S("abcdefghij"), 1, "12345", 1, S("a1bcdefghij"));
519    test(S("abcdefghij"), 1, "12345", 2, S("a12bcdefghij"));
520    test(S("abcdefghij"), 1, "12345", 4, S("a1234bcdefghij"));
521    test(S("abcdefghij"), 1, "12345", 5, S("a12345bcdefghij"));
522    test(S("abcdefghij"), 1, "1234567890", 0, S("abcdefghij"));
523    test(S("abcdefghij"), 1, "1234567890", 1, S("a1bcdefghij"));
524    test(S("abcdefghij"), 1, "1234567890", 5, S("a12345bcdefghij"));
525    test(S("abcdefghij"), 1, "1234567890", 9, S("a123456789bcdefghij"));
526    test(S("abcdefghij"), 1, "1234567890", 10, S("a1234567890bcdefghij"));
527    test(S("abcdefghij"), 1, "12345678901234567890", 0, S("abcdefghij"));
528    test(S("abcdefghij"), 1, "12345678901234567890", 1, S("a1bcdefghij"));
529    test(S("abcdefghij"), 1, "12345678901234567890", 10, S("a1234567890bcdefghij"));
530    test(S("abcdefghij"), 1, "12345678901234567890", 19, S("a1234567890123456789bcdefghij"));
531    test(S("abcdefghij"), 1, "12345678901234567890", 20, S("a12345678901234567890bcdefghij"));
532    test(S("abcdefghij"), 5, "", 0, S("abcdefghij"));
533    test(S("abcdefghij"), 5, "12345", 0, S("abcdefghij"));
534    test(S("abcdefghij"), 5, "12345", 1, S("abcde1fghij"));
535    test(S("abcdefghij"), 5, "12345", 2, S("abcde12fghij"));
536    test(S("abcdefghij"), 5, "12345", 4, S("abcde1234fghij"));
537    test(S("abcdefghij"), 5, "12345", 5, S("abcde12345fghij"));
538    test(S("abcdefghij"), 5, "1234567890", 0, S("abcdefghij"));
539    test(S("abcdefghij"), 5, "1234567890", 1, S("abcde1fghij"));
540    test(S("abcdefghij"), 5, "1234567890", 5, S("abcde12345fghij"));
541    test(S("abcdefghij"), 5, "1234567890", 9, S("abcde123456789fghij"));
542    test(S("abcdefghij"), 5, "1234567890", 10, S("abcde1234567890fghij"));
543    test(S("abcdefghij"), 5, "12345678901234567890", 0, S("abcdefghij"));
544    test(S("abcdefghij"), 5, "12345678901234567890", 1, S("abcde1fghij"));
545    test(S("abcdefghij"), 5, "12345678901234567890", 10, S("abcde1234567890fghij"));
546    test(S("abcdefghij"), 5, "12345678901234567890", 19, S("abcde1234567890123456789fghij"));
547    test(S("abcdefghij"), 5, "12345678901234567890", 20, S("abcde12345678901234567890fghij"));
548    test(S("abcdefghij"), 9, "", 0, S("abcdefghij"));
549    test(S("abcdefghij"), 9, "12345", 0, S("abcdefghij"));
550    test(S("abcdefghij"), 9, "12345", 1, S("abcdefghi1j"));
551    test(S("abcdefghij"), 9, "12345", 2, S("abcdefghi12j"));
552    test(S("abcdefghij"), 9, "12345", 4, S("abcdefghi1234j"));
553    test(S("abcdefghij"), 9, "12345", 5, S("abcdefghi12345j"));
554    test(S("abcdefghij"), 9, "1234567890", 0, S("abcdefghij"));
555    test(S("abcdefghij"), 9, "1234567890", 1, S("abcdefghi1j"));
556    test(S("abcdefghij"), 9, "1234567890", 5, S("abcdefghi12345j"));
557    test(S("abcdefghij"), 9, "1234567890", 9, S("abcdefghi123456789j"));
558    test(S("abcdefghij"), 9, "1234567890", 10, S("abcdefghi1234567890j"));
559    test(S("abcdefghij"), 9, "12345678901234567890", 0, S("abcdefghij"));
560    test(S("abcdefghij"), 9, "12345678901234567890", 1, S("abcdefghi1j"));
561    test(S("abcdefghij"), 9, "12345678901234567890", 10, S("abcdefghi1234567890j"));
562    test(S("abcdefghij"), 9, "12345678901234567890", 19, S("abcdefghi1234567890123456789j"));
563    test(S("abcdefghij"), 9, "12345678901234567890", 20, S("abcdefghi12345678901234567890j"));
564    test(S("abcdefghij"), 10, "", 0, S("abcdefghij"));
565    test(S("abcdefghij"), 10, "12345", 0, S("abcdefghij"));
566    test(S("abcdefghij"), 10, "12345", 1, S("abcdefghij1"));
567    test(S("abcdefghij"), 10, "12345", 2, S("abcdefghij12"));
568    test(S("abcdefghij"), 10, "12345", 4, S("abcdefghij1234"));
569    test(S("abcdefghij"), 10, "12345", 5, S("abcdefghij12345"));
570    test(S("abcdefghij"), 10, "1234567890", 0, S("abcdefghij"));
571    test(S("abcdefghij"), 10, "1234567890", 1, S("abcdefghij1"));
572    test(S("abcdefghij"), 10, "1234567890", 5, S("abcdefghij12345"));
573    test(S("abcdefghij"), 10, "1234567890", 9, S("abcdefghij123456789"));
574    test(S("abcdefghij"), 10, "1234567890", 10, S("abcdefghij1234567890"));
575    test(S("abcdefghij"), 10, "12345678901234567890", 0, S("abcdefghij"));
576    test(S("abcdefghij"), 10, "12345678901234567890", 1, S("abcdefghij1"));
577    test(S("abcdefghij"), 10, "12345678901234567890", 10, S("abcdefghij1234567890"));
578    test(S("abcdefghij"), 10, "12345678901234567890", 19, S("abcdefghij1234567890123456789"));
579    test(S("abcdefghij"), 10, "12345678901234567890", 20, S("abcdefghij12345678901234567890"));
580    test(S("abcdefghij"), 11, "", 0, S("can't happen"));
581    test(S("abcdefghij"), 11, "12345", 0, S("can't happen"));
582    test(S("abcdefghij"), 11, "12345", 1, S("can't happen"));
583    test(S("abcdefghij"), 11, "12345", 2, S("can't happen"));
584    test(S("abcdefghij"), 11, "12345", 4, S("can't happen"));
585    test(S("abcdefghij"), 11, "12345", 5, S("can't happen"));
586    test(S("abcdefghij"), 11, "1234567890", 0, S("can't happen"));
587    test(S("abcdefghij"), 11, "1234567890", 1, S("can't happen"));
588    test(S("abcdefghij"), 11, "1234567890", 5, S("can't happen"));
589    test(S("abcdefghij"), 11, "1234567890", 9, S("can't happen"));
590    test(S("abcdefghij"), 11, "1234567890", 10, S("can't happen"));
591    test(S("abcdefghij"), 11, "12345678901234567890", 0, S("can't happen"));
592    test(S("abcdefghij"), 11, "12345678901234567890", 1, S("can't happen"));
593    test(S("abcdefghij"), 11, "12345678901234567890", 10, S("can't happen"));
594    test(S("abcdefghij"), 11, "12345678901234567890", 19, S("can't happen"));
595    test(S("abcdefghij"), 11, "12345678901234567890", 20, S("can't happen"));
596    test(S("abcdefghijklmnopqrst"), 0, "", 0, S("abcdefghijklmnopqrst"));
597    test(S("abcdefghijklmnopqrst"), 0, "12345", 0, S("abcdefghijklmnopqrst"));
598    test(S("abcdefghijklmnopqrst"), 0, "12345", 1, S("1abcdefghijklmnopqrst"));
599    test(S("abcdefghijklmnopqrst"), 0, "12345", 2, S("12abcdefghijklmnopqrst"));
600    test(S("abcdefghijklmnopqrst"), 0, "12345", 4, S("1234abcdefghijklmnopqrst"));
601    test(S("abcdefghijklmnopqrst"), 0, "12345", 5, S("12345abcdefghijklmnopqrst"));
602    test(S("abcdefghijklmnopqrst"), 0, "1234567890", 0, S("abcdefghijklmnopqrst"));
603    test(S("abcdefghijklmnopqrst"), 0, "1234567890", 1, S("1abcdefghijklmnopqrst"));
604    test(S("abcdefghijklmnopqrst"), 0, "1234567890", 5, S("12345abcdefghijklmnopqrst"));
605    test(S("abcdefghijklmnopqrst"), 0, "1234567890", 9, S("123456789abcdefghijklmnopqrst"));
606    test(S("abcdefghijklmnopqrst"), 0, "1234567890", 10, S("1234567890abcdefghijklmnopqrst"));
607    test(S("abcdefghijklmnopqrst"), 0, "12345678901234567890", 0, S("abcdefghijklmnopqrst"));
608    test(S("abcdefghijklmnopqrst"), 0, "12345678901234567890", 1, S("1abcdefghijklmnopqrst"));
609    test(S("abcdefghijklmnopqrst"), 0, "12345678901234567890", 10, S("1234567890abcdefghijklmnopqrst"));
610    test(S("abcdefghijklmnopqrst"), 0, "12345678901234567890", 19, S("1234567890123456789abcdefghijklmnopqrst"));
611    test(S("abcdefghijklmnopqrst"), 0, "12345678901234567890", 20, S("12345678901234567890abcdefghijklmnopqrst"));
612    test(S("abcdefghijklmnopqrst"), 1, "", 0, S("abcdefghijklmnopqrst"));
613    test(S("abcdefghijklmnopqrst"), 1, "12345", 0, S("abcdefghijklmnopqrst"));
614    test(S("abcdefghijklmnopqrst"), 1, "12345", 1, S("a1bcdefghijklmnopqrst"));
615    test(S("abcdefghijklmnopqrst"), 1, "12345", 2, S("a12bcdefghijklmnopqrst"));
616    test(S("abcdefghijklmnopqrst"), 1, "12345", 4, S("a1234bcdefghijklmnopqrst"));
617    test(S("abcdefghijklmnopqrst"), 1, "12345", 5, S("a12345bcdefghijklmnopqrst"));
618    test(S("abcdefghijklmnopqrst"), 1, "1234567890", 0, S("abcdefghijklmnopqrst"));
619    test(S("abcdefghijklmnopqrst"), 1, "1234567890", 1, S("a1bcdefghijklmnopqrst"));
620    test(S("abcdefghijklmnopqrst"), 1, "1234567890", 5, S("a12345bcdefghijklmnopqrst"));
621    test(S("abcdefghijklmnopqrst"), 1, "1234567890", 9, S("a123456789bcdefghijklmnopqrst"));
622    test(S("abcdefghijklmnopqrst"), 1, "1234567890", 10, S("a1234567890bcdefghijklmnopqrst"));
623    test(S("abcdefghijklmnopqrst"), 1, "12345678901234567890", 0, S("abcdefghijklmnopqrst"));
624    test(S("abcdefghijklmnopqrst"), 1, "12345678901234567890", 1, S("a1bcdefghijklmnopqrst"));
625    test(S("abcdefghijklmnopqrst"), 1, "12345678901234567890", 10, S("a1234567890bcdefghijklmnopqrst"));
626    test(S("abcdefghijklmnopqrst"), 1, "12345678901234567890", 19, S("a1234567890123456789bcdefghijklmnopqrst"));
627    test(S("abcdefghijklmnopqrst"), 1, "12345678901234567890", 20, S("a12345678901234567890bcdefghijklmnopqrst"));
628    test(S("abcdefghijklmnopqrst"), 10, "", 0, S("abcdefghijklmnopqrst"));
629    test(S("abcdefghijklmnopqrst"), 10, "12345", 0, S("abcdefghijklmnopqrst"));
630    test(S("abcdefghijklmnopqrst"), 10, "12345", 1, S("abcdefghij1klmnopqrst"));
631    test(S("abcdefghijklmnopqrst"), 10, "12345", 2, S("abcdefghij12klmnopqrst"));
632    test(S("abcdefghijklmnopqrst"), 10, "12345", 4, S("abcdefghij1234klmnopqrst"));
633    test(S("abcdefghijklmnopqrst"), 10, "12345", 5, S("abcdefghij12345klmnopqrst"));
634    test(S("abcdefghijklmnopqrst"), 10, "1234567890", 0, S("abcdefghijklmnopqrst"));
635    test(S("abcdefghijklmnopqrst"), 10, "1234567890", 1, S("abcdefghij1klmnopqrst"));
636    test(S("abcdefghijklmnopqrst"), 10, "1234567890", 5, S("abcdefghij12345klmnopqrst"));
637    test(S("abcdefghijklmnopqrst"), 10, "1234567890", 9, S("abcdefghij123456789klmnopqrst"));
638    test(S("abcdefghijklmnopqrst"), 10, "1234567890", 10, S("abcdefghij1234567890klmnopqrst"));
639    test(S("abcdefghijklmnopqrst"), 10, "12345678901234567890", 0, S("abcdefghijklmnopqrst"));
640    test(S("abcdefghijklmnopqrst"), 10, "12345678901234567890", 1, S("abcdefghij1klmnopqrst"));
641    test(S("abcdefghijklmnopqrst"), 10, "12345678901234567890", 10, S("abcdefghij1234567890klmnopqrst"));
642    test(S("abcdefghijklmnopqrst"), 10, "12345678901234567890", 19, S("abcdefghij1234567890123456789klmnopqrst"));
643    test(S("abcdefghijklmnopqrst"), 10, "12345678901234567890", 20, S("abcdefghij12345678901234567890klmnopqrst"));
644    test(S("abcdefghijklmnopqrst"), 19, "", 0, S("abcdefghijklmnopqrst"));
645    test(S("abcdefghijklmnopqrst"), 19, "12345", 0, S("abcdefghijklmnopqrst"));
646    test(S("abcdefghijklmnopqrst"), 19, "12345", 1, S("abcdefghijklmnopqrs1t"));
647    test(S("abcdefghijklmnopqrst"), 19, "12345", 2, S("abcdefghijklmnopqrs12t"));
648    test(S("abcdefghijklmnopqrst"), 19, "12345", 4, S("abcdefghijklmnopqrs1234t"));
649    test(S("abcdefghijklmnopqrst"), 19, "12345", 5, S("abcdefghijklmnopqrs12345t"));
650    test(S("abcdefghijklmnopqrst"), 19, "1234567890", 0, S("abcdefghijklmnopqrst"));
651    test(S("abcdefghijklmnopqrst"), 19, "1234567890", 1, S("abcdefghijklmnopqrs1t"));
652    test(S("abcdefghijklmnopqrst"), 19, "1234567890", 5, S("abcdefghijklmnopqrs12345t"));
653    test(S("abcdefghijklmnopqrst"), 19, "1234567890", 9, S("abcdefghijklmnopqrs123456789t"));
654    test(S("abcdefghijklmnopqrst"), 19, "1234567890", 10, S("abcdefghijklmnopqrs1234567890t"));
655    test(S("abcdefghijklmnopqrst"), 19, "12345678901234567890", 0, S("abcdefghijklmnopqrst"));
656    test(S("abcdefghijklmnopqrst"), 19, "12345678901234567890", 1, S("abcdefghijklmnopqrs1t"));
657    test(S("abcdefghijklmnopqrst"), 19, "12345678901234567890", 10, S("abcdefghijklmnopqrs1234567890t"));
658    test(S("abcdefghijklmnopqrst"), 19, "12345678901234567890", 19, S("abcdefghijklmnopqrs1234567890123456789t"));
659    test(S("abcdefghijklmnopqrst"), 19, "12345678901234567890", 20, S("abcdefghijklmnopqrs12345678901234567890t"));
660    test(S("abcdefghijklmnopqrst"), 20, "", 0, S("abcdefghijklmnopqrst"));
661    test(S("abcdefghijklmnopqrst"), 20, "12345", 0, S("abcdefghijklmnopqrst"));
662    test(S("abcdefghijklmnopqrst"), 20, "12345", 1, S("abcdefghijklmnopqrst1"));
663    test(S("abcdefghijklmnopqrst"), 20, "12345", 2, S("abcdefghijklmnopqrst12"));
664    test(S("abcdefghijklmnopqrst"), 20, "12345", 4, S("abcdefghijklmnopqrst1234"));
665    test(S("abcdefghijklmnopqrst"), 20, "12345", 5, S("abcdefghijklmnopqrst12345"));
666    test(S("abcdefghijklmnopqrst"), 20, "1234567890", 0, S("abcdefghijklmnopqrst"));
667    test(S("abcdefghijklmnopqrst"), 20, "1234567890", 1, S("abcdefghijklmnopqrst1"));
668    test(S("abcdefghijklmnopqrst"), 20, "1234567890", 5, S("abcdefghijklmnopqrst12345"));
669    test(S("abcdefghijklmnopqrst"), 20, "1234567890", 9, S("abcdefghijklmnopqrst123456789"));
670    test(S("abcdefghijklmnopqrst"), 20, "1234567890", 10, S("abcdefghijklmnopqrst1234567890"));
671    test(S("abcdefghijklmnopqrst"), 20, "12345678901234567890", 0, S("abcdefghijklmnopqrst"));
672    test(S("abcdefghijklmnopqrst"), 20, "12345678901234567890", 1, S("abcdefghijklmnopqrst1"));
673    test(S("abcdefghijklmnopqrst"), 20, "12345678901234567890", 10, S("abcdefghijklmnopqrst1234567890"));
674    test(S("abcdefghijklmnopqrst"), 20, "12345678901234567890", 19, S("abcdefghijklmnopqrst1234567890123456789"));
675    test(S("abcdefghijklmnopqrst"), 20, "12345678901234567890", 20, S("abcdefghijklmnopqrst12345678901234567890"));
676    test(S("abcdefghijklmnopqrst"), 21, "", 0, S("can't happen"));
677    test(S("abcdefghijklmnopqrst"), 21, "12345", 0, S("can't happen"));
678    test(S("abcdefghijklmnopqrst"), 21, "12345", 1, S("can't happen"));
679    test(S("abcdefghijklmnopqrst"), 21, "12345", 2, S("can't happen"));
680    test(S("abcdefghijklmnopqrst"), 21, "12345", 4, S("can't happen"));
681    test(S("abcdefghijklmnopqrst"), 21, "12345", 5, S("can't happen"));
682    test(S("abcdefghijklmnopqrst"), 21, "1234567890", 0, S("can't happen"));
683    test(S("abcdefghijklmnopqrst"), 21, "1234567890", 1, S("can't happen"));
684    test(S("abcdefghijklmnopqrst"), 21, "1234567890", 5, S("can't happen"));
685    test(S("abcdefghijklmnopqrst"), 21, "1234567890", 9, S("can't happen"));
686    test(S("abcdefghijklmnopqrst"), 21, "1234567890", 10, S("can't happen"));
687    test(S("abcdefghijklmnopqrst"), 21, "12345678901234567890", 0, S("can't happen"));
688    test(S("abcdefghijklmnopqrst"), 21, "12345678901234567890", 1, S("can't happen"));
689    test(S("abcdefghijklmnopqrst"), 21, "12345678901234567890", 10, S("can't happen"));
690    test(S("abcdefghijklmnopqrst"), 21, "12345678901234567890", 19, S("can't happen"));
691    test(S("abcdefghijklmnopqrst"), 21, "12345678901234567890", 20, S("can't happen"));
692    }
693#endif
694}
695