1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===//
2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//
3f5256e16dfc425c1d466f6308d4026d529ce9e0bHoward Hinnant//                     The LLVM Compiler Infrastructure
4bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//
5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open
6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details.
7bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//
8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===//
9bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
10bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// <string>
11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
126e0a1f458e41c08112a130f50636ced03907e29eHoward Hinnant// basic_string<charT,traits,Allocator>&
13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//   insert(size_type pos1, const basic_string& str);
14bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <string>
16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <stdexcept>
17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cassert>
18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
19061d0cc4db18d17bf01ed14c5db0be098205bd47Marshall Clow#include "min_allocator.h"
209dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant
21bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class S>
22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantvoid
23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttest(S s, typename S::size_type pos, S str, S expected)
24bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{
25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    typename S::size_type old_size = s.size();
26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    S s0 = s;
27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    try
28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        s.insert(pos, str);
30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(s.__invariants());
31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(pos <= old_size);
32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(s == expected);
33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    catch (std::out_of_range&)
35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(pos > old_size);
37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(s == s0);
38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}
40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint main()
42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{
439dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    {
44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    typedef std::string S;
45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S(""), 0, S(""), S(""));
46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S(""), 0, S("12345"), S("12345"));
47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S(""), 0, S("1234567890"), S("1234567890"));
48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S(""), 0, S("12345678901234567890"), S("12345678901234567890"));
49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S(""), 1, S(""), S("can't happen"));
50bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S(""), 1, S("12345"), S("can't happen"));
51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S(""), 1, S("1234567890"), S("can't happen"));
52bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S(""), 1, S("12345678901234567890"), S("can't happen"));
53bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcde"), 0, S(""), S("abcde"));
54bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcde"), 0, S("12345"), S("12345abcde"));
55bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcde"), 0, S("1234567890"), S("1234567890abcde"));
56bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcde"), 0, S("12345678901234567890"), S("12345678901234567890abcde"));
57bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcde"), 1, S(""), S("abcde"));
58bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcde"), 1, S("12345"), S("a12345bcde"));
59bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcde"), 1, S("1234567890"), S("a1234567890bcde"));
60bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcde"), 1, S("12345678901234567890"), S("a12345678901234567890bcde"));
61bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcde"), 2, S(""), S("abcde"));
62bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcde"), 2, S("12345"), S("ab12345cde"));
63bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcde"), 2, S("1234567890"), S("ab1234567890cde"));
64bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcde"), 2, S("12345678901234567890"), S("ab12345678901234567890cde"));
65bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcde"), 4, S(""), S("abcde"));
66bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcde"), 4, S("12345"), S("abcd12345e"));
67bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcde"), 4, S("1234567890"), S("abcd1234567890e"));
68bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcde"), 4, S("12345678901234567890"), S("abcd12345678901234567890e"));
69bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcde"), 5, S(""), S("abcde"));
70bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcde"), 5, S("12345"), S("abcde12345"));
71bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcde"), 5, S("1234567890"), S("abcde1234567890"));
72bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcde"), 5, S("12345678901234567890"), S("abcde12345678901234567890"));
73bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcde"), 6, S(""), S("can't happen"));
74bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcde"), 6, S("12345"), S("can't happen"));
75bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcde"), 6, S("1234567890"), S("can't happen"));
76bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcde"), 6, S("12345678901234567890"), S("can't happen"));
77bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghij"), 0, S(""), S("abcdefghij"));
78bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghij"), 0, S("12345"), S("12345abcdefghij"));
79bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghij"), 0, S("1234567890"), S("1234567890abcdefghij"));
80bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghij"), 0, S("12345678901234567890"), S("12345678901234567890abcdefghij"));
81bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghij"), 1, S(""), S("abcdefghij"));
82bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghij"), 1, S("12345"), S("a12345bcdefghij"));
83bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghij"), 1, S("1234567890"), S("a1234567890bcdefghij"));
84bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghij"), 1, S("12345678901234567890"), S("a12345678901234567890bcdefghij"));
85bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghij"), 5, S(""), S("abcdefghij"));
86bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghij"), 5, S("12345"), S("abcde12345fghij"));
87bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghij"), 5, S("1234567890"), S("abcde1234567890fghij"));
88bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghij"), 5, S("12345678901234567890"), S("abcde12345678901234567890fghij"));
89bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghij"), 9, S(""), S("abcdefghij"));
90bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghij"), 9, S("12345"), S("abcdefghi12345j"));
91bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghij"), 9, S("1234567890"), S("abcdefghi1234567890j"));
92bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghij"), 9, S("12345678901234567890"), S("abcdefghi12345678901234567890j"));
93bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghij"), 10, S(""), S("abcdefghij"));
94bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghij"), 10, S("12345"), S("abcdefghij12345"));
95bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghij"), 10, S("1234567890"), S("abcdefghij1234567890"));
96bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghij"), 10, S("12345678901234567890"), S("abcdefghij12345678901234567890"));
97bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghij"), 11, S(""), S("can't happen"));
98bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghij"), 11, S("12345"), S("can't happen"));
99bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghij"), 11, S("1234567890"), S("can't happen"));
100bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghij"), 11, S("12345678901234567890"), S("can't happen"));
101bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghijklmnopqrst"), 0, S(""), S("abcdefghijklmnopqrst"));
102bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghijklmnopqrst"), 0, S("12345"), S("12345abcdefghijklmnopqrst"));
103bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), S("1234567890abcdefghijklmnopqrst"));
104bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), S("12345678901234567890abcdefghijklmnopqrst"));
105bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghijklmnopqrst"), 1, S(""), S("abcdefghijklmnopqrst"));
106bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghijklmnopqrst"), 1, S("12345"), S("a12345bcdefghijklmnopqrst"));
107bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), S("a1234567890bcdefghijklmnopqrst"));
108bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), S("a12345678901234567890bcdefghijklmnopqrst"));
109bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghijklmnopqrst"), 10, S(""), S("abcdefghijklmnopqrst"));
110bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghijklmnopqrst"), 10, S("12345"), S("abcdefghij12345klmnopqrst"));
111bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), S("abcdefghij1234567890klmnopqrst"));
112bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), S("abcdefghij12345678901234567890klmnopqrst"));
113bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghijklmnopqrst"), 19, S(""), S("abcdefghijklmnopqrst"));
114bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghijklmnopqrst"), 19, S("12345"), S("abcdefghijklmnopqrs12345t"));
115bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), S("abcdefghijklmnopqrs1234567890t"));
116bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), S("abcdefghijklmnopqrs12345678901234567890t"));
117bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghijklmnopqrst"), 20, S(""), S("abcdefghijklmnopqrst"));
118bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghijklmnopqrst"), 20, S("12345"), S("abcdefghijklmnopqrst12345"));
119bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), S("abcdefghijklmnopqrst1234567890"));
120bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), S("abcdefghijklmnopqrst12345678901234567890"));
121bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghijklmnopqrst"), 21, S(""), S("can't happen"));
122bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghijklmnopqrst"), 21, S("12345"), S("can't happen"));
123bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), S("can't happen"));
124bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), S("can't happen"));
1259dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    }
1269dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant#if __cplusplus >= 201103L
1279dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    {
1289dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
1299dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S(""), 0, S(""), S(""));
1309dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S(""), 0, S("12345"), S("12345"));
1319dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S(""), 0, S("1234567890"), S("1234567890"));
1329dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S(""), 0, S("12345678901234567890"), S("12345678901234567890"));
1339dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S(""), 1, S(""), S("can't happen"));
1349dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S(""), 1, S("12345"), S("can't happen"));
1359dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S(""), 1, S("1234567890"), S("can't happen"));
1369dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S(""), 1, S("12345678901234567890"), S("can't happen"));
1379dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcde"), 0, S(""), S("abcde"));
1389dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcde"), 0, S("12345"), S("12345abcde"));
1399dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcde"), 0, S("1234567890"), S("1234567890abcde"));
1409dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcde"), 0, S("12345678901234567890"), S("12345678901234567890abcde"));
1419dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcde"), 1, S(""), S("abcde"));
1429dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcde"), 1, S("12345"), S("a12345bcde"));
1439dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcde"), 1, S("1234567890"), S("a1234567890bcde"));
1449dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcde"), 1, S("12345678901234567890"), S("a12345678901234567890bcde"));
1459dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcde"), 2, S(""), S("abcde"));
1469dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcde"), 2, S("12345"), S("ab12345cde"));
1479dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcde"), 2, S("1234567890"), S("ab1234567890cde"));
1489dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcde"), 2, S("12345678901234567890"), S("ab12345678901234567890cde"));
1499dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcde"), 4, S(""), S("abcde"));
1509dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcde"), 4, S("12345"), S("abcd12345e"));
1519dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcde"), 4, S("1234567890"), S("abcd1234567890e"));
1529dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcde"), 4, S("12345678901234567890"), S("abcd12345678901234567890e"));
1539dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcde"), 5, S(""), S("abcde"));
1549dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcde"), 5, S("12345"), S("abcde12345"));
1559dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcde"), 5, S("1234567890"), S("abcde1234567890"));
1569dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcde"), 5, S("12345678901234567890"), S("abcde12345678901234567890"));
1579dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcde"), 6, S(""), S("can't happen"));
1589dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcde"), 6, S("12345"), S("can't happen"));
1599dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcde"), 6, S("1234567890"), S("can't happen"));
1609dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcde"), 6, S("12345678901234567890"), S("can't happen"));
1619dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghij"), 0, S(""), S("abcdefghij"));
1629dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghij"), 0, S("12345"), S("12345abcdefghij"));
1639dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghij"), 0, S("1234567890"), S("1234567890abcdefghij"));
1649dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghij"), 0, S("12345678901234567890"), S("12345678901234567890abcdefghij"));
1659dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghij"), 1, S(""), S("abcdefghij"));
1669dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghij"), 1, S("12345"), S("a12345bcdefghij"));
1679dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghij"), 1, S("1234567890"), S("a1234567890bcdefghij"));
1689dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghij"), 1, S("12345678901234567890"), S("a12345678901234567890bcdefghij"));
1699dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghij"), 5, S(""), S("abcdefghij"));
1709dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghij"), 5, S("12345"), S("abcde12345fghij"));
1719dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghij"), 5, S("1234567890"), S("abcde1234567890fghij"));
1729dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghij"), 5, S("12345678901234567890"), S("abcde12345678901234567890fghij"));
1739dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghij"), 9, S(""), S("abcdefghij"));
1749dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghij"), 9, S("12345"), S("abcdefghi12345j"));
1759dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghij"), 9, S("1234567890"), S("abcdefghi1234567890j"));
1769dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghij"), 9, S("12345678901234567890"), S("abcdefghi12345678901234567890j"));
1779dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghij"), 10, S(""), S("abcdefghij"));
1789dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghij"), 10, S("12345"), S("abcdefghij12345"));
1799dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghij"), 10, S("1234567890"), S("abcdefghij1234567890"));
1809dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghij"), 10, S("12345678901234567890"), S("abcdefghij12345678901234567890"));
1819dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghij"), 11, S(""), S("can't happen"));
1829dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghij"), 11, S("12345"), S("can't happen"));
1839dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghij"), 11, S("1234567890"), S("can't happen"));
1849dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghij"), 11, S("12345678901234567890"), S("can't happen"));
1859dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghijklmnopqrst"), 0, S(""), S("abcdefghijklmnopqrst"));
1869dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghijklmnopqrst"), 0, S("12345"), S("12345abcdefghijklmnopqrst"));
1879dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), S("1234567890abcdefghijklmnopqrst"));
1889dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), S("12345678901234567890abcdefghijklmnopqrst"));
1899dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghijklmnopqrst"), 1, S(""), S("abcdefghijklmnopqrst"));
1909dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghijklmnopqrst"), 1, S("12345"), S("a12345bcdefghijklmnopqrst"));
1919dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), S("a1234567890bcdefghijklmnopqrst"));
1929dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), S("a12345678901234567890bcdefghijklmnopqrst"));
1939dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghijklmnopqrst"), 10, S(""), S("abcdefghijklmnopqrst"));
1949dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghijklmnopqrst"), 10, S("12345"), S("abcdefghij12345klmnopqrst"));
1959dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), S("abcdefghij1234567890klmnopqrst"));
1969dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), S("abcdefghij12345678901234567890klmnopqrst"));
1979dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghijklmnopqrst"), 19, S(""), S("abcdefghijklmnopqrst"));
1989dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghijklmnopqrst"), 19, S("12345"), S("abcdefghijklmnopqrs12345t"));
1999dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), S("abcdefghijklmnopqrs1234567890t"));
2009dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), S("abcdefghijklmnopqrs12345678901234567890t"));
2019dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghijklmnopqrst"), 20, S(""), S("abcdefghijklmnopqrst"));
2029dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghijklmnopqrst"), 20, S("12345"), S("abcdefghijklmnopqrst12345"));
2039dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), S("abcdefghijklmnopqrst1234567890"));
2049dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), S("abcdefghijklmnopqrst12345678901234567890"));
2059dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghijklmnopqrst"), 21, S(""), S("can't happen"));
2069dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghijklmnopqrst"), 21, S("12345"), S("can't happen"));
2079dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), S("can't happen"));
2089dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), S("can't happen"));
2099dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant    }
2109dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant#endif
211bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}
212