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 // replace(size_type pos, size_type n1, const charT* s, size_type n2); 14 15 #include <string> 16 #include <stdexcept> 17 #include <algorithm> 18 #include <cassert> 19 20 #include "test_macros.h" 21 #include "min_allocator.h" 22 23 template <class S> 24 void 25 test(S s, typename S::size_type pos, typename S::size_type n1, 26 const typename S::value_type* str, typename S::size_type n2, 27 S expected) 28 { 29 const typename S::size_type old_size = s.size(); 30 S s0 = s; 31 if (pos <= old_size) 32 { 33 s.replace(pos, n1, str, n2); 34 LIBCPP_ASSERT(s.__invariants()); 35 assert(s == expected); 36 typename S::size_type xlen = std::min(n1, old_size - pos); 37 typename S::size_type rlen = n2; 38 assert(s.size() == old_size - xlen + rlen); 39 } 40 #ifndef TEST_HAS_NO_EXCEPTIONS 41 else 42 { 43 try 44 { 45 s.replace(pos, n1, str, n2); 46 assert(false); 47 } 48 catch (std::out_of_range&) 49 { 50 assert(pos > old_size); 51 assert(s == s0); 52 } 53 } 54 #endif 55 } 56 57 template <class S> 58 void test0() 59 { 60 test(S(""), 0, 0, "", 0, S("")); 61 test(S(""), 0, 0, "12345", 0, S("")); 62 test(S(""), 0, 0, "12345", 1, S("1")); 63 test(S(""), 0, 0, "12345", 2, S("12")); 64 test(S(""), 0, 0, "12345", 4, S("1234")); 65 test(S(""), 0, 0, "12345", 5, S("12345")); 66 test(S(""), 0, 0, "1234567890", 0, S("")); 67 test(S(""), 0, 0, "1234567890", 1, S("1")); 68 test(S(""), 0, 0, "1234567890", 5, S("12345")); 69 test(S(""), 0, 0, "1234567890", 9, S("123456789")); 70 test(S(""), 0, 0, "1234567890", 10, S("1234567890")); 71 test(S(""), 0, 0, "12345678901234567890", 0, S("")); 72 test(S(""), 0, 0, "12345678901234567890", 1, S("1")); 73 test(S(""), 0, 0, "12345678901234567890", 10, S("1234567890")); 74 test(S(""), 0, 0, "12345678901234567890", 19, S("1234567890123456789")); 75 test(S(""), 0, 0, "12345678901234567890", 20, S("12345678901234567890")); 76 test(S(""), 0, 1, "", 0, S("")); 77 test(S(""), 0, 1, "12345", 0, S("")); 78 test(S(""), 0, 1, "12345", 1, S("1")); 79 test(S(""), 0, 1, "12345", 2, S("12")); 80 test(S(""), 0, 1, "12345", 4, S("1234")); 81 test(S(""), 0, 1, "12345", 5, S("12345")); 82 test(S(""), 0, 1, "1234567890", 0, S("")); 83 test(S(""), 0, 1, "1234567890", 1, S("1")); 84 test(S(""), 0, 1, "1234567890", 5, S("12345")); 85 test(S(""), 0, 1, "1234567890", 9, S("123456789")); 86 test(S(""), 0, 1, "1234567890", 10, S("1234567890")); 87 test(S(""), 0, 1, "12345678901234567890", 0, S("")); 88 test(S(""), 0, 1, "12345678901234567890", 1, S("1")); 89 test(S(""), 0, 1, "12345678901234567890", 10, S("1234567890")); 90 test(S(""), 0, 1, "12345678901234567890", 19, S("1234567890123456789")); 91 test(S(""), 0, 1, "12345678901234567890", 20, S("12345678901234567890")); 92 test(S(""), 1, 0, "", 0, S("can't happen")); 93 test(S(""), 1, 0, "12345", 0, S("can't happen")); 94 test(S(""), 1, 0, "12345", 1, S("can't happen")); 95 test(S(""), 1, 0, "12345", 2, S("can't happen")); 96 test(S(""), 1, 0, "12345", 4, S("can't happen")); 97 test(S(""), 1, 0, "12345", 5, S("can't happen")); 98 test(S(""), 1, 0, "1234567890", 0, S("can't happen")); 99 test(S(""), 1, 0, "1234567890", 1, S("can't happen")); 100 test(S(""), 1, 0, "1234567890", 5, S("can't happen")); 101 test(S(""), 1, 0, "1234567890", 9, S("can't happen")); 102 test(S(""), 1, 0, "1234567890", 10, S("can't happen")); 103 test(S(""), 1, 0, "12345678901234567890", 0, S("can't happen")); 104 test(S(""), 1, 0, "12345678901234567890", 1, S("can't happen")); 105 test(S(""), 1, 0, "12345678901234567890", 10, S("can't happen")); 106 test(S(""), 1, 0, "12345678901234567890", 19, S("can't happen")); 107 test(S(""), 1, 0, "12345678901234567890", 20, S("can't happen")); 108 test(S("abcde"), 0, 0, "", 0, S("abcde")); 109 test(S("abcde"), 0, 0, "12345", 0, S("abcde")); 110 test(S("abcde"), 0, 0, "12345", 1, S("1abcde")); 111 test(S("abcde"), 0, 0, "12345", 2, S("12abcde")); 112 test(S("abcde"), 0, 0, "12345", 4, S("1234abcde")); 113 test(S("abcde"), 0, 0, "12345", 5, S("12345abcde")); 114 test(S("abcde"), 0, 0, "1234567890", 0, S("abcde")); 115 test(S("abcde"), 0, 0, "1234567890", 1, S("1abcde")); 116 test(S("abcde"), 0, 0, "1234567890", 5, S("12345abcde")); 117 test(S("abcde"), 0, 0, "1234567890", 9, S("123456789abcde")); 118 test(S("abcde"), 0, 0, "1234567890", 10, S("1234567890abcde")); 119 test(S("abcde"), 0, 0, "12345678901234567890", 0, S("abcde")); 120 test(S("abcde"), 0, 0, "12345678901234567890", 1, S("1abcde")); 121 test(S("abcde"), 0, 0, "12345678901234567890", 10, S("1234567890abcde")); 122 test(S("abcde"), 0, 0, "12345678901234567890", 19, S("1234567890123456789abcde")); 123 test(S("abcde"), 0, 0, "12345678901234567890", 20, S("12345678901234567890abcde")); 124 test(S("abcde"), 0, 1, "", 0, S("bcde")); 125 test(S("abcde"), 0, 1, "12345", 0, S("bcde")); 126 test(S("abcde"), 0, 1, "12345", 1, S("1bcde")); 127 test(S("abcde"), 0, 1, "12345", 2, S("12bcde")); 128 test(S("abcde"), 0, 1, "12345", 4, S("1234bcde")); 129 test(S("abcde"), 0, 1, "12345", 5, S("12345bcde")); 130 test(S("abcde"), 0, 1, "1234567890", 0, S("bcde")); 131 test(S("abcde"), 0, 1, "1234567890", 1, S("1bcde")); 132 test(S("abcde"), 0, 1, "1234567890", 5, S("12345bcde")); 133 test(S("abcde"), 0, 1, "1234567890", 9, S("123456789bcde")); 134 test(S("abcde"), 0, 1, "1234567890", 10, S("1234567890bcde")); 135 test(S("abcde"), 0, 1, "12345678901234567890", 0, S("bcde")); 136 test(S("abcde"), 0, 1, "12345678901234567890", 1, S("1bcde")); 137 test(S("abcde"), 0, 1, "12345678901234567890", 10, S("1234567890bcde")); 138 test(S("abcde"), 0, 1, "12345678901234567890", 19, S("1234567890123456789bcde")); 139 test(S("abcde"), 0, 1, "12345678901234567890", 20, S("12345678901234567890bcde")); 140 test(S("abcde"), 0, 2, "", 0, S("cde")); 141 test(S("abcde"), 0, 2, "12345", 0, S("cde")); 142 test(S("abcde"), 0, 2, "12345", 1, S("1cde")); 143 test(S("abcde"), 0, 2, "12345", 2, S("12cde")); 144 test(S("abcde"), 0, 2, "12345", 4, S("1234cde")); 145 test(S("abcde"), 0, 2, "12345", 5, S("12345cde")); 146 test(S("abcde"), 0, 2, "1234567890", 0, S("cde")); 147 test(S("abcde"), 0, 2, "1234567890", 1, S("1cde")); 148 test(S("abcde"), 0, 2, "1234567890", 5, S("12345cde")); 149 test(S("abcde"), 0, 2, "1234567890", 9, S("123456789cde")); 150 test(S("abcde"), 0, 2, "1234567890", 10, S("1234567890cde")); 151 test(S("abcde"), 0, 2, "12345678901234567890", 0, S("cde")); 152 test(S("abcde"), 0, 2, "12345678901234567890", 1, S("1cde")); 153 test(S("abcde"), 0, 2, "12345678901234567890", 10, S("1234567890cde")); 154 test(S("abcde"), 0, 2, "12345678901234567890", 19, S("1234567890123456789cde")); 155 test(S("abcde"), 0, 2, "12345678901234567890", 20, S("12345678901234567890cde")); 156 test(S("abcde"), 0, 4, "", 0, S("e")); 157 test(S("abcde"), 0, 4, "12345", 0, S("e")); 158 test(S("abcde"), 0, 4, "12345", 1, S("1e")); 159 test(S("abcde"), 0, 4, "12345", 2, S("12e")); 160 } 161 162 template <class S> 163 void test1() 164 { 165 test(S("abcde"), 0, 4, "12345", 4, S("1234e")); 166 test(S("abcde"), 0, 4, "12345", 5, S("12345e")); 167 test(S("abcde"), 0, 4, "1234567890", 0, S("e")); 168 test(S("abcde"), 0, 4, "1234567890", 1, S("1e")); 169 test(S("abcde"), 0, 4, "1234567890", 5, S("12345e")); 170 test(S("abcde"), 0, 4, "1234567890", 9, S("123456789e")); 171 test(S("abcde"), 0, 4, "1234567890", 10, S("1234567890e")); 172 test(S("abcde"), 0, 4, "12345678901234567890", 0, S("e")); 173 test(S("abcde"), 0, 4, "12345678901234567890", 1, S("1e")); 174 test(S("abcde"), 0, 4, "12345678901234567890", 10, S("1234567890e")); 175 test(S("abcde"), 0, 4, "12345678901234567890", 19, S("1234567890123456789e")); 176 test(S("abcde"), 0, 4, "12345678901234567890", 20, S("12345678901234567890e")); 177 test(S("abcde"), 0, 5, "", 0, S("")); 178 test(S("abcde"), 0, 5, "12345", 0, S("")); 179 test(S("abcde"), 0, 5, "12345", 1, S("1")); 180 test(S("abcde"), 0, 5, "12345", 2, S("12")); 181 test(S("abcde"), 0, 5, "12345", 4, S("1234")); 182 test(S("abcde"), 0, 5, "12345", 5, S("12345")); 183 test(S("abcde"), 0, 5, "1234567890", 0, S("")); 184 test(S("abcde"), 0, 5, "1234567890", 1, S("1")); 185 test(S("abcde"), 0, 5, "1234567890", 5, S("12345")); 186 test(S("abcde"), 0, 5, "1234567890", 9, S("123456789")); 187 test(S("abcde"), 0, 5, "1234567890", 10, S("1234567890")); 188 test(S("abcde"), 0, 5, "12345678901234567890", 0, S("")); 189 test(S("abcde"), 0, 5, "12345678901234567890", 1, S("1")); 190 test(S("abcde"), 0, 5, "12345678901234567890", 10, S("1234567890")); 191 test(S("abcde"), 0, 5, "12345678901234567890", 19, S("1234567890123456789")); 192 test(S("abcde"), 0, 5, "12345678901234567890", 20, S("12345678901234567890")); 193 test(S("abcde"), 0, 6, "", 0, S("")); 194 test(S("abcde"), 0, 6, "12345", 0, S("")); 195 test(S("abcde"), 0, 6, "12345", 1, S("1")); 196 test(S("abcde"), 0, 6, "12345", 2, S("12")); 197 test(S("abcde"), 0, 6, "12345", 4, S("1234")); 198 test(S("abcde"), 0, 6, "12345", 5, S("12345")); 199 test(S("abcde"), 0, 6, "1234567890", 0, S("")); 200 test(S("abcde"), 0, 6, "1234567890", 1, S("1")); 201 test(S("abcde"), 0, 6, "1234567890", 5, S("12345")); 202 test(S("abcde"), 0, 6, "1234567890", 9, S("123456789")); 203 test(S("abcde"), 0, 6, "1234567890", 10, S("1234567890")); 204 test(S("abcde"), 0, 6, "12345678901234567890", 0, S("")); 205 test(S("abcde"), 0, 6, "12345678901234567890", 1, S("1")); 206 test(S("abcde"), 0, 6, "12345678901234567890", 10, S("1234567890")); 207 test(S("abcde"), 0, 6, "12345678901234567890", 19, S("1234567890123456789")); 208 test(S("abcde"), 0, 6, "12345678901234567890", 20, S("12345678901234567890")); 209 test(S("abcde"), 1, 0, "", 0, S("abcde")); 210 test(S("abcde"), 1, 0, "12345", 0, S("abcde")); 211 test(S("abcde"), 1, 0, "12345", 1, S("a1bcde")); 212 test(S("abcde"), 1, 0, "12345", 2, S("a12bcde")); 213 test(S("abcde"), 1, 0, "12345", 4, S("a1234bcde")); 214 test(S("abcde"), 1, 0, "12345", 5, S("a12345bcde")); 215 test(S("abcde"), 1, 0, "1234567890", 0, S("abcde")); 216 test(S("abcde"), 1, 0, "1234567890", 1, S("a1bcde")); 217 test(S("abcde"), 1, 0, "1234567890", 5, S("a12345bcde")); 218 test(S("abcde"), 1, 0, "1234567890", 9, S("a123456789bcde")); 219 test(S("abcde"), 1, 0, "1234567890", 10, S("a1234567890bcde")); 220 test(S("abcde"), 1, 0, "12345678901234567890", 0, S("abcde")); 221 test(S("abcde"), 1, 0, "12345678901234567890", 1, S("a1bcde")); 222 test(S("abcde"), 1, 0, "12345678901234567890", 10, S("a1234567890bcde")); 223 test(S("abcde"), 1, 0, "12345678901234567890", 19, S("a1234567890123456789bcde")); 224 test(S("abcde"), 1, 0, "12345678901234567890", 20, S("a12345678901234567890bcde")); 225 test(S("abcde"), 1, 1, "", 0, S("acde")); 226 test(S("abcde"), 1, 1, "12345", 0, S("acde")); 227 test(S("abcde"), 1, 1, "12345", 1, S("a1cde")); 228 test(S("abcde"), 1, 1, "12345", 2, S("a12cde")); 229 test(S("abcde"), 1, 1, "12345", 4, S("a1234cde")); 230 test(S("abcde"), 1, 1, "12345", 5, S("a12345cde")); 231 test(S("abcde"), 1, 1, "1234567890", 0, S("acde")); 232 test(S("abcde"), 1, 1, "1234567890", 1, S("a1cde")); 233 test(S("abcde"), 1, 1, "1234567890", 5, S("a12345cde")); 234 test(S("abcde"), 1, 1, "1234567890", 9, S("a123456789cde")); 235 test(S("abcde"), 1, 1, "1234567890", 10, S("a1234567890cde")); 236 test(S("abcde"), 1, 1, "12345678901234567890", 0, S("acde")); 237 test(S("abcde"), 1, 1, "12345678901234567890", 1, S("a1cde")); 238 test(S("abcde"), 1, 1, "12345678901234567890", 10, S("a1234567890cde")); 239 test(S("abcde"), 1, 1, "12345678901234567890", 19, S("a1234567890123456789cde")); 240 test(S("abcde"), 1, 1, "12345678901234567890", 20, S("a12345678901234567890cde")); 241 test(S("abcde"), 1, 2, "", 0, S("ade")); 242 test(S("abcde"), 1, 2, "12345", 0, S("ade")); 243 test(S("abcde"), 1, 2, "12345", 1, S("a1de")); 244 test(S("abcde"), 1, 2, "12345", 2, S("a12de")); 245 test(S("abcde"), 1, 2, "12345", 4, S("a1234de")); 246 test(S("abcde"), 1, 2, "12345", 5, S("a12345de")); 247 test(S("abcde"), 1, 2, "1234567890", 0, S("ade")); 248 test(S("abcde"), 1, 2, "1234567890", 1, S("a1de")); 249 test(S("abcde"), 1, 2, "1234567890", 5, S("a12345de")); 250 test(S("abcde"), 1, 2, "1234567890", 9, S("a123456789de")); 251 test(S("abcde"), 1, 2, "1234567890", 10, S("a1234567890de")); 252 test(S("abcde"), 1, 2, "12345678901234567890", 0, S("ade")); 253 test(S("abcde"), 1, 2, "12345678901234567890", 1, S("a1de")); 254 test(S("abcde"), 1, 2, "12345678901234567890", 10, S("a1234567890de")); 255 test(S("abcde"), 1, 2, "12345678901234567890", 19, S("a1234567890123456789de")); 256 test(S("abcde"), 1, 2, "12345678901234567890", 20, S("a12345678901234567890de")); 257 test(S("abcde"), 1, 3, "", 0, S("ae")); 258 test(S("abcde"), 1, 3, "12345", 0, S("ae")); 259 test(S("abcde"), 1, 3, "12345", 1, S("a1e")); 260 test(S("abcde"), 1, 3, "12345", 2, S("a12e")); 261 test(S("abcde"), 1, 3, "12345", 4, S("a1234e")); 262 test(S("abcde"), 1, 3, "12345", 5, S("a12345e")); 263 test(S("abcde"), 1, 3, "1234567890", 0, S("ae")); 264 test(S("abcde"), 1, 3, "1234567890", 1, S("a1e")); 265 } 266 267 template <class S> 268 void test2() 269 { 270 test(S("abcde"), 1, 3, "1234567890", 5, S("a12345e")); 271 test(S("abcde"), 1, 3, "1234567890", 9, S("a123456789e")); 272 test(S("abcde"), 1, 3, "1234567890", 10, S("a1234567890e")); 273 test(S("abcde"), 1, 3, "12345678901234567890", 0, S("ae")); 274 test(S("abcde"), 1, 3, "12345678901234567890", 1, S("a1e")); 275 test(S("abcde"), 1, 3, "12345678901234567890", 10, S("a1234567890e")); 276 test(S("abcde"), 1, 3, "12345678901234567890", 19, S("a1234567890123456789e")); 277 test(S("abcde"), 1, 3, "12345678901234567890", 20, S("a12345678901234567890e")); 278 test(S("abcde"), 1, 4, "", 0, S("a")); 279 test(S("abcde"), 1, 4, "12345", 0, S("a")); 280 test(S("abcde"), 1, 4, "12345", 1, S("a1")); 281 test(S("abcde"), 1, 4, "12345", 2, S("a12")); 282 test(S("abcde"), 1, 4, "12345", 4, S("a1234")); 283 test(S("abcde"), 1, 4, "12345", 5, S("a12345")); 284 test(S("abcde"), 1, 4, "1234567890", 0, S("a")); 285 test(S("abcde"), 1, 4, "1234567890", 1, S("a1")); 286 test(S("abcde"), 1, 4, "1234567890", 5, S("a12345")); 287 test(S("abcde"), 1, 4, "1234567890", 9, S("a123456789")); 288 test(S("abcde"), 1, 4, "1234567890", 10, S("a1234567890")); 289 test(S("abcde"), 1, 4, "12345678901234567890", 0, S("a")); 290 test(S("abcde"), 1, 4, "12345678901234567890", 1, S("a1")); 291 test(S("abcde"), 1, 4, "12345678901234567890", 10, S("a1234567890")); 292 test(S("abcde"), 1, 4, "12345678901234567890", 19, S("a1234567890123456789")); 293 test(S("abcde"), 1, 4, "12345678901234567890", 20, S("a12345678901234567890")); 294 test(S("abcde"), 1, 5, "", 0, S("a")); 295 test(S("abcde"), 1, 5, "12345", 0, S("a")); 296 test(S("abcde"), 1, 5, "12345", 1, S("a1")); 297 test(S("abcde"), 1, 5, "12345", 2, S("a12")); 298 test(S("abcde"), 1, 5, "12345", 4, S("a1234")); 299 test(S("abcde"), 1, 5, "12345", 5, S("a12345")); 300 test(S("abcde"), 1, 5, "1234567890", 0, S("a")); 301 test(S("abcde"), 1, 5, "1234567890", 1, S("a1")); 302 test(S("abcde"), 1, 5, "1234567890", 5, S("a12345")); 303 test(S("abcde"), 1, 5, "1234567890", 9, S("a123456789")); 304 test(S("abcde"), 1, 5, "1234567890", 10, S("a1234567890")); 305 test(S("abcde"), 1, 5, "12345678901234567890", 0, S("a")); 306 test(S("abcde"), 1, 5, "12345678901234567890", 1, S("a1")); 307 test(S("abcde"), 1, 5, "12345678901234567890", 10, S("a1234567890")); 308 test(S("abcde"), 1, 5, "12345678901234567890", 19, S("a1234567890123456789")); 309 test(S("abcde"), 1, 5, "12345678901234567890", 20, S("a12345678901234567890")); 310 test(S("abcde"), 2, 0, "", 0, S("abcde")); 311 test(S("abcde"), 2, 0, "12345", 0, S("abcde")); 312 test(S("abcde"), 2, 0, "12345", 1, S("ab1cde")); 313 test(S("abcde"), 2, 0, "12345", 2, S("ab12cde")); 314 test(S("abcde"), 2, 0, "12345", 4, S("ab1234cde")); 315 test(S("abcde"), 2, 0, "12345", 5, S("ab12345cde")); 316 test(S("abcde"), 2, 0, "1234567890", 0, S("abcde")); 317 test(S("abcde"), 2, 0, "1234567890", 1, S("ab1cde")); 318 test(S("abcde"), 2, 0, "1234567890", 5, S("ab12345cde")); 319 test(S("abcde"), 2, 0, "1234567890", 9, S("ab123456789cde")); 320 test(S("abcde"), 2, 0, "1234567890", 10, S("ab1234567890cde")); 321 test(S("abcde"), 2, 0, "12345678901234567890", 0, S("abcde")); 322 test(S("abcde"), 2, 0, "12345678901234567890", 1, S("ab1cde")); 323 test(S("abcde"), 2, 0, "12345678901234567890", 10, S("ab1234567890cde")); 324 test(S("abcde"), 2, 0, "12345678901234567890", 19, S("ab1234567890123456789cde")); 325 test(S("abcde"), 2, 0, "12345678901234567890", 20, S("ab12345678901234567890cde")); 326 test(S("abcde"), 2, 1, "", 0, S("abde")); 327 test(S("abcde"), 2, 1, "12345", 0, S("abde")); 328 test(S("abcde"), 2, 1, "12345", 1, S("ab1de")); 329 test(S("abcde"), 2, 1, "12345", 2, S("ab12de")); 330 test(S("abcde"), 2, 1, "12345", 4, S("ab1234de")); 331 test(S("abcde"), 2, 1, "12345", 5, S("ab12345de")); 332 test(S("abcde"), 2, 1, "1234567890", 0, S("abde")); 333 test(S("abcde"), 2, 1, "1234567890", 1, S("ab1de")); 334 test(S("abcde"), 2, 1, "1234567890", 5, S("ab12345de")); 335 test(S("abcde"), 2, 1, "1234567890", 9, S("ab123456789de")); 336 test(S("abcde"), 2, 1, "1234567890", 10, S("ab1234567890de")); 337 test(S("abcde"), 2, 1, "12345678901234567890", 0, S("abde")); 338 test(S("abcde"), 2, 1, "12345678901234567890", 1, S("ab1de")); 339 test(S("abcde"), 2, 1, "12345678901234567890", 10, S("ab1234567890de")); 340 test(S("abcde"), 2, 1, "12345678901234567890", 19, S("ab1234567890123456789de")); 341 test(S("abcde"), 2, 1, "12345678901234567890", 20, S("ab12345678901234567890de")); 342 test(S("abcde"), 2, 2, "", 0, S("abe")); 343 test(S("abcde"), 2, 2, "12345", 0, S("abe")); 344 test(S("abcde"), 2, 2, "12345", 1, S("ab1e")); 345 test(S("abcde"), 2, 2, "12345", 2, S("ab12e")); 346 test(S("abcde"), 2, 2, "12345", 4, S("ab1234e")); 347 test(S("abcde"), 2, 2, "12345", 5, S("ab12345e")); 348 test(S("abcde"), 2, 2, "1234567890", 0, S("abe")); 349 test(S("abcde"), 2, 2, "1234567890", 1, S("ab1e")); 350 test(S("abcde"), 2, 2, "1234567890", 5, S("ab12345e")); 351 test(S("abcde"), 2, 2, "1234567890", 9, S("ab123456789e")); 352 test(S("abcde"), 2, 2, "1234567890", 10, S("ab1234567890e")); 353 test(S("abcde"), 2, 2, "12345678901234567890", 0, S("abe")); 354 test(S("abcde"), 2, 2, "12345678901234567890", 1, S("ab1e")); 355 test(S("abcde"), 2, 2, "12345678901234567890", 10, S("ab1234567890e")); 356 test(S("abcde"), 2, 2, "12345678901234567890", 19, S("ab1234567890123456789e")); 357 test(S("abcde"), 2, 2, "12345678901234567890", 20, S("ab12345678901234567890e")); 358 test(S("abcde"), 2, 3, "", 0, S("ab")); 359 test(S("abcde"), 2, 3, "12345", 0, S("ab")); 360 test(S("abcde"), 2, 3, "12345", 1, S("ab1")); 361 test(S("abcde"), 2, 3, "12345", 2, S("ab12")); 362 test(S("abcde"), 2, 3, "12345", 4, S("ab1234")); 363 test(S("abcde"), 2, 3, "12345", 5, S("ab12345")); 364 test(S("abcde"), 2, 3, "1234567890", 0, S("ab")); 365 test(S("abcde"), 2, 3, "1234567890", 1, S("ab1")); 366 test(S("abcde"), 2, 3, "1234567890", 5, S("ab12345")); 367 test(S("abcde"), 2, 3, "1234567890", 9, S("ab123456789")); 368 test(S("abcde"), 2, 3, "1234567890", 10, S("ab1234567890")); 369 test(S("abcde"), 2, 3, "12345678901234567890", 0, S("ab")); 370 } 371 372 template <class S> 373 void test3() 374 { 375 test(S("abcde"), 2, 3, "12345678901234567890", 1, S("ab1")); 376 test(S("abcde"), 2, 3, "12345678901234567890", 10, S("ab1234567890")); 377 test(S("abcde"), 2, 3, "12345678901234567890", 19, S("ab1234567890123456789")); 378 test(S("abcde"), 2, 3, "12345678901234567890", 20, S("ab12345678901234567890")); 379 test(S("abcde"), 2, 4, "", 0, S("ab")); 380 test(S("abcde"), 2, 4, "12345", 0, S("ab")); 381 test(S("abcde"), 2, 4, "12345", 1, S("ab1")); 382 test(S("abcde"), 2, 4, "12345", 2, S("ab12")); 383 test(S("abcde"), 2, 4, "12345", 4, S("ab1234")); 384 test(S("abcde"), 2, 4, "12345", 5, S("ab12345")); 385 test(S("abcde"), 2, 4, "1234567890", 0, S("ab")); 386 test(S("abcde"), 2, 4, "1234567890", 1, S("ab1")); 387 test(S("abcde"), 2, 4, "1234567890", 5, S("ab12345")); 388 test(S("abcde"), 2, 4, "1234567890", 9, S("ab123456789")); 389 test(S("abcde"), 2, 4, "1234567890", 10, S("ab1234567890")); 390 test(S("abcde"), 2, 4, "12345678901234567890", 0, S("ab")); 391 test(S("abcde"), 2, 4, "12345678901234567890", 1, S("ab1")); 392 test(S("abcde"), 2, 4, "12345678901234567890", 10, S("ab1234567890")); 393 test(S("abcde"), 2, 4, "12345678901234567890", 19, S("ab1234567890123456789")); 394 test(S("abcde"), 2, 4, "12345678901234567890", 20, S("ab12345678901234567890")); 395 test(S("abcde"), 4, 0, "", 0, S("abcde")); 396 test(S("abcde"), 4, 0, "12345", 0, S("abcde")); 397 test(S("abcde"), 4, 0, "12345", 1, S("abcd1e")); 398 test(S("abcde"), 4, 0, "12345", 2, S("abcd12e")); 399 test(S("abcde"), 4, 0, "12345", 4, S("abcd1234e")); 400 test(S("abcde"), 4, 0, "12345", 5, S("abcd12345e")); 401 test(S("abcde"), 4, 0, "1234567890", 0, S("abcde")); 402 test(S("abcde"), 4, 0, "1234567890", 1, S("abcd1e")); 403 test(S("abcde"), 4, 0, "1234567890", 5, S("abcd12345e")); 404 test(S("abcde"), 4, 0, "1234567890", 9, S("abcd123456789e")); 405 test(S("abcde"), 4, 0, "1234567890", 10, S("abcd1234567890e")); 406 test(S("abcde"), 4, 0, "12345678901234567890", 0, S("abcde")); 407 test(S("abcde"), 4, 0, "12345678901234567890", 1, S("abcd1e")); 408 test(S("abcde"), 4, 0, "12345678901234567890", 10, S("abcd1234567890e")); 409 test(S("abcde"), 4, 0, "12345678901234567890", 19, S("abcd1234567890123456789e")); 410 test(S("abcde"), 4, 0, "12345678901234567890", 20, S("abcd12345678901234567890e")); 411 test(S("abcde"), 4, 1, "", 0, S("abcd")); 412 test(S("abcde"), 4, 1, "12345", 0, S("abcd")); 413 test(S("abcde"), 4, 1, "12345", 1, S("abcd1")); 414 test(S("abcde"), 4, 1, "12345", 2, S("abcd12")); 415 test(S("abcde"), 4, 1, "12345", 4, S("abcd1234")); 416 test(S("abcde"), 4, 1, "12345", 5, S("abcd12345")); 417 test(S("abcde"), 4, 1, "1234567890", 0, S("abcd")); 418 test(S("abcde"), 4, 1, "1234567890", 1, S("abcd1")); 419 test(S("abcde"), 4, 1, "1234567890", 5, S("abcd12345")); 420 test(S("abcde"), 4, 1, "1234567890", 9, S("abcd123456789")); 421 test(S("abcde"), 4, 1, "1234567890", 10, S("abcd1234567890")); 422 test(S("abcde"), 4, 1, "12345678901234567890", 0, S("abcd")); 423 test(S("abcde"), 4, 1, "12345678901234567890", 1, S("abcd1")); 424 test(S("abcde"), 4, 1, "12345678901234567890", 10, S("abcd1234567890")); 425 test(S("abcde"), 4, 1, "12345678901234567890", 19, S("abcd1234567890123456789")); 426 test(S("abcde"), 4, 1, "12345678901234567890", 20, S("abcd12345678901234567890")); 427 test(S("abcde"), 4, 2, "", 0, S("abcd")); 428 test(S("abcde"), 4, 2, "12345", 0, S("abcd")); 429 test(S("abcde"), 4, 2, "12345", 1, S("abcd1")); 430 test(S("abcde"), 4, 2, "12345", 2, S("abcd12")); 431 test(S("abcde"), 4, 2, "12345", 4, S("abcd1234")); 432 test(S("abcde"), 4, 2, "12345", 5, S("abcd12345")); 433 test(S("abcde"), 4, 2, "1234567890", 0, S("abcd")); 434 test(S("abcde"), 4, 2, "1234567890", 1, S("abcd1")); 435 test(S("abcde"), 4, 2, "1234567890", 5, S("abcd12345")); 436 test(S("abcde"), 4, 2, "1234567890", 9, S("abcd123456789")); 437 test(S("abcde"), 4, 2, "1234567890", 10, S("abcd1234567890")); 438 test(S("abcde"), 4, 2, "12345678901234567890", 0, S("abcd")); 439 test(S("abcde"), 4, 2, "12345678901234567890", 1, S("abcd1")); 440 test(S("abcde"), 4, 2, "12345678901234567890", 10, S("abcd1234567890")); 441 test(S("abcde"), 4, 2, "12345678901234567890", 19, S("abcd1234567890123456789")); 442 test(S("abcde"), 4, 2, "12345678901234567890", 20, S("abcd12345678901234567890")); 443 test(S("abcde"), 5, 0, "", 0, S("abcde")); 444 test(S("abcde"), 5, 0, "12345", 0, S("abcde")); 445 test(S("abcde"), 5, 0, "12345", 1, S("abcde1")); 446 test(S("abcde"), 5, 0, "12345", 2, S("abcde12")); 447 test(S("abcde"), 5, 0, "12345", 4, S("abcde1234")); 448 test(S("abcde"), 5, 0, "12345", 5, S("abcde12345")); 449 test(S("abcde"), 5, 0, "1234567890", 0, S("abcde")); 450 test(S("abcde"), 5, 0, "1234567890", 1, S("abcde1")); 451 test(S("abcde"), 5, 0, "1234567890", 5, S("abcde12345")); 452 test(S("abcde"), 5, 0, "1234567890", 9, S("abcde123456789")); 453 test(S("abcde"), 5, 0, "1234567890", 10, S("abcde1234567890")); 454 test(S("abcde"), 5, 0, "12345678901234567890", 0, S("abcde")); 455 test(S("abcde"), 5, 0, "12345678901234567890", 1, S("abcde1")); 456 test(S("abcde"), 5, 0, "12345678901234567890", 10, S("abcde1234567890")); 457 test(S("abcde"), 5, 0, "12345678901234567890", 19, S("abcde1234567890123456789")); 458 test(S("abcde"), 5, 0, "12345678901234567890", 20, S("abcde12345678901234567890")); 459 test(S("abcde"), 5, 1, "", 0, S("abcde")); 460 test(S("abcde"), 5, 1, "12345", 0, S("abcde")); 461 test(S("abcde"), 5, 1, "12345", 1, S("abcde1")); 462 test(S("abcde"), 5, 1, "12345", 2, S("abcde12")); 463 test(S("abcde"), 5, 1, "12345", 4, S("abcde1234")); 464 test(S("abcde"), 5, 1, "12345", 5, S("abcde12345")); 465 test(S("abcde"), 5, 1, "1234567890", 0, S("abcde")); 466 test(S("abcde"), 5, 1, "1234567890", 1, S("abcde1")); 467 test(S("abcde"), 5, 1, "1234567890", 5, S("abcde12345")); 468 test(S("abcde"), 5, 1, "1234567890", 9, S("abcde123456789")); 469 test(S("abcde"), 5, 1, "1234567890", 10, S("abcde1234567890")); 470 test(S("abcde"), 5, 1, "12345678901234567890", 0, S("abcde")); 471 test(S("abcde"), 5, 1, "12345678901234567890", 1, S("abcde1")); 472 test(S("abcde"), 5, 1, "12345678901234567890", 10, S("abcde1234567890")); 473 test(S("abcde"), 5, 1, "12345678901234567890", 19, S("abcde1234567890123456789")); 474 test(S("abcde"), 5, 1, "12345678901234567890", 20, S("abcde12345678901234567890")); 475 } 476 477 template <class S> 478 void test4() 479 { 480 test(S("abcde"), 6, 0, "", 0, S("can't happen")); 481 test(S("abcde"), 6, 0, "12345", 0, S("can't happen")); 482 test(S("abcde"), 6, 0, "12345", 1, S("can't happen")); 483 test(S("abcde"), 6, 0, "12345", 2, S("can't happen")); 484 test(S("abcde"), 6, 0, "12345", 4, S("can't happen")); 485 test(S("abcde"), 6, 0, "12345", 5, S("can't happen")); 486 test(S("abcde"), 6, 0, "1234567890", 0, S("can't happen")); 487 test(S("abcde"), 6, 0, "1234567890", 1, S("can't happen")); 488 test(S("abcde"), 6, 0, "1234567890", 5, S("can't happen")); 489 test(S("abcde"), 6, 0, "1234567890", 9, S("can't happen")); 490 test(S("abcde"), 6, 0, "1234567890", 10, S("can't happen")); 491 test(S("abcde"), 6, 0, "12345678901234567890", 0, S("can't happen")); 492 test(S("abcde"), 6, 0, "12345678901234567890", 1, S("can't happen")); 493 test(S("abcde"), 6, 0, "12345678901234567890", 10, S("can't happen")); 494 test(S("abcde"), 6, 0, "12345678901234567890", 19, S("can't happen")); 495 test(S("abcde"), 6, 0, "12345678901234567890", 20, S("can't happen")); 496 test(S("abcdefghij"), 0, 0, "", 0, S("abcdefghij")); 497 test(S("abcdefghij"), 0, 0, "12345", 0, S("abcdefghij")); 498 test(S("abcdefghij"), 0, 0, "12345", 1, S("1abcdefghij")); 499 test(S("abcdefghij"), 0, 0, "12345", 2, S("12abcdefghij")); 500 test(S("abcdefghij"), 0, 0, "12345", 4, S("1234abcdefghij")); 501 test(S("abcdefghij"), 0, 0, "12345", 5, S("12345abcdefghij")); 502 test(S("abcdefghij"), 0, 0, "1234567890", 0, S("abcdefghij")); 503 test(S("abcdefghij"), 0, 0, "1234567890", 1, S("1abcdefghij")); 504 test(S("abcdefghij"), 0, 0, "1234567890", 5, S("12345abcdefghij")); 505 test(S("abcdefghij"), 0, 0, "1234567890", 9, S("123456789abcdefghij")); 506 test(S("abcdefghij"), 0, 0, "1234567890", 10, S("1234567890abcdefghij")); 507 test(S("abcdefghij"), 0, 0, "12345678901234567890", 0, S("abcdefghij")); 508 test(S("abcdefghij"), 0, 0, "12345678901234567890", 1, S("1abcdefghij")); 509 test(S("abcdefghij"), 0, 0, "12345678901234567890", 10, S("1234567890abcdefghij")); 510 test(S("abcdefghij"), 0, 0, "12345678901234567890", 19, S("1234567890123456789abcdefghij")); 511 test(S("abcdefghij"), 0, 0, "12345678901234567890", 20, S("12345678901234567890abcdefghij")); 512 test(S("abcdefghij"), 0, 1, "", 0, S("bcdefghij")); 513 test(S("abcdefghij"), 0, 1, "12345", 0, S("bcdefghij")); 514 test(S("abcdefghij"), 0, 1, "12345", 1, S("1bcdefghij")); 515 test(S("abcdefghij"), 0, 1, "12345", 2, S("12bcdefghij")); 516 test(S("abcdefghij"), 0, 1, "12345", 4, S("1234bcdefghij")); 517 test(S("abcdefghij"), 0, 1, "12345", 5, S("12345bcdefghij")); 518 test(S("abcdefghij"), 0, 1, "1234567890", 0, S("bcdefghij")); 519 test(S("abcdefghij"), 0, 1, "1234567890", 1, S("1bcdefghij")); 520 test(S("abcdefghij"), 0, 1, "1234567890", 5, S("12345bcdefghij")); 521 test(S("abcdefghij"), 0, 1, "1234567890", 9, S("123456789bcdefghij")); 522 test(S("abcdefghij"), 0, 1, "1234567890", 10, S("1234567890bcdefghij")); 523 test(S("abcdefghij"), 0, 1, "12345678901234567890", 0, S("bcdefghij")); 524 test(S("abcdefghij"), 0, 1, "12345678901234567890", 1, S("1bcdefghij")); 525 test(S("abcdefghij"), 0, 1, "12345678901234567890", 10, S("1234567890bcdefghij")); 526 test(S("abcdefghij"), 0, 1, "12345678901234567890", 19, S("1234567890123456789bcdefghij")); 527 test(S("abcdefghij"), 0, 1, "12345678901234567890", 20, S("12345678901234567890bcdefghij")); 528 test(S("abcdefghij"), 0, 5, "", 0, S("fghij")); 529 test(S("abcdefghij"), 0, 5, "12345", 0, S("fghij")); 530 test(S("abcdefghij"), 0, 5, "12345", 1, S("1fghij")); 531 test(S("abcdefghij"), 0, 5, "12345", 2, S("12fghij")); 532 test(S("abcdefghij"), 0, 5, "12345", 4, S("1234fghij")); 533 test(S("abcdefghij"), 0, 5, "12345", 5, S("12345fghij")); 534 test(S("abcdefghij"), 0, 5, "1234567890", 0, S("fghij")); 535 test(S("abcdefghij"), 0, 5, "1234567890", 1, S("1fghij")); 536 test(S("abcdefghij"), 0, 5, "1234567890", 5, S("12345fghij")); 537 test(S("abcdefghij"), 0, 5, "1234567890", 9, S("123456789fghij")); 538 test(S("abcdefghij"), 0, 5, "1234567890", 10, S("1234567890fghij")); 539 test(S("abcdefghij"), 0, 5, "12345678901234567890", 0, S("fghij")); 540 test(S("abcdefghij"), 0, 5, "12345678901234567890", 1, S("1fghij")); 541 test(S("abcdefghij"), 0, 5, "12345678901234567890", 10, S("1234567890fghij")); 542 test(S("abcdefghij"), 0, 5, "12345678901234567890", 19, S("1234567890123456789fghij")); 543 test(S("abcdefghij"), 0, 5, "12345678901234567890", 20, S("12345678901234567890fghij")); 544 test(S("abcdefghij"), 0, 9, "", 0, S("j")); 545 test(S("abcdefghij"), 0, 9, "12345", 0, S("j")); 546 test(S("abcdefghij"), 0, 9, "12345", 1, S("1j")); 547 test(S("abcdefghij"), 0, 9, "12345", 2, S("12j")); 548 test(S("abcdefghij"), 0, 9, "12345", 4, S("1234j")); 549 test(S("abcdefghij"), 0, 9, "12345", 5, S("12345j")); 550 test(S("abcdefghij"), 0, 9, "1234567890", 0, S("j")); 551 test(S("abcdefghij"), 0, 9, "1234567890", 1, S("1j")); 552 test(S("abcdefghij"), 0, 9, "1234567890", 5, S("12345j")); 553 test(S("abcdefghij"), 0, 9, "1234567890", 9, S("123456789j")); 554 test(S("abcdefghij"), 0, 9, "1234567890", 10, S("1234567890j")); 555 test(S("abcdefghij"), 0, 9, "12345678901234567890", 0, S("j")); 556 test(S("abcdefghij"), 0, 9, "12345678901234567890", 1, S("1j")); 557 test(S("abcdefghij"), 0, 9, "12345678901234567890", 10, S("1234567890j")); 558 test(S("abcdefghij"), 0, 9, "12345678901234567890", 19, S("1234567890123456789j")); 559 test(S("abcdefghij"), 0, 9, "12345678901234567890", 20, S("12345678901234567890j")); 560 test(S("abcdefghij"), 0, 10, "", 0, S("")); 561 test(S("abcdefghij"), 0, 10, "12345", 0, S("")); 562 test(S("abcdefghij"), 0, 10, "12345", 1, S("1")); 563 test(S("abcdefghij"), 0, 10, "12345", 2, S("12")); 564 test(S("abcdefghij"), 0, 10, "12345", 4, S("1234")); 565 test(S("abcdefghij"), 0, 10, "12345", 5, S("12345")); 566 test(S("abcdefghij"), 0, 10, "1234567890", 0, S("")); 567 test(S("abcdefghij"), 0, 10, "1234567890", 1, S("1")); 568 test(S("abcdefghij"), 0, 10, "1234567890", 5, S("12345")); 569 test(S("abcdefghij"), 0, 10, "1234567890", 9, S("123456789")); 570 test(S("abcdefghij"), 0, 10, "1234567890", 10, S("1234567890")); 571 test(S("abcdefghij"), 0, 10, "12345678901234567890", 0, S("")); 572 test(S("abcdefghij"), 0, 10, "12345678901234567890", 1, S("1")); 573 test(S("abcdefghij"), 0, 10, "12345678901234567890", 10, S("1234567890")); 574 test(S("abcdefghij"), 0, 10, "12345678901234567890", 19, S("1234567890123456789")); 575 test(S("abcdefghij"), 0, 10, "12345678901234567890", 20, S("12345678901234567890")); 576 test(S("abcdefghij"), 0, 11, "", 0, S("")); 577 test(S("abcdefghij"), 0, 11, "12345", 0, S("")); 578 test(S("abcdefghij"), 0, 11, "12345", 1, S("1")); 579 test(S("abcdefghij"), 0, 11, "12345", 2, S("12")); 580 } 581 582 template <class S> 583 void test5() 584 { 585 test(S("abcdefghij"), 0, 11, "12345", 4, S("1234")); 586 test(S("abcdefghij"), 0, 11, "12345", 5, S("12345")); 587 test(S("abcdefghij"), 0, 11, "1234567890", 0, S("")); 588 test(S("abcdefghij"), 0, 11, "1234567890", 1, S("1")); 589 test(S("abcdefghij"), 0, 11, "1234567890", 5, S("12345")); 590 test(S("abcdefghij"), 0, 11, "1234567890", 9, S("123456789")); 591 test(S("abcdefghij"), 0, 11, "1234567890", 10, S("1234567890")); 592 test(S("abcdefghij"), 0, 11, "12345678901234567890", 0, S("")); 593 test(S("abcdefghij"), 0, 11, "12345678901234567890", 1, S("1")); 594 test(S("abcdefghij"), 0, 11, "12345678901234567890", 10, S("1234567890")); 595 test(S("abcdefghij"), 0, 11, "12345678901234567890", 19, S("1234567890123456789")); 596 test(S("abcdefghij"), 0, 11, "12345678901234567890", 20, S("12345678901234567890")); 597 test(S("abcdefghij"), 1, 0, "", 0, S("abcdefghij")); 598 test(S("abcdefghij"), 1, 0, "12345", 0, S("abcdefghij")); 599 test(S("abcdefghij"), 1, 0, "12345", 1, S("a1bcdefghij")); 600 test(S("abcdefghij"), 1, 0, "12345", 2, S("a12bcdefghij")); 601 test(S("abcdefghij"), 1, 0, "12345", 4, S("a1234bcdefghij")); 602 test(S("abcdefghij"), 1, 0, "12345", 5, S("a12345bcdefghij")); 603 test(S("abcdefghij"), 1, 0, "1234567890", 0, S("abcdefghij")); 604 test(S("abcdefghij"), 1, 0, "1234567890", 1, S("a1bcdefghij")); 605 test(S("abcdefghij"), 1, 0, "1234567890", 5, S("a12345bcdefghij")); 606 test(S("abcdefghij"), 1, 0, "1234567890", 9, S("a123456789bcdefghij")); 607 test(S("abcdefghij"), 1, 0, "1234567890", 10, S("a1234567890bcdefghij")); 608 test(S("abcdefghij"), 1, 0, "12345678901234567890", 0, S("abcdefghij")); 609 test(S("abcdefghij"), 1, 0, "12345678901234567890", 1, S("a1bcdefghij")); 610 test(S("abcdefghij"), 1, 0, "12345678901234567890", 10, S("a1234567890bcdefghij")); 611 test(S("abcdefghij"), 1, 0, "12345678901234567890", 19, S("a1234567890123456789bcdefghij")); 612 test(S("abcdefghij"), 1, 0, "12345678901234567890", 20, S("a12345678901234567890bcdefghij")); 613 test(S("abcdefghij"), 1, 1, "", 0, S("acdefghij")); 614 test(S("abcdefghij"), 1, 1, "12345", 0, S("acdefghij")); 615 test(S("abcdefghij"), 1, 1, "12345", 1, S("a1cdefghij")); 616 test(S("abcdefghij"), 1, 1, "12345", 2, S("a12cdefghij")); 617 test(S("abcdefghij"), 1, 1, "12345", 4, S("a1234cdefghij")); 618 test(S("abcdefghij"), 1, 1, "12345", 5, S("a12345cdefghij")); 619 test(S("abcdefghij"), 1, 1, "1234567890", 0, S("acdefghij")); 620 test(S("abcdefghij"), 1, 1, "1234567890", 1, S("a1cdefghij")); 621 test(S("abcdefghij"), 1, 1, "1234567890", 5, S("a12345cdefghij")); 622 test(S("abcdefghij"), 1, 1, "1234567890", 9, S("a123456789cdefghij")); 623 test(S("abcdefghij"), 1, 1, "1234567890", 10, S("a1234567890cdefghij")); 624 test(S("abcdefghij"), 1, 1, "12345678901234567890", 0, S("acdefghij")); 625 test(S("abcdefghij"), 1, 1, "12345678901234567890", 1, S("a1cdefghij")); 626 test(S("abcdefghij"), 1, 1, "12345678901234567890", 10, S("a1234567890cdefghij")); 627 test(S("abcdefghij"), 1, 1, "12345678901234567890", 19, S("a1234567890123456789cdefghij")); 628 test(S("abcdefghij"), 1, 1, "12345678901234567890", 20, S("a12345678901234567890cdefghij")); 629 test(S("abcdefghij"), 1, 4, "", 0, S("afghij")); 630 test(S("abcdefghij"), 1, 4, "12345", 0, S("afghij")); 631 test(S("abcdefghij"), 1, 4, "12345", 1, S("a1fghij")); 632 test(S("abcdefghij"), 1, 4, "12345", 2, S("a12fghij")); 633 test(S("abcdefghij"), 1, 4, "12345", 4, S("a1234fghij")); 634 test(S("abcdefghij"), 1, 4, "12345", 5, S("a12345fghij")); 635 test(S("abcdefghij"), 1, 4, "1234567890", 0, S("afghij")); 636 test(S("abcdefghij"), 1, 4, "1234567890", 1, S("a1fghij")); 637 test(S("abcdefghij"), 1, 4, "1234567890", 5, S("a12345fghij")); 638 test(S("abcdefghij"), 1, 4, "1234567890", 9, S("a123456789fghij")); 639 test(S("abcdefghij"), 1, 4, "1234567890", 10, S("a1234567890fghij")); 640 test(S("abcdefghij"), 1, 4, "12345678901234567890", 0, S("afghij")); 641 test(S("abcdefghij"), 1, 4, "12345678901234567890", 1, S("a1fghij")); 642 test(S("abcdefghij"), 1, 4, "12345678901234567890", 10, S("a1234567890fghij")); 643 test(S("abcdefghij"), 1, 4, "12345678901234567890", 19, S("a1234567890123456789fghij")); 644 test(S("abcdefghij"), 1, 4, "12345678901234567890", 20, S("a12345678901234567890fghij")); 645 test(S("abcdefghij"), 1, 8, "", 0, S("aj")); 646 test(S("abcdefghij"), 1, 8, "12345", 0, S("aj")); 647 test(S("abcdefghij"), 1, 8, "12345", 1, S("a1j")); 648 test(S("abcdefghij"), 1, 8, "12345", 2, S("a12j")); 649 test(S("abcdefghij"), 1, 8, "12345", 4, S("a1234j")); 650 test(S("abcdefghij"), 1, 8, "12345", 5, S("a12345j")); 651 test(S("abcdefghij"), 1, 8, "1234567890", 0, S("aj")); 652 test(S("abcdefghij"), 1, 8, "1234567890", 1, S("a1j")); 653 test(S("abcdefghij"), 1, 8, "1234567890", 5, S("a12345j")); 654 test(S("abcdefghij"), 1, 8, "1234567890", 9, S("a123456789j")); 655 test(S("abcdefghij"), 1, 8, "1234567890", 10, S("a1234567890j")); 656 test(S("abcdefghij"), 1, 8, "12345678901234567890", 0, S("aj")); 657 test(S("abcdefghij"), 1, 8, "12345678901234567890", 1, S("a1j")); 658 test(S("abcdefghij"), 1, 8, "12345678901234567890", 10, S("a1234567890j")); 659 test(S("abcdefghij"), 1, 8, "12345678901234567890", 19, S("a1234567890123456789j")); 660 test(S("abcdefghij"), 1, 8, "12345678901234567890", 20, S("a12345678901234567890j")); 661 test(S("abcdefghij"), 1, 9, "", 0, S("a")); 662 test(S("abcdefghij"), 1, 9, "12345", 0, S("a")); 663 test(S("abcdefghij"), 1, 9, "12345", 1, S("a1")); 664 test(S("abcdefghij"), 1, 9, "12345", 2, S("a12")); 665 test(S("abcdefghij"), 1, 9, "12345", 4, S("a1234")); 666 test(S("abcdefghij"), 1, 9, "12345", 5, S("a12345")); 667 test(S("abcdefghij"), 1, 9, "1234567890", 0, S("a")); 668 test(S("abcdefghij"), 1, 9, "1234567890", 1, S("a1")); 669 test(S("abcdefghij"), 1, 9, "1234567890", 5, S("a12345")); 670 test(S("abcdefghij"), 1, 9, "1234567890", 9, S("a123456789")); 671 test(S("abcdefghij"), 1, 9, "1234567890", 10, S("a1234567890")); 672 test(S("abcdefghij"), 1, 9, "12345678901234567890", 0, S("a")); 673 test(S("abcdefghij"), 1, 9, "12345678901234567890", 1, S("a1")); 674 test(S("abcdefghij"), 1, 9, "12345678901234567890", 10, S("a1234567890")); 675 test(S("abcdefghij"), 1, 9, "12345678901234567890", 19, S("a1234567890123456789")); 676 test(S("abcdefghij"), 1, 9, "12345678901234567890", 20, S("a12345678901234567890")); 677 test(S("abcdefghij"), 1, 10, "", 0, S("a")); 678 test(S("abcdefghij"), 1, 10, "12345", 0, S("a")); 679 test(S("abcdefghij"), 1, 10, "12345", 1, S("a1")); 680 test(S("abcdefghij"), 1, 10, "12345", 2, S("a12")); 681 test(S("abcdefghij"), 1, 10, "12345", 4, S("a1234")); 682 test(S("abcdefghij"), 1, 10, "12345", 5, S("a12345")); 683 test(S("abcdefghij"), 1, 10, "1234567890", 0, S("a")); 684 test(S("abcdefghij"), 1, 10, "1234567890", 1, S("a1")); 685 } 686 687 template <class S> 688 void test6() 689 { 690 test(S("abcdefghij"), 1, 10, "1234567890", 5, S("a12345")); 691 test(S("abcdefghij"), 1, 10, "1234567890", 9, S("a123456789")); 692 test(S("abcdefghij"), 1, 10, "1234567890", 10, S("a1234567890")); 693 test(S("abcdefghij"), 1, 10, "12345678901234567890", 0, S("a")); 694 test(S("abcdefghij"), 1, 10, "12345678901234567890", 1, S("a1")); 695 test(S("abcdefghij"), 1, 10, "12345678901234567890", 10, S("a1234567890")); 696 test(S("abcdefghij"), 1, 10, "12345678901234567890", 19, S("a1234567890123456789")); 697 test(S("abcdefghij"), 1, 10, "12345678901234567890", 20, S("a12345678901234567890")); 698 test(S("abcdefghij"), 5, 0, "", 0, S("abcdefghij")); 699 test(S("abcdefghij"), 5, 0, "12345", 0, S("abcdefghij")); 700 test(S("abcdefghij"), 5, 0, "12345", 1, S("abcde1fghij")); 701 test(S("abcdefghij"), 5, 0, "12345", 2, S("abcde12fghij")); 702 test(S("abcdefghij"), 5, 0, "12345", 4, S("abcde1234fghij")); 703 test(S("abcdefghij"), 5, 0, "12345", 5, S("abcde12345fghij")); 704 test(S("abcdefghij"), 5, 0, "1234567890", 0, S("abcdefghij")); 705 test(S("abcdefghij"), 5, 0, "1234567890", 1, S("abcde1fghij")); 706 test(S("abcdefghij"), 5, 0, "1234567890", 5, S("abcde12345fghij")); 707 test(S("abcdefghij"), 5, 0, "1234567890", 9, S("abcde123456789fghij")); 708 test(S("abcdefghij"), 5, 0, "1234567890", 10, S("abcde1234567890fghij")); 709 test(S("abcdefghij"), 5, 0, "12345678901234567890", 0, S("abcdefghij")); 710 test(S("abcdefghij"), 5, 0, "12345678901234567890", 1, S("abcde1fghij")); 711 test(S("abcdefghij"), 5, 0, "12345678901234567890", 10, S("abcde1234567890fghij")); 712 test(S("abcdefghij"), 5, 0, "12345678901234567890", 19, S("abcde1234567890123456789fghij")); 713 test(S("abcdefghij"), 5, 0, "12345678901234567890", 20, S("abcde12345678901234567890fghij")); 714 test(S("abcdefghij"), 5, 1, "", 0, S("abcdeghij")); 715 test(S("abcdefghij"), 5, 1, "12345", 0, S("abcdeghij")); 716 test(S("abcdefghij"), 5, 1, "12345", 1, S("abcde1ghij")); 717 test(S("abcdefghij"), 5, 1, "12345", 2, S("abcde12ghij")); 718 test(S("abcdefghij"), 5, 1, "12345", 4, S("abcde1234ghij")); 719 test(S("abcdefghij"), 5, 1, "12345", 5, S("abcde12345ghij")); 720 test(S("abcdefghij"), 5, 1, "1234567890", 0, S("abcdeghij")); 721 test(S("abcdefghij"), 5, 1, "1234567890", 1, S("abcde1ghij")); 722 test(S("abcdefghij"), 5, 1, "1234567890", 5, S("abcde12345ghij")); 723 test(S("abcdefghij"), 5, 1, "1234567890", 9, S("abcde123456789ghij")); 724 test(S("abcdefghij"), 5, 1, "1234567890", 10, S("abcde1234567890ghij")); 725 test(S("abcdefghij"), 5, 1, "12345678901234567890", 0, S("abcdeghij")); 726 test(S("abcdefghij"), 5, 1, "12345678901234567890", 1, S("abcde1ghij")); 727 test(S("abcdefghij"), 5, 1, "12345678901234567890", 10, S("abcde1234567890ghij")); 728 test(S("abcdefghij"), 5, 1, "12345678901234567890", 19, S("abcde1234567890123456789ghij")); 729 test(S("abcdefghij"), 5, 1, "12345678901234567890", 20, S("abcde12345678901234567890ghij")); 730 test(S("abcdefghij"), 5, 2, "", 0, S("abcdehij")); 731 test(S("abcdefghij"), 5, 2, "12345", 0, S("abcdehij")); 732 test(S("abcdefghij"), 5, 2, "12345", 1, S("abcde1hij")); 733 test(S("abcdefghij"), 5, 2, "12345", 2, S("abcde12hij")); 734 test(S("abcdefghij"), 5, 2, "12345", 4, S("abcde1234hij")); 735 test(S("abcdefghij"), 5, 2, "12345", 5, S("abcde12345hij")); 736 test(S("abcdefghij"), 5, 2, "1234567890", 0, S("abcdehij")); 737 test(S("abcdefghij"), 5, 2, "1234567890", 1, S("abcde1hij")); 738 test(S("abcdefghij"), 5, 2, "1234567890", 5, S("abcde12345hij")); 739 test(S("abcdefghij"), 5, 2, "1234567890", 9, S("abcde123456789hij")); 740 test(S("abcdefghij"), 5, 2, "1234567890", 10, S("abcde1234567890hij")); 741 test(S("abcdefghij"), 5, 2, "12345678901234567890", 0, S("abcdehij")); 742 test(S("abcdefghij"), 5, 2, "12345678901234567890", 1, S("abcde1hij")); 743 test(S("abcdefghij"), 5, 2, "12345678901234567890", 10, S("abcde1234567890hij")); 744 test(S("abcdefghij"), 5, 2, "12345678901234567890", 19, S("abcde1234567890123456789hij")); 745 test(S("abcdefghij"), 5, 2, "12345678901234567890", 20, S("abcde12345678901234567890hij")); 746 test(S("abcdefghij"), 5, 4, "", 0, S("abcdej")); 747 test(S("abcdefghij"), 5, 4, "12345", 0, S("abcdej")); 748 test(S("abcdefghij"), 5, 4, "12345", 1, S("abcde1j")); 749 test(S("abcdefghij"), 5, 4, "12345", 2, S("abcde12j")); 750 test(S("abcdefghij"), 5, 4, "12345", 4, S("abcde1234j")); 751 test(S("abcdefghij"), 5, 4, "12345", 5, S("abcde12345j")); 752 test(S("abcdefghij"), 5, 4, "1234567890", 0, S("abcdej")); 753 test(S("abcdefghij"), 5, 4, "1234567890", 1, S("abcde1j")); 754 test(S("abcdefghij"), 5, 4, "1234567890", 5, S("abcde12345j")); 755 test(S("abcdefghij"), 5, 4, "1234567890", 9, S("abcde123456789j")); 756 test(S("abcdefghij"), 5, 4, "1234567890", 10, S("abcde1234567890j")); 757 test(S("abcdefghij"), 5, 4, "12345678901234567890", 0, S("abcdej")); 758 test(S("abcdefghij"), 5, 4, "12345678901234567890", 1, S("abcde1j")); 759 test(S("abcdefghij"), 5, 4, "12345678901234567890", 10, S("abcde1234567890j")); 760 test(S("abcdefghij"), 5, 4, "12345678901234567890", 19, S("abcde1234567890123456789j")); 761 test(S("abcdefghij"), 5, 4, "12345678901234567890", 20, S("abcde12345678901234567890j")); 762 test(S("abcdefghij"), 5, 5, "", 0, S("abcde")); 763 test(S("abcdefghij"), 5, 5, "12345", 0, S("abcde")); 764 test(S("abcdefghij"), 5, 5, "12345", 1, S("abcde1")); 765 test(S("abcdefghij"), 5, 5, "12345", 2, S("abcde12")); 766 test(S("abcdefghij"), 5, 5, "12345", 4, S("abcde1234")); 767 test(S("abcdefghij"), 5, 5, "12345", 5, S("abcde12345")); 768 test(S("abcdefghij"), 5, 5, "1234567890", 0, S("abcde")); 769 test(S("abcdefghij"), 5, 5, "1234567890", 1, S("abcde1")); 770 test(S("abcdefghij"), 5, 5, "1234567890", 5, S("abcde12345")); 771 test(S("abcdefghij"), 5, 5, "1234567890", 9, S("abcde123456789")); 772 test(S("abcdefghij"), 5, 5, "1234567890", 10, S("abcde1234567890")); 773 test(S("abcdefghij"), 5, 5, "12345678901234567890", 0, S("abcde")); 774 test(S("abcdefghij"), 5, 5, "12345678901234567890", 1, S("abcde1")); 775 test(S("abcdefghij"), 5, 5, "12345678901234567890", 10, S("abcde1234567890")); 776 test(S("abcdefghij"), 5, 5, "12345678901234567890", 19, S("abcde1234567890123456789")); 777 test(S("abcdefghij"), 5, 5, "12345678901234567890", 20, S("abcde12345678901234567890")); 778 test(S("abcdefghij"), 5, 6, "", 0, S("abcde")); 779 test(S("abcdefghij"), 5, 6, "12345", 0, S("abcde")); 780 test(S("abcdefghij"), 5, 6, "12345", 1, S("abcde1")); 781 test(S("abcdefghij"), 5, 6, "12345", 2, S("abcde12")); 782 test(S("abcdefghij"), 5, 6, "12345", 4, S("abcde1234")); 783 test(S("abcdefghij"), 5, 6, "12345", 5, S("abcde12345")); 784 test(S("abcdefghij"), 5, 6, "1234567890", 0, S("abcde")); 785 test(S("abcdefghij"), 5, 6, "1234567890", 1, S("abcde1")); 786 test(S("abcdefghij"), 5, 6, "1234567890", 5, S("abcde12345")); 787 test(S("abcdefghij"), 5, 6, "1234567890", 9, S("abcde123456789")); 788 test(S("abcdefghij"), 5, 6, "1234567890", 10, S("abcde1234567890")); 789 test(S("abcdefghij"), 5, 6, "12345678901234567890", 0, S("abcde")); 790 } 791 792 template <class S> 793 void test7() 794 { 795 test(S("abcdefghij"), 5, 6, "12345678901234567890", 1, S("abcde1")); 796 test(S("abcdefghij"), 5, 6, "12345678901234567890", 10, S("abcde1234567890")); 797 test(S("abcdefghij"), 5, 6, "12345678901234567890", 19, S("abcde1234567890123456789")); 798 test(S("abcdefghij"), 5, 6, "12345678901234567890", 20, S("abcde12345678901234567890")); 799 test(S("abcdefghij"), 9, 0, "", 0, S("abcdefghij")); 800 test(S("abcdefghij"), 9, 0, "12345", 0, S("abcdefghij")); 801 test(S("abcdefghij"), 9, 0, "12345", 1, S("abcdefghi1j")); 802 test(S("abcdefghij"), 9, 0, "12345", 2, S("abcdefghi12j")); 803 test(S("abcdefghij"), 9, 0, "12345", 4, S("abcdefghi1234j")); 804 test(S("abcdefghij"), 9, 0, "12345", 5, S("abcdefghi12345j")); 805 test(S("abcdefghij"), 9, 0, "1234567890", 0, S("abcdefghij")); 806 test(S("abcdefghij"), 9, 0, "1234567890", 1, S("abcdefghi1j")); 807 test(S("abcdefghij"), 9, 0, "1234567890", 5, S("abcdefghi12345j")); 808 test(S("abcdefghij"), 9, 0, "1234567890", 9, S("abcdefghi123456789j")); 809 test(S("abcdefghij"), 9, 0, "1234567890", 10, S("abcdefghi1234567890j")); 810 test(S("abcdefghij"), 9, 0, "12345678901234567890", 0, S("abcdefghij")); 811 test(S("abcdefghij"), 9, 0, "12345678901234567890", 1, S("abcdefghi1j")); 812 test(S("abcdefghij"), 9, 0, "12345678901234567890", 10, S("abcdefghi1234567890j")); 813 test(S("abcdefghij"), 9, 0, "12345678901234567890", 19, S("abcdefghi1234567890123456789j")); 814 test(S("abcdefghij"), 9, 0, "12345678901234567890", 20, S("abcdefghi12345678901234567890j")); 815 test(S("abcdefghij"), 9, 1, "", 0, S("abcdefghi")); 816 test(S("abcdefghij"), 9, 1, "12345", 0, S("abcdefghi")); 817 test(S("abcdefghij"), 9, 1, "12345", 1, S("abcdefghi1")); 818 test(S("abcdefghij"), 9, 1, "12345", 2, S("abcdefghi12")); 819 test(S("abcdefghij"), 9, 1, "12345", 4, S("abcdefghi1234")); 820 test(S("abcdefghij"), 9, 1, "12345", 5, S("abcdefghi12345")); 821 test(S("abcdefghij"), 9, 1, "1234567890", 0, S("abcdefghi")); 822 test(S("abcdefghij"), 9, 1, "1234567890", 1, S("abcdefghi1")); 823 test(S("abcdefghij"), 9, 1, "1234567890", 5, S("abcdefghi12345")); 824 test(S("abcdefghij"), 9, 1, "1234567890", 9, S("abcdefghi123456789")); 825 test(S("abcdefghij"), 9, 1, "1234567890", 10, S("abcdefghi1234567890")); 826 test(S("abcdefghij"), 9, 1, "12345678901234567890", 0, S("abcdefghi")); 827 test(S("abcdefghij"), 9, 1, "12345678901234567890", 1, S("abcdefghi1")); 828 test(S("abcdefghij"), 9, 1, "12345678901234567890", 10, S("abcdefghi1234567890")); 829 test(S("abcdefghij"), 9, 1, "12345678901234567890", 19, S("abcdefghi1234567890123456789")); 830 test(S("abcdefghij"), 9, 1, "12345678901234567890", 20, S("abcdefghi12345678901234567890")); 831 test(S("abcdefghij"), 9, 2, "", 0, S("abcdefghi")); 832 test(S("abcdefghij"), 9, 2, "12345", 0, S("abcdefghi")); 833 test(S("abcdefghij"), 9, 2, "12345", 1, S("abcdefghi1")); 834 test(S("abcdefghij"), 9, 2, "12345", 2, S("abcdefghi12")); 835 test(S("abcdefghij"), 9, 2, "12345", 4, S("abcdefghi1234")); 836 test(S("abcdefghij"), 9, 2, "12345", 5, S("abcdefghi12345")); 837 test(S("abcdefghij"), 9, 2, "1234567890", 0, S("abcdefghi")); 838 test(S("abcdefghij"), 9, 2, "1234567890", 1, S("abcdefghi1")); 839 test(S("abcdefghij"), 9, 2, "1234567890", 5, S("abcdefghi12345")); 840 test(S("abcdefghij"), 9, 2, "1234567890", 9, S("abcdefghi123456789")); 841 test(S("abcdefghij"), 9, 2, "1234567890", 10, S("abcdefghi1234567890")); 842 test(S("abcdefghij"), 9, 2, "12345678901234567890", 0, S("abcdefghi")); 843 test(S("abcdefghij"), 9, 2, "12345678901234567890", 1, S("abcdefghi1")); 844 test(S("abcdefghij"), 9, 2, "12345678901234567890", 10, S("abcdefghi1234567890")); 845 test(S("abcdefghij"), 9, 2, "12345678901234567890", 19, S("abcdefghi1234567890123456789")); 846 test(S("abcdefghij"), 9, 2, "12345678901234567890", 20, S("abcdefghi12345678901234567890")); 847 test(S("abcdefghij"), 10, 0, "", 0, S("abcdefghij")); 848 test(S("abcdefghij"), 10, 0, "12345", 0, S("abcdefghij")); 849 test(S("abcdefghij"), 10, 0, "12345", 1, S("abcdefghij1")); 850 test(S("abcdefghij"), 10, 0, "12345", 2, S("abcdefghij12")); 851 test(S("abcdefghij"), 10, 0, "12345", 4, S("abcdefghij1234")); 852 test(S("abcdefghij"), 10, 0, "12345", 5, S("abcdefghij12345")); 853 test(S("abcdefghij"), 10, 0, "1234567890", 0, S("abcdefghij")); 854 test(S("abcdefghij"), 10, 0, "1234567890", 1, S("abcdefghij1")); 855 test(S("abcdefghij"), 10, 0, "1234567890", 5, S("abcdefghij12345")); 856 test(S("abcdefghij"), 10, 0, "1234567890", 9, S("abcdefghij123456789")); 857 test(S("abcdefghij"), 10, 0, "1234567890", 10, S("abcdefghij1234567890")); 858 test(S("abcdefghij"), 10, 0, "12345678901234567890", 0, S("abcdefghij")); 859 test(S("abcdefghij"), 10, 0, "12345678901234567890", 1, S("abcdefghij1")); 860 test(S("abcdefghij"), 10, 0, "12345678901234567890", 10, S("abcdefghij1234567890")); 861 test(S("abcdefghij"), 10, 0, "12345678901234567890", 19, S("abcdefghij1234567890123456789")); 862 test(S("abcdefghij"), 10, 0, "12345678901234567890", 20, S("abcdefghij12345678901234567890")); 863 test(S("abcdefghij"), 10, 1, "", 0, S("abcdefghij")); 864 test(S("abcdefghij"), 10, 1, "12345", 0, S("abcdefghij")); 865 test(S("abcdefghij"), 10, 1, "12345", 1, S("abcdefghij1")); 866 test(S("abcdefghij"), 10, 1, "12345", 2, S("abcdefghij12")); 867 test(S("abcdefghij"), 10, 1, "12345", 4, S("abcdefghij1234")); 868 test(S("abcdefghij"), 10, 1, "12345", 5, S("abcdefghij12345")); 869 test(S("abcdefghij"), 10, 1, "1234567890", 0, S("abcdefghij")); 870 test(S("abcdefghij"), 10, 1, "1234567890", 1, S("abcdefghij1")); 871 test(S("abcdefghij"), 10, 1, "1234567890", 5, S("abcdefghij12345")); 872 test(S("abcdefghij"), 10, 1, "1234567890", 9, S("abcdefghij123456789")); 873 test(S("abcdefghij"), 10, 1, "1234567890", 10, S("abcdefghij1234567890")); 874 test(S("abcdefghij"), 10, 1, "12345678901234567890", 0, S("abcdefghij")); 875 test(S("abcdefghij"), 10, 1, "12345678901234567890", 1, S("abcdefghij1")); 876 test(S("abcdefghij"), 10, 1, "12345678901234567890", 10, S("abcdefghij1234567890")); 877 test(S("abcdefghij"), 10, 1, "12345678901234567890", 19, S("abcdefghij1234567890123456789")); 878 test(S("abcdefghij"), 10, 1, "12345678901234567890", 20, S("abcdefghij12345678901234567890")); 879 test(S("abcdefghij"), 11, 0, "", 0, S("can't happen")); 880 test(S("abcdefghij"), 11, 0, "12345", 0, S("can't happen")); 881 test(S("abcdefghij"), 11, 0, "12345", 1, S("can't happen")); 882 test(S("abcdefghij"), 11, 0, "12345", 2, S("can't happen")); 883 test(S("abcdefghij"), 11, 0, "12345", 4, S("can't happen")); 884 test(S("abcdefghij"), 11, 0, "12345", 5, S("can't happen")); 885 test(S("abcdefghij"), 11, 0, "1234567890", 0, S("can't happen")); 886 test(S("abcdefghij"), 11, 0, "1234567890", 1, S("can't happen")); 887 test(S("abcdefghij"), 11, 0, "1234567890", 5, S("can't happen")); 888 test(S("abcdefghij"), 11, 0, "1234567890", 9, S("can't happen")); 889 test(S("abcdefghij"), 11, 0, "1234567890", 10, S("can't happen")); 890 test(S("abcdefghij"), 11, 0, "12345678901234567890", 0, S("can't happen")); 891 test(S("abcdefghij"), 11, 0, "12345678901234567890", 1, S("can't happen")); 892 test(S("abcdefghij"), 11, 0, "12345678901234567890", 10, S("can't happen")); 893 test(S("abcdefghij"), 11, 0, "12345678901234567890", 19, S("can't happen")); 894 test(S("abcdefghij"), 11, 0, "12345678901234567890", 20, S("can't happen")); 895 } 896 897 template <class S> 898 void test8() 899 { 900 test(S("abcdefghijklmnopqrst"), 0, 0, "", 0, S("abcdefghijklmnopqrst")); 901 test(S("abcdefghijklmnopqrst"), 0, 0, "12345", 0, S("abcdefghijklmnopqrst")); 902 test(S("abcdefghijklmnopqrst"), 0, 0, "12345", 1, S("1abcdefghijklmnopqrst")); 903 test(S("abcdefghijklmnopqrst"), 0, 0, "12345", 2, S("12abcdefghijklmnopqrst")); 904 test(S("abcdefghijklmnopqrst"), 0, 0, "12345", 4, S("1234abcdefghijklmnopqrst")); 905 test(S("abcdefghijklmnopqrst"), 0, 0, "12345", 5, S("12345abcdefghijklmnopqrst")); 906 test(S("abcdefghijklmnopqrst"), 0, 0, "1234567890", 0, S("abcdefghijklmnopqrst")); 907 test(S("abcdefghijklmnopqrst"), 0, 0, "1234567890", 1, S("1abcdefghijklmnopqrst")); 908 test(S("abcdefghijklmnopqrst"), 0, 0, "1234567890", 5, S("12345abcdefghijklmnopqrst")); 909 test(S("abcdefghijklmnopqrst"), 0, 0, "1234567890", 9, S("123456789abcdefghijklmnopqrst")); 910 test(S("abcdefghijklmnopqrst"), 0, 0, "1234567890", 10, S("1234567890abcdefghijklmnopqrst")); 911 test(S("abcdefghijklmnopqrst"), 0, 0, "12345678901234567890", 0, S("abcdefghijklmnopqrst")); 912 test(S("abcdefghijklmnopqrst"), 0, 0, "12345678901234567890", 1, S("1abcdefghijklmnopqrst")); 913 test(S("abcdefghijklmnopqrst"), 0, 0, "12345678901234567890", 10, S("1234567890abcdefghijklmnopqrst")); 914 test(S("abcdefghijklmnopqrst"), 0, 0, "12345678901234567890", 19, S("1234567890123456789abcdefghijklmnopqrst")); 915 test(S("abcdefghijklmnopqrst"), 0, 0, "12345678901234567890", 20, S("12345678901234567890abcdefghijklmnopqrst")); 916 test(S("abcdefghijklmnopqrst"), 0, 1, "", 0, S("bcdefghijklmnopqrst")); 917 test(S("abcdefghijklmnopqrst"), 0, 1, "12345", 0, S("bcdefghijklmnopqrst")); 918 test(S("abcdefghijklmnopqrst"), 0, 1, "12345", 1, S("1bcdefghijklmnopqrst")); 919 test(S("abcdefghijklmnopqrst"), 0, 1, "12345", 2, S("12bcdefghijklmnopqrst")); 920 test(S("abcdefghijklmnopqrst"), 0, 1, "12345", 4, S("1234bcdefghijklmnopqrst")); 921 test(S("abcdefghijklmnopqrst"), 0, 1, "12345", 5, S("12345bcdefghijklmnopqrst")); 922 test(S("abcdefghijklmnopqrst"), 0, 1, "1234567890", 0, S("bcdefghijklmnopqrst")); 923 test(S("abcdefghijklmnopqrst"), 0, 1, "1234567890", 1, S("1bcdefghijklmnopqrst")); 924 test(S("abcdefghijklmnopqrst"), 0, 1, "1234567890", 5, S("12345bcdefghijklmnopqrst")); 925 test(S("abcdefghijklmnopqrst"), 0, 1, "1234567890", 9, S("123456789bcdefghijklmnopqrst")); 926 test(S("abcdefghijklmnopqrst"), 0, 1, "1234567890", 10, S("1234567890bcdefghijklmnopqrst")); 927 test(S("abcdefghijklmnopqrst"), 0, 1, "12345678901234567890", 0, S("bcdefghijklmnopqrst")); 928 test(S("abcdefghijklmnopqrst"), 0, 1, "12345678901234567890", 1, S("1bcdefghijklmnopqrst")); 929 test(S("abcdefghijklmnopqrst"), 0, 1, "12345678901234567890", 10, S("1234567890bcdefghijklmnopqrst")); 930 test(S("abcdefghijklmnopqrst"), 0, 1, "12345678901234567890", 19, S("1234567890123456789bcdefghijklmnopqrst")); 931 test(S("abcdefghijklmnopqrst"), 0, 1, "12345678901234567890", 20, S("12345678901234567890bcdefghijklmnopqrst")); 932 test(S("abcdefghijklmnopqrst"), 0, 10, "", 0, S("klmnopqrst")); 933 test(S("abcdefghijklmnopqrst"), 0, 10, "12345", 0, S("klmnopqrst")); 934 test(S("abcdefghijklmnopqrst"), 0, 10, "12345", 1, S("1klmnopqrst")); 935 test(S("abcdefghijklmnopqrst"), 0, 10, "12345", 2, S("12klmnopqrst")); 936 test(S("abcdefghijklmnopqrst"), 0, 10, "12345", 4, S("1234klmnopqrst")); 937 test(S("abcdefghijklmnopqrst"), 0, 10, "12345", 5, S("12345klmnopqrst")); 938 test(S("abcdefghijklmnopqrst"), 0, 10, "1234567890", 0, S("klmnopqrst")); 939 test(S("abcdefghijklmnopqrst"), 0, 10, "1234567890", 1, S("1klmnopqrst")); 940 test(S("abcdefghijklmnopqrst"), 0, 10, "1234567890", 5, S("12345klmnopqrst")); 941 test(S("abcdefghijklmnopqrst"), 0, 10, "1234567890", 9, S("123456789klmnopqrst")); 942 test(S("abcdefghijklmnopqrst"), 0, 10, "1234567890", 10, S("1234567890klmnopqrst")); 943 test(S("abcdefghijklmnopqrst"), 0, 10, "12345678901234567890", 0, S("klmnopqrst")); 944 test(S("abcdefghijklmnopqrst"), 0, 10, "12345678901234567890", 1, S("1klmnopqrst")); 945 test(S("abcdefghijklmnopqrst"), 0, 10, "12345678901234567890", 10, S("1234567890klmnopqrst")); 946 test(S("abcdefghijklmnopqrst"), 0, 10, "12345678901234567890", 19, S("1234567890123456789klmnopqrst")); 947 test(S("abcdefghijklmnopqrst"), 0, 10, "12345678901234567890", 20, S("12345678901234567890klmnopqrst")); 948 test(S("abcdefghijklmnopqrst"), 0, 19, "", 0, S("t")); 949 test(S("abcdefghijklmnopqrst"), 0, 19, "12345", 0, S("t")); 950 test(S("abcdefghijklmnopqrst"), 0, 19, "12345", 1, S("1t")); 951 test(S("abcdefghijklmnopqrst"), 0, 19, "12345", 2, S("12t")); 952 test(S("abcdefghijklmnopqrst"), 0, 19, "12345", 4, S("1234t")); 953 test(S("abcdefghijklmnopqrst"), 0, 19, "12345", 5, S("12345t")); 954 test(S("abcdefghijklmnopqrst"), 0, 19, "1234567890", 0, S("t")); 955 test(S("abcdefghijklmnopqrst"), 0, 19, "1234567890", 1, S("1t")); 956 test(S("abcdefghijklmnopqrst"), 0, 19, "1234567890", 5, S("12345t")); 957 test(S("abcdefghijklmnopqrst"), 0, 19, "1234567890", 9, S("123456789t")); 958 test(S("abcdefghijklmnopqrst"), 0, 19, "1234567890", 10, S("1234567890t")); 959 test(S("abcdefghijklmnopqrst"), 0, 19, "12345678901234567890", 0, S("t")); 960 test(S("abcdefghijklmnopqrst"), 0, 19, "12345678901234567890", 1, S("1t")); 961 test(S("abcdefghijklmnopqrst"), 0, 19, "12345678901234567890", 10, S("1234567890t")); 962 test(S("abcdefghijklmnopqrst"), 0, 19, "12345678901234567890", 19, S("1234567890123456789t")); 963 test(S("abcdefghijklmnopqrst"), 0, 19, "12345678901234567890", 20, S("12345678901234567890t")); 964 test(S("abcdefghijklmnopqrst"), 0, 20, "", 0, S("")); 965 test(S("abcdefghijklmnopqrst"), 0, 20, "12345", 0, S("")); 966 test(S("abcdefghijklmnopqrst"), 0, 20, "12345", 1, S("1")); 967 test(S("abcdefghijklmnopqrst"), 0, 20, "12345", 2, S("12")); 968 test(S("abcdefghijklmnopqrst"), 0, 20, "12345", 4, S("1234")); 969 test(S("abcdefghijklmnopqrst"), 0, 20, "12345", 5, S("12345")); 970 test(S("abcdefghijklmnopqrst"), 0, 20, "1234567890", 0, S("")); 971 test(S("abcdefghijklmnopqrst"), 0, 20, "1234567890", 1, S("1")); 972 test(S("abcdefghijklmnopqrst"), 0, 20, "1234567890", 5, S("12345")); 973 test(S("abcdefghijklmnopqrst"), 0, 20, "1234567890", 9, S("123456789")); 974 test(S("abcdefghijklmnopqrst"), 0, 20, "1234567890", 10, S("1234567890")); 975 test(S("abcdefghijklmnopqrst"), 0, 20, "12345678901234567890", 0, S("")); 976 test(S("abcdefghijklmnopqrst"), 0, 20, "12345678901234567890", 1, S("1")); 977 test(S("abcdefghijklmnopqrst"), 0, 20, "12345678901234567890", 10, S("1234567890")); 978 test(S("abcdefghijklmnopqrst"), 0, 20, "12345678901234567890", 19, S("1234567890123456789")); 979 test(S("abcdefghijklmnopqrst"), 0, 20, "12345678901234567890", 20, S("12345678901234567890")); 980 test(S("abcdefghijklmnopqrst"), 0, 21, "", 0, S("")); 981 test(S("abcdefghijklmnopqrst"), 0, 21, "12345", 0, S("")); 982 test(S("abcdefghijklmnopqrst"), 0, 21, "12345", 1, S("1")); 983 test(S("abcdefghijklmnopqrst"), 0, 21, "12345", 2, S("12")); 984 test(S("abcdefghijklmnopqrst"), 0, 21, "12345", 4, S("1234")); 985 test(S("abcdefghijklmnopqrst"), 0, 21, "12345", 5, S("12345")); 986 test(S("abcdefghijklmnopqrst"), 0, 21, "1234567890", 0, S("")); 987 test(S("abcdefghijklmnopqrst"), 0, 21, "1234567890", 1, S("1")); 988 test(S("abcdefghijklmnopqrst"), 0, 21, "1234567890", 5, S("12345")); 989 test(S("abcdefghijklmnopqrst"), 0, 21, "1234567890", 9, S("123456789")); 990 test(S("abcdefghijklmnopqrst"), 0, 21, "1234567890", 10, S("1234567890")); 991 test(S("abcdefghijklmnopqrst"), 0, 21, "12345678901234567890", 0, S("")); 992 test(S("abcdefghijklmnopqrst"), 0, 21, "12345678901234567890", 1, S("1")); 993 test(S("abcdefghijklmnopqrst"), 0, 21, "12345678901234567890", 10, S("1234567890")); 994 test(S("abcdefghijklmnopqrst"), 0, 21, "12345678901234567890", 19, S("1234567890123456789")); 995 test(S("abcdefghijklmnopqrst"), 0, 21, "12345678901234567890", 20, S("12345678901234567890")); 996 test(S("abcdefghijklmnopqrst"), 1, 0, "", 0, S("abcdefghijklmnopqrst")); 997 test(S("abcdefghijklmnopqrst"), 1, 0, "12345", 0, S("abcdefghijklmnopqrst")); 998 test(S("abcdefghijklmnopqrst"), 1, 0, "12345", 1, S("a1bcdefghijklmnopqrst")); 999 test(S("abcdefghijklmnopqrst"), 1, 0, "12345", 2, S("a12bcdefghijklmnopqrst")); 1000 } 1001 1002 template <class S> 1003 void test9() 1004 { 1005 test(S("abcdefghijklmnopqrst"), 1, 0, "12345", 4, S("a1234bcdefghijklmnopqrst")); 1006 test(S("abcdefghijklmnopqrst"), 1, 0, "12345", 5, S("a12345bcdefghijklmnopqrst")); 1007 test(S("abcdefghijklmnopqrst"), 1, 0, "1234567890", 0, S("abcdefghijklmnopqrst")); 1008 test(S("abcdefghijklmnopqrst"), 1, 0, "1234567890", 1, S("a1bcdefghijklmnopqrst")); 1009 test(S("abcdefghijklmnopqrst"), 1, 0, "1234567890", 5, S("a12345bcdefghijklmnopqrst")); 1010 test(S("abcdefghijklmnopqrst"), 1, 0, "1234567890", 9, S("a123456789bcdefghijklmnopqrst")); 1011 test(S("abcdefghijklmnopqrst"), 1, 0, "1234567890", 10, S("a1234567890bcdefghijklmnopqrst")); 1012 test(S("abcdefghijklmnopqrst"), 1, 0, "12345678901234567890", 0, S("abcdefghijklmnopqrst")); 1013 test(S("abcdefghijklmnopqrst"), 1, 0, "12345678901234567890", 1, S("a1bcdefghijklmnopqrst")); 1014 test(S("abcdefghijklmnopqrst"), 1, 0, "12345678901234567890", 10, S("a1234567890bcdefghijklmnopqrst")); 1015 test(S("abcdefghijklmnopqrst"), 1, 0, "12345678901234567890", 19, S("a1234567890123456789bcdefghijklmnopqrst")); 1016 test(S("abcdefghijklmnopqrst"), 1, 0, "12345678901234567890", 20, S("a12345678901234567890bcdefghijklmnopqrst")); 1017 test(S("abcdefghijklmnopqrst"), 1, 1, "", 0, S("acdefghijklmnopqrst")); 1018 test(S("abcdefghijklmnopqrst"), 1, 1, "12345", 0, S("acdefghijklmnopqrst")); 1019 test(S("abcdefghijklmnopqrst"), 1, 1, "12345", 1, S("a1cdefghijklmnopqrst")); 1020 test(S("abcdefghijklmnopqrst"), 1, 1, "12345", 2, S("a12cdefghijklmnopqrst")); 1021 test(S("abcdefghijklmnopqrst"), 1, 1, "12345", 4, S("a1234cdefghijklmnopqrst")); 1022 test(S("abcdefghijklmnopqrst"), 1, 1, "12345", 5, S("a12345cdefghijklmnopqrst")); 1023 test(S("abcdefghijklmnopqrst"), 1, 1, "1234567890", 0, S("acdefghijklmnopqrst")); 1024 test(S("abcdefghijklmnopqrst"), 1, 1, "1234567890", 1, S("a1cdefghijklmnopqrst")); 1025 test(S("abcdefghijklmnopqrst"), 1, 1, "1234567890", 5, S("a12345cdefghijklmnopqrst")); 1026 test(S("abcdefghijklmnopqrst"), 1, 1, "1234567890", 9, S("a123456789cdefghijklmnopqrst")); 1027 test(S("abcdefghijklmnopqrst"), 1, 1, "1234567890", 10, S("a1234567890cdefghijklmnopqrst")); 1028 test(S("abcdefghijklmnopqrst"), 1, 1, "12345678901234567890", 0, S("acdefghijklmnopqrst")); 1029 test(S("abcdefghijklmnopqrst"), 1, 1, "12345678901234567890", 1, S("a1cdefghijklmnopqrst")); 1030 test(S("abcdefghijklmnopqrst"), 1, 1, "12345678901234567890", 10, S("a1234567890cdefghijklmnopqrst")); 1031 test(S("abcdefghijklmnopqrst"), 1, 1, "12345678901234567890", 19, S("a1234567890123456789cdefghijklmnopqrst")); 1032 test(S("abcdefghijklmnopqrst"), 1, 1, "12345678901234567890", 20, S("a12345678901234567890cdefghijklmnopqrst")); 1033 test(S("abcdefghijklmnopqrst"), 1, 9, "", 0, S("aklmnopqrst")); 1034 test(S("abcdefghijklmnopqrst"), 1, 9, "12345", 0, S("aklmnopqrst")); 1035 test(S("abcdefghijklmnopqrst"), 1, 9, "12345", 1, S("a1klmnopqrst")); 1036 test(S("abcdefghijklmnopqrst"), 1, 9, "12345", 2, S("a12klmnopqrst")); 1037 test(S("abcdefghijklmnopqrst"), 1, 9, "12345", 4, S("a1234klmnopqrst")); 1038 test(S("abcdefghijklmnopqrst"), 1, 9, "12345", 5, S("a12345klmnopqrst")); 1039 test(S("abcdefghijklmnopqrst"), 1, 9, "1234567890", 0, S("aklmnopqrst")); 1040 test(S("abcdefghijklmnopqrst"), 1, 9, "1234567890", 1, S("a1klmnopqrst")); 1041 test(S("abcdefghijklmnopqrst"), 1, 9, "1234567890", 5, S("a12345klmnopqrst")); 1042 test(S("abcdefghijklmnopqrst"), 1, 9, "1234567890", 9, S("a123456789klmnopqrst")); 1043 test(S("abcdefghijklmnopqrst"), 1, 9, "1234567890", 10, S("a1234567890klmnopqrst")); 1044 test(S("abcdefghijklmnopqrst"), 1, 9, "12345678901234567890", 0, S("aklmnopqrst")); 1045 test(S("abcdefghijklmnopqrst"), 1, 9, "12345678901234567890", 1, S("a1klmnopqrst")); 1046 test(S("abcdefghijklmnopqrst"), 1, 9, "12345678901234567890", 10, S("a1234567890klmnopqrst")); 1047 test(S("abcdefghijklmnopqrst"), 1, 9, "12345678901234567890", 19, S("a1234567890123456789klmnopqrst")); 1048 test(S("abcdefghijklmnopqrst"), 1, 9, "12345678901234567890", 20, S("a12345678901234567890klmnopqrst")); 1049 test(S("abcdefghijklmnopqrst"), 1, 18, "", 0, S("at")); 1050 test(S("abcdefghijklmnopqrst"), 1, 18, "12345", 0, S("at")); 1051 test(S("abcdefghijklmnopqrst"), 1, 18, "12345", 1, S("a1t")); 1052 test(S("abcdefghijklmnopqrst"), 1, 18, "12345", 2, S("a12t")); 1053 test(S("abcdefghijklmnopqrst"), 1, 18, "12345", 4, S("a1234t")); 1054 test(S("abcdefghijklmnopqrst"), 1, 18, "12345", 5, S("a12345t")); 1055 test(S("abcdefghijklmnopqrst"), 1, 18, "1234567890", 0, S("at")); 1056 test(S("abcdefghijklmnopqrst"), 1, 18, "1234567890", 1, S("a1t")); 1057 test(S("abcdefghijklmnopqrst"), 1, 18, "1234567890", 5, S("a12345t")); 1058 test(S("abcdefghijklmnopqrst"), 1, 18, "1234567890", 9, S("a123456789t")); 1059 test(S("abcdefghijklmnopqrst"), 1, 18, "1234567890", 10, S("a1234567890t")); 1060 test(S("abcdefghijklmnopqrst"), 1, 18, "12345678901234567890", 0, S("at")); 1061 test(S("abcdefghijklmnopqrst"), 1, 18, "12345678901234567890", 1, S("a1t")); 1062 test(S("abcdefghijklmnopqrst"), 1, 18, "12345678901234567890", 10, S("a1234567890t")); 1063 test(S("abcdefghijklmnopqrst"), 1, 18, "12345678901234567890", 19, S("a1234567890123456789t")); 1064 test(S("abcdefghijklmnopqrst"), 1, 18, "12345678901234567890", 20, S("a12345678901234567890t")); 1065 test(S("abcdefghijklmnopqrst"), 1, 19, "", 0, S("a")); 1066 test(S("abcdefghijklmnopqrst"), 1, 19, "12345", 0, S("a")); 1067 test(S("abcdefghijklmnopqrst"), 1, 19, "12345", 1, S("a1")); 1068 test(S("abcdefghijklmnopqrst"), 1, 19, "12345", 2, S("a12")); 1069 test(S("abcdefghijklmnopqrst"), 1, 19, "12345", 4, S("a1234")); 1070 test(S("abcdefghijklmnopqrst"), 1, 19, "12345", 5, S("a12345")); 1071 test(S("abcdefghijklmnopqrst"), 1, 19, "1234567890", 0, S("a")); 1072 test(S("abcdefghijklmnopqrst"), 1, 19, "1234567890", 1, S("a1")); 1073 test(S("abcdefghijklmnopqrst"), 1, 19, "1234567890", 5, S("a12345")); 1074 test(S("abcdefghijklmnopqrst"), 1, 19, "1234567890", 9, S("a123456789")); 1075 test(S("abcdefghijklmnopqrst"), 1, 19, "1234567890", 10, S("a1234567890")); 1076 test(S("abcdefghijklmnopqrst"), 1, 19, "12345678901234567890", 0, S("a")); 1077 test(S("abcdefghijklmnopqrst"), 1, 19, "12345678901234567890", 1, S("a1")); 1078 test(S("abcdefghijklmnopqrst"), 1, 19, "12345678901234567890", 10, S("a1234567890")); 1079 test(S("abcdefghijklmnopqrst"), 1, 19, "12345678901234567890", 19, S("a1234567890123456789")); 1080 test(S("abcdefghijklmnopqrst"), 1, 19, "12345678901234567890", 20, S("a12345678901234567890")); 1081 test(S("abcdefghijklmnopqrst"), 1, 20, "", 0, S("a")); 1082 test(S("abcdefghijklmnopqrst"), 1, 20, "12345", 0, S("a")); 1083 test(S("abcdefghijklmnopqrst"), 1, 20, "12345", 1, S("a1")); 1084 test(S("abcdefghijklmnopqrst"), 1, 20, "12345", 2, S("a12")); 1085 test(S("abcdefghijklmnopqrst"), 1, 20, "12345", 4, S("a1234")); 1086 test(S("abcdefghijklmnopqrst"), 1, 20, "12345", 5, S("a12345")); 1087 test(S("abcdefghijklmnopqrst"), 1, 20, "1234567890", 0, S("a")); 1088 test(S("abcdefghijklmnopqrst"), 1, 20, "1234567890", 1, S("a1")); 1089 test(S("abcdefghijklmnopqrst"), 1, 20, "1234567890", 5, S("a12345")); 1090 test(S("abcdefghijklmnopqrst"), 1, 20, "1234567890", 9, S("a123456789")); 1091 test(S("abcdefghijklmnopqrst"), 1, 20, "1234567890", 10, S("a1234567890")); 1092 test(S("abcdefghijklmnopqrst"), 1, 20, "12345678901234567890", 0, S("a")); 1093 test(S("abcdefghijklmnopqrst"), 1, 20, "12345678901234567890", 1, S("a1")); 1094 test(S("abcdefghijklmnopqrst"), 1, 20, "12345678901234567890", 10, S("a1234567890")); 1095 test(S("abcdefghijklmnopqrst"), 1, 20, "12345678901234567890", 19, S("a1234567890123456789")); 1096 test(S("abcdefghijklmnopqrst"), 1, 20, "12345678901234567890", 20, S("a12345678901234567890")); 1097 test(S("abcdefghijklmnopqrst"), 10, 0, "", 0, S("abcdefghijklmnopqrst")); 1098 test(S("abcdefghijklmnopqrst"), 10, 0, "12345", 0, S("abcdefghijklmnopqrst")); 1099 test(S("abcdefghijklmnopqrst"), 10, 0, "12345", 1, S("abcdefghij1klmnopqrst")); 1100 test(S("abcdefghijklmnopqrst"), 10, 0, "12345", 2, S("abcdefghij12klmnopqrst")); 1101 test(S("abcdefghijklmnopqrst"), 10, 0, "12345", 4, S("abcdefghij1234klmnopqrst")); 1102 test(S("abcdefghijklmnopqrst"), 10, 0, "12345", 5, S("abcdefghij12345klmnopqrst")); 1103 test(S("abcdefghijklmnopqrst"), 10, 0, "1234567890", 0, S("abcdefghijklmnopqrst")); 1104 test(S("abcdefghijklmnopqrst"), 10, 0, "1234567890", 1, S("abcdefghij1klmnopqrst")); 1105 } 1106 1107 template <class S> 1108 void test10() 1109 { 1110 test(S("abcdefghijklmnopqrst"), 10, 0, "1234567890", 5, S("abcdefghij12345klmnopqrst")); 1111 test(S("abcdefghijklmnopqrst"), 10, 0, "1234567890", 9, S("abcdefghij123456789klmnopqrst")); 1112 test(S("abcdefghijklmnopqrst"), 10, 0, "1234567890", 10, S("abcdefghij1234567890klmnopqrst")); 1113 test(S("abcdefghijklmnopqrst"), 10, 0, "12345678901234567890", 0, S("abcdefghijklmnopqrst")); 1114 test(S("abcdefghijklmnopqrst"), 10, 0, "12345678901234567890", 1, S("abcdefghij1klmnopqrst")); 1115 test(S("abcdefghijklmnopqrst"), 10, 0, "12345678901234567890", 10, S("abcdefghij1234567890klmnopqrst")); 1116 test(S("abcdefghijklmnopqrst"), 10, 0, "12345678901234567890", 19, S("abcdefghij1234567890123456789klmnopqrst")); 1117 test(S("abcdefghijklmnopqrst"), 10, 0, "12345678901234567890", 20, S("abcdefghij12345678901234567890klmnopqrst")); 1118 test(S("abcdefghijklmnopqrst"), 10, 1, "", 0, S("abcdefghijlmnopqrst")); 1119 test(S("abcdefghijklmnopqrst"), 10, 1, "12345", 0, S("abcdefghijlmnopqrst")); 1120 test(S("abcdefghijklmnopqrst"), 10, 1, "12345", 1, S("abcdefghij1lmnopqrst")); 1121 test(S("abcdefghijklmnopqrst"), 10, 1, "12345", 2, S("abcdefghij12lmnopqrst")); 1122 test(S("abcdefghijklmnopqrst"), 10, 1, "12345", 4, S("abcdefghij1234lmnopqrst")); 1123 test(S("abcdefghijklmnopqrst"), 10, 1, "12345", 5, S("abcdefghij12345lmnopqrst")); 1124 test(S("abcdefghijklmnopqrst"), 10, 1, "1234567890", 0, S("abcdefghijlmnopqrst")); 1125 test(S("abcdefghijklmnopqrst"), 10, 1, "1234567890", 1, S("abcdefghij1lmnopqrst")); 1126 test(S("abcdefghijklmnopqrst"), 10, 1, "1234567890", 5, S("abcdefghij12345lmnopqrst")); 1127 test(S("abcdefghijklmnopqrst"), 10, 1, "1234567890", 9, S("abcdefghij123456789lmnopqrst")); 1128 test(S("abcdefghijklmnopqrst"), 10, 1, "1234567890", 10, S("abcdefghij1234567890lmnopqrst")); 1129 test(S("abcdefghijklmnopqrst"), 10, 1, "12345678901234567890", 0, S("abcdefghijlmnopqrst")); 1130 test(S("abcdefghijklmnopqrst"), 10, 1, "12345678901234567890", 1, S("abcdefghij1lmnopqrst")); 1131 test(S("abcdefghijklmnopqrst"), 10, 1, "12345678901234567890", 10, S("abcdefghij1234567890lmnopqrst")); 1132 test(S("abcdefghijklmnopqrst"), 10, 1, "12345678901234567890", 19, S("abcdefghij1234567890123456789lmnopqrst")); 1133 test(S("abcdefghijklmnopqrst"), 10, 1, "12345678901234567890", 20, S("abcdefghij12345678901234567890lmnopqrst")); 1134 test(S("abcdefghijklmnopqrst"), 10, 5, "", 0, S("abcdefghijpqrst")); 1135 test(S("abcdefghijklmnopqrst"), 10, 5, "12345", 0, S("abcdefghijpqrst")); 1136 test(S("abcdefghijklmnopqrst"), 10, 5, "12345", 1, S("abcdefghij1pqrst")); 1137 test(S("abcdefghijklmnopqrst"), 10, 5, "12345", 2, S("abcdefghij12pqrst")); 1138 test(S("abcdefghijklmnopqrst"), 10, 5, "12345", 4, S("abcdefghij1234pqrst")); 1139 test(S("abcdefghijklmnopqrst"), 10, 5, "12345", 5, S("abcdefghij12345pqrst")); 1140 test(S("abcdefghijklmnopqrst"), 10, 5, "1234567890", 0, S("abcdefghijpqrst")); 1141 test(S("abcdefghijklmnopqrst"), 10, 5, "1234567890", 1, S("abcdefghij1pqrst")); 1142 test(S("abcdefghijklmnopqrst"), 10, 5, "1234567890", 5, S("abcdefghij12345pqrst")); 1143 test(S("abcdefghijklmnopqrst"), 10, 5, "1234567890", 9, S("abcdefghij123456789pqrst")); 1144 test(S("abcdefghijklmnopqrst"), 10, 5, "1234567890", 10, S("abcdefghij1234567890pqrst")); 1145 test(S("abcdefghijklmnopqrst"), 10, 5, "12345678901234567890", 0, S("abcdefghijpqrst")); 1146 test(S("abcdefghijklmnopqrst"), 10, 5, "12345678901234567890", 1, S("abcdefghij1pqrst")); 1147 test(S("abcdefghijklmnopqrst"), 10, 5, "12345678901234567890", 10, S("abcdefghij1234567890pqrst")); 1148 test(S("abcdefghijklmnopqrst"), 10, 5, "12345678901234567890", 19, S("abcdefghij1234567890123456789pqrst")); 1149 test(S("abcdefghijklmnopqrst"), 10, 5, "12345678901234567890", 20, S("abcdefghij12345678901234567890pqrst")); 1150 test(S("abcdefghijklmnopqrst"), 10, 9, "", 0, S("abcdefghijt")); 1151 test(S("abcdefghijklmnopqrst"), 10, 9, "12345", 0, S("abcdefghijt")); 1152 test(S("abcdefghijklmnopqrst"), 10, 9, "12345", 1, S("abcdefghij1t")); 1153 test(S("abcdefghijklmnopqrst"), 10, 9, "12345", 2, S("abcdefghij12t")); 1154 test(S("abcdefghijklmnopqrst"), 10, 9, "12345", 4, S("abcdefghij1234t")); 1155 test(S("abcdefghijklmnopqrst"), 10, 9, "12345", 5, S("abcdefghij12345t")); 1156 test(S("abcdefghijklmnopqrst"), 10, 9, "1234567890", 0, S("abcdefghijt")); 1157 test(S("abcdefghijklmnopqrst"), 10, 9, "1234567890", 1, S("abcdefghij1t")); 1158 test(S("abcdefghijklmnopqrst"), 10, 9, "1234567890", 5, S("abcdefghij12345t")); 1159 test(S("abcdefghijklmnopqrst"), 10, 9, "1234567890", 9, S("abcdefghij123456789t")); 1160 test(S("abcdefghijklmnopqrst"), 10, 9, "1234567890", 10, S("abcdefghij1234567890t")); 1161 test(S("abcdefghijklmnopqrst"), 10, 9, "12345678901234567890", 0, S("abcdefghijt")); 1162 test(S("abcdefghijklmnopqrst"), 10, 9, "12345678901234567890", 1, S("abcdefghij1t")); 1163 test(S("abcdefghijklmnopqrst"), 10, 9, "12345678901234567890", 10, S("abcdefghij1234567890t")); 1164 test(S("abcdefghijklmnopqrst"), 10, 9, "12345678901234567890", 19, S("abcdefghij1234567890123456789t")); 1165 test(S("abcdefghijklmnopqrst"), 10, 9, "12345678901234567890", 20, S("abcdefghij12345678901234567890t")); 1166 test(S("abcdefghijklmnopqrst"), 10, 10, "", 0, S("abcdefghij")); 1167 test(S("abcdefghijklmnopqrst"), 10, 10, "12345", 0, S("abcdefghij")); 1168 test(S("abcdefghijklmnopqrst"), 10, 10, "12345", 1, S("abcdefghij1")); 1169 test(S("abcdefghijklmnopqrst"), 10, 10, "12345", 2, S("abcdefghij12")); 1170 test(S("abcdefghijklmnopqrst"), 10, 10, "12345", 4, S("abcdefghij1234")); 1171 test(S("abcdefghijklmnopqrst"), 10, 10, "12345", 5, S("abcdefghij12345")); 1172 test(S("abcdefghijklmnopqrst"), 10, 10, "1234567890", 0, S("abcdefghij")); 1173 test(S("abcdefghijklmnopqrst"), 10, 10, "1234567890", 1, S("abcdefghij1")); 1174 test(S("abcdefghijklmnopqrst"), 10, 10, "1234567890", 5, S("abcdefghij12345")); 1175 test(S("abcdefghijklmnopqrst"), 10, 10, "1234567890", 9, S("abcdefghij123456789")); 1176 test(S("abcdefghijklmnopqrst"), 10, 10, "1234567890", 10, S("abcdefghij1234567890")); 1177 test(S("abcdefghijklmnopqrst"), 10, 10, "12345678901234567890", 0, S("abcdefghij")); 1178 test(S("abcdefghijklmnopqrst"), 10, 10, "12345678901234567890", 1, S("abcdefghij1")); 1179 test(S("abcdefghijklmnopqrst"), 10, 10, "12345678901234567890", 10, S("abcdefghij1234567890")); 1180 test(S("abcdefghijklmnopqrst"), 10, 10, "12345678901234567890", 19, S("abcdefghij1234567890123456789")); 1181 test(S("abcdefghijklmnopqrst"), 10, 10, "12345678901234567890", 20, S("abcdefghij12345678901234567890")); 1182 test(S("abcdefghijklmnopqrst"), 10, 11, "", 0, S("abcdefghij")); 1183 test(S("abcdefghijklmnopqrst"), 10, 11, "12345", 0, S("abcdefghij")); 1184 test(S("abcdefghijklmnopqrst"), 10, 11, "12345", 1, S("abcdefghij1")); 1185 test(S("abcdefghijklmnopqrst"), 10, 11, "12345", 2, S("abcdefghij12")); 1186 test(S("abcdefghijklmnopqrst"), 10, 11, "12345", 4, S("abcdefghij1234")); 1187 test(S("abcdefghijklmnopqrst"), 10, 11, "12345", 5, S("abcdefghij12345")); 1188 test(S("abcdefghijklmnopqrst"), 10, 11, "1234567890", 0, S("abcdefghij")); 1189 test(S("abcdefghijklmnopqrst"), 10, 11, "1234567890", 1, S("abcdefghij1")); 1190 test(S("abcdefghijklmnopqrst"), 10, 11, "1234567890", 5, S("abcdefghij12345")); 1191 test(S("abcdefghijklmnopqrst"), 10, 11, "1234567890", 9, S("abcdefghij123456789")); 1192 test(S("abcdefghijklmnopqrst"), 10, 11, "1234567890", 10, S("abcdefghij1234567890")); 1193 test(S("abcdefghijklmnopqrst"), 10, 11, "12345678901234567890", 0, S("abcdefghij")); 1194 test(S("abcdefghijklmnopqrst"), 10, 11, "12345678901234567890", 1, S("abcdefghij1")); 1195 test(S("abcdefghijklmnopqrst"), 10, 11, "12345678901234567890", 10, S("abcdefghij1234567890")); 1196 test(S("abcdefghijklmnopqrst"), 10, 11, "12345678901234567890", 19, S("abcdefghij1234567890123456789")); 1197 test(S("abcdefghijklmnopqrst"), 10, 11, "12345678901234567890", 20, S("abcdefghij12345678901234567890")); 1198 test(S("abcdefghijklmnopqrst"), 19, 0, "", 0, S("abcdefghijklmnopqrst")); 1199 test(S("abcdefghijklmnopqrst"), 19, 0, "12345", 0, S("abcdefghijklmnopqrst")); 1200 test(S("abcdefghijklmnopqrst"), 19, 0, "12345", 1, S("abcdefghijklmnopqrs1t")); 1201 test(S("abcdefghijklmnopqrst"), 19, 0, "12345", 2, S("abcdefghijklmnopqrs12t")); 1202 test(S("abcdefghijklmnopqrst"), 19, 0, "12345", 4, S("abcdefghijklmnopqrs1234t")); 1203 test(S("abcdefghijklmnopqrst"), 19, 0, "12345", 5, S("abcdefghijklmnopqrs12345t")); 1204 test(S("abcdefghijklmnopqrst"), 19, 0, "1234567890", 0, S("abcdefghijklmnopqrst")); 1205 test(S("abcdefghijklmnopqrst"), 19, 0, "1234567890", 1, S("abcdefghijklmnopqrs1t")); 1206 test(S("abcdefghijklmnopqrst"), 19, 0, "1234567890", 5, S("abcdefghijklmnopqrs12345t")); 1207 test(S("abcdefghijklmnopqrst"), 19, 0, "1234567890", 9, S("abcdefghijklmnopqrs123456789t")); 1208 test(S("abcdefghijklmnopqrst"), 19, 0, "1234567890", 10, S("abcdefghijklmnopqrs1234567890t")); 1209 test(S("abcdefghijklmnopqrst"), 19, 0, "12345678901234567890", 0, S("abcdefghijklmnopqrst")); 1210 } 1211 1212 template <class S> 1213 void test11() 1214 { 1215 test(S("abcdefghijklmnopqrst"), 19, 0, "12345678901234567890", 1, S("abcdefghijklmnopqrs1t")); 1216 test(S("abcdefghijklmnopqrst"), 19, 0, "12345678901234567890", 10, S("abcdefghijklmnopqrs1234567890t")); 1217 test(S("abcdefghijklmnopqrst"), 19, 0, "12345678901234567890", 19, S("abcdefghijklmnopqrs1234567890123456789t")); 1218 test(S("abcdefghijklmnopqrst"), 19, 0, "12345678901234567890", 20, S("abcdefghijklmnopqrs12345678901234567890t")); 1219 test(S("abcdefghijklmnopqrst"), 19, 1, "", 0, S("abcdefghijklmnopqrs")); 1220 test(S("abcdefghijklmnopqrst"), 19, 1, "12345", 0, S("abcdefghijklmnopqrs")); 1221 test(S("abcdefghijklmnopqrst"), 19, 1, "12345", 1, S("abcdefghijklmnopqrs1")); 1222 test(S("abcdefghijklmnopqrst"), 19, 1, "12345", 2, S("abcdefghijklmnopqrs12")); 1223 test(S("abcdefghijklmnopqrst"), 19, 1, "12345", 4, S("abcdefghijklmnopqrs1234")); 1224 test(S("abcdefghijklmnopqrst"), 19, 1, "12345", 5, S("abcdefghijklmnopqrs12345")); 1225 test(S("abcdefghijklmnopqrst"), 19, 1, "1234567890", 0, S("abcdefghijklmnopqrs")); 1226 test(S("abcdefghijklmnopqrst"), 19, 1, "1234567890", 1, S("abcdefghijklmnopqrs1")); 1227 test(S("abcdefghijklmnopqrst"), 19, 1, "1234567890", 5, S("abcdefghijklmnopqrs12345")); 1228 test(S("abcdefghijklmnopqrst"), 19, 1, "1234567890", 9, S("abcdefghijklmnopqrs123456789")); 1229 test(S("abcdefghijklmnopqrst"), 19, 1, "1234567890", 10, S("abcdefghijklmnopqrs1234567890")); 1230 test(S("abcdefghijklmnopqrst"), 19, 1, "12345678901234567890", 0, S("abcdefghijklmnopqrs")); 1231 test(S("abcdefghijklmnopqrst"), 19, 1, "12345678901234567890", 1, S("abcdefghijklmnopqrs1")); 1232 test(S("abcdefghijklmnopqrst"), 19, 1, "12345678901234567890", 10, S("abcdefghijklmnopqrs1234567890")); 1233 test(S("abcdefghijklmnopqrst"), 19, 1, "12345678901234567890", 19, S("abcdefghijklmnopqrs1234567890123456789")); 1234 test(S("abcdefghijklmnopqrst"), 19, 1, "12345678901234567890", 20, S("abcdefghijklmnopqrs12345678901234567890")); 1235 test(S("abcdefghijklmnopqrst"), 19, 2, "", 0, S("abcdefghijklmnopqrs")); 1236 test(S("abcdefghijklmnopqrst"), 19, 2, "12345", 0, S("abcdefghijklmnopqrs")); 1237 test(S("abcdefghijklmnopqrst"), 19, 2, "12345", 1, S("abcdefghijklmnopqrs1")); 1238 test(S("abcdefghijklmnopqrst"), 19, 2, "12345", 2, S("abcdefghijklmnopqrs12")); 1239 test(S("abcdefghijklmnopqrst"), 19, 2, "12345", 4, S("abcdefghijklmnopqrs1234")); 1240 test(S("abcdefghijklmnopqrst"), 19, 2, "12345", 5, S("abcdefghijklmnopqrs12345")); 1241 test(S("abcdefghijklmnopqrst"), 19, 2, "1234567890", 0, S("abcdefghijklmnopqrs")); 1242 test(S("abcdefghijklmnopqrst"), 19, 2, "1234567890", 1, S("abcdefghijklmnopqrs1")); 1243 test(S("abcdefghijklmnopqrst"), 19, 2, "1234567890", 5, S("abcdefghijklmnopqrs12345")); 1244 test(S("abcdefghijklmnopqrst"), 19, 2, "1234567890", 9, S("abcdefghijklmnopqrs123456789")); 1245 test(S("abcdefghijklmnopqrst"), 19, 2, "1234567890", 10, S("abcdefghijklmnopqrs1234567890")); 1246 test(S("abcdefghijklmnopqrst"), 19, 2, "12345678901234567890", 0, S("abcdefghijklmnopqrs")); 1247 test(S("abcdefghijklmnopqrst"), 19, 2, "12345678901234567890", 1, S("abcdefghijklmnopqrs1")); 1248 test(S("abcdefghijklmnopqrst"), 19, 2, "12345678901234567890", 10, S("abcdefghijklmnopqrs1234567890")); 1249 test(S("abcdefghijklmnopqrst"), 19, 2, "12345678901234567890", 19, S("abcdefghijklmnopqrs1234567890123456789")); 1250 test(S("abcdefghijklmnopqrst"), 19, 2, "12345678901234567890", 20, S("abcdefghijklmnopqrs12345678901234567890")); 1251 test(S("abcdefghijklmnopqrst"), 20, 0, "", 0, S("abcdefghijklmnopqrst")); 1252 test(S("abcdefghijklmnopqrst"), 20, 0, "12345", 0, S("abcdefghijklmnopqrst")); 1253 test(S("abcdefghijklmnopqrst"), 20, 0, "12345", 1, S("abcdefghijklmnopqrst1")); 1254 test(S("abcdefghijklmnopqrst"), 20, 0, "12345", 2, S("abcdefghijklmnopqrst12")); 1255 test(S("abcdefghijklmnopqrst"), 20, 0, "12345", 4, S("abcdefghijklmnopqrst1234")); 1256 test(S("abcdefghijklmnopqrst"), 20, 0, "12345", 5, S("abcdefghijklmnopqrst12345")); 1257 test(S("abcdefghijklmnopqrst"), 20, 0, "1234567890", 0, S("abcdefghijklmnopqrst")); 1258 test(S("abcdefghijklmnopqrst"), 20, 0, "1234567890", 1, S("abcdefghijklmnopqrst1")); 1259 test(S("abcdefghijklmnopqrst"), 20, 0, "1234567890", 5, S("abcdefghijklmnopqrst12345")); 1260 test(S("abcdefghijklmnopqrst"), 20, 0, "1234567890", 9, S("abcdefghijklmnopqrst123456789")); 1261 test(S("abcdefghijklmnopqrst"), 20, 0, "1234567890", 10, S("abcdefghijklmnopqrst1234567890")); 1262 test(S("abcdefghijklmnopqrst"), 20, 0, "12345678901234567890", 0, S("abcdefghijklmnopqrst")); 1263 test(S("abcdefghijklmnopqrst"), 20, 0, "12345678901234567890", 1, S("abcdefghijklmnopqrst1")); 1264 test(S("abcdefghijklmnopqrst"), 20, 0, "12345678901234567890", 10, S("abcdefghijklmnopqrst1234567890")); 1265 test(S("abcdefghijklmnopqrst"), 20, 0, "12345678901234567890", 19, S("abcdefghijklmnopqrst1234567890123456789")); 1266 test(S("abcdefghijklmnopqrst"), 20, 0, "12345678901234567890", 20, S("abcdefghijklmnopqrst12345678901234567890")); 1267 test(S("abcdefghijklmnopqrst"), 20, 1, "", 0, S("abcdefghijklmnopqrst")); 1268 test(S("abcdefghijklmnopqrst"), 20, 1, "12345", 0, S("abcdefghijklmnopqrst")); 1269 test(S("abcdefghijklmnopqrst"), 20, 1, "12345", 1, S("abcdefghijklmnopqrst1")); 1270 test(S("abcdefghijklmnopqrst"), 20, 1, "12345", 2, S("abcdefghijklmnopqrst12")); 1271 test(S("abcdefghijklmnopqrst"), 20, 1, "12345", 4, S("abcdefghijklmnopqrst1234")); 1272 test(S("abcdefghijklmnopqrst"), 20, 1, "12345", 5, S("abcdefghijklmnopqrst12345")); 1273 test(S("abcdefghijklmnopqrst"), 20, 1, "1234567890", 0, S("abcdefghijklmnopqrst")); 1274 test(S("abcdefghijklmnopqrst"), 20, 1, "1234567890", 1, S("abcdefghijklmnopqrst1")); 1275 test(S("abcdefghijklmnopqrst"), 20, 1, "1234567890", 5, S("abcdefghijklmnopqrst12345")); 1276 test(S("abcdefghijklmnopqrst"), 20, 1, "1234567890", 9, S("abcdefghijklmnopqrst123456789")); 1277 test(S("abcdefghijklmnopqrst"), 20, 1, "1234567890", 10, S("abcdefghijklmnopqrst1234567890")); 1278 test(S("abcdefghijklmnopqrst"), 20, 1, "12345678901234567890", 0, S("abcdefghijklmnopqrst")); 1279 test(S("abcdefghijklmnopqrst"), 20, 1, "12345678901234567890", 1, S("abcdefghijklmnopqrst1")); 1280 test(S("abcdefghijklmnopqrst"), 20, 1, "12345678901234567890", 10, S("abcdefghijklmnopqrst1234567890")); 1281 test(S("abcdefghijklmnopqrst"), 20, 1, "12345678901234567890", 19, S("abcdefghijklmnopqrst1234567890123456789")); 1282 test(S("abcdefghijklmnopqrst"), 20, 1, "12345678901234567890", 20, S("abcdefghijklmnopqrst12345678901234567890")); 1283 test(S("abcdefghijklmnopqrst"), 21, 0, "", 0, S("can't happen")); 1284 test(S("abcdefghijklmnopqrst"), 21, 0, "12345", 0, S("can't happen")); 1285 test(S("abcdefghijklmnopqrst"), 21, 0, "12345", 1, S("can't happen")); 1286 test(S("abcdefghijklmnopqrst"), 21, 0, "12345", 2, S("can't happen")); 1287 test(S("abcdefghijklmnopqrst"), 21, 0, "12345", 4, S("can't happen")); 1288 test(S("abcdefghijklmnopqrst"), 21, 0, "12345", 5, S("can't happen")); 1289 test(S("abcdefghijklmnopqrst"), 21, 0, "1234567890", 0, S("can't happen")); 1290 test(S("abcdefghijklmnopqrst"), 21, 0, "1234567890", 1, S("can't happen")); 1291 test(S("abcdefghijklmnopqrst"), 21, 0, "1234567890", 5, S("can't happen")); 1292 test(S("abcdefghijklmnopqrst"), 21, 0, "1234567890", 9, S("can't happen")); 1293 test(S("abcdefghijklmnopqrst"), 21, 0, "1234567890", 10, S("can't happen")); 1294 test(S("abcdefghijklmnopqrst"), 21, 0, "12345678901234567890", 0, S("can't happen")); 1295 test(S("abcdefghijklmnopqrst"), 21, 0, "12345678901234567890", 1, S("can't happen")); 1296 test(S("abcdefghijklmnopqrst"), 21, 0, "12345678901234567890", 10, S("can't happen")); 1297 test(S("abcdefghijklmnopqrst"), 21, 0, "12345678901234567890", 19, S("can't happen")); 1298 test(S("abcdefghijklmnopqrst"), 21, 0, "12345678901234567890", 20, S("can't happen")); 1299 } 1300 1301 int main() 1302 { 1303 { 1304 typedef std::string S; 1305 test0<S>(); 1306 test1<S>(); 1307 test2<S>(); 1308 test3<S>(); 1309 test4<S>(); 1310 test5<S>(); 1311 test6<S>(); 1312 test7<S>(); 1313 test8<S>(); 1314 test9<S>(); 1315 test10<S>(); 1316 test11<S>(); 1317 } 1318 #if TEST_STD_VER >= 11 1319 { 1320 typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S; 1321 test0<S>(); 1322 test1<S>(); 1323 test2<S>(); 1324 test3<S>(); 1325 test4<S>(); 1326 test5<S>(); 1327 test6<S>(); 1328 test7<S>(); 1329 test8<S>(); 1330 test9<S>(); 1331 test10<S>(); 1332 test11<S>(); 1333 } 1334 #endif 1335 } 1336