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