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