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