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 pos1, size_type n1, const basic_string& str, 13// size_type pos2, size_type n2=npos) const; 14// the "=npos" was added in C++14 15 16#include <string> 17#include <stdexcept> 18#include <cassert> 19 20#include "min_allocator.h" 21 22#include "test_macros.h" 23 24int sign(int x) 25{ 26 if (x == 0) 27 return 0; 28 if (x < 0) 29 return -1; 30 return 1; 31} 32 33template <class S> 34void 35test(const S& s, typename S::size_type pos1, typename S::size_type n1, 36 const S& str, typename S::size_type pos2, typename S::size_type n2, int x) 37{ 38 if (pos1 <= s.size() && pos2 <= str.size()) 39 assert(sign(s.compare(pos1, n1, str, pos2, n2)) == sign(x)); 40#ifndef TEST_HAS_NO_EXCEPTIONS 41 else 42 { 43 try 44 { 45 s.compare(pos1, n1, str, pos2, n2); 46 assert(false); 47 } 48 catch (const std::out_of_range&) 49 { 50 assert(pos1 > s.size() || pos2 > str.size()); 51 } 52 } 53#endif 54} 55 56template <class S> 57void 58test_npos(const S& s, typename S::size_type pos1, typename S::size_type n1, 59 const S& str, typename S::size_type pos2, int x) 60{ 61 if (pos1 <= s.size() && pos2 <= str.size()) 62 assert(sign(s.compare(pos1, n1, str, pos2)) == sign(x)); 63#ifndef TEST_HAS_NO_EXCEPTIONS 64 else 65 { 66 try 67 { 68 s.compare(pos1, n1, str, pos2); 69 assert(false); 70 } 71 catch (const std::out_of_range&) 72 { 73 assert(pos1 > s.size() || pos2 > str.size()); 74 } 75 } 76#endif 77} 78 79template <class S> 80void test0() 81{ 82 test(S(""), 0, 0, S(""), 0, 0, 0); 83 test(S(""), 0, 0, S(""), 0, 1, 0); 84 test(S(""), 0, 0, S(""), 1, 0, 0); 85 test(S(""), 0, 0, S("abcde"), 0, 0, 0); 86 test(S(""), 0, 0, S("abcde"), 0, 1, -1); 87 test(S(""), 0, 0, S("abcde"), 0, 2, -2); 88 test(S(""), 0, 0, S("abcde"), 0, 4, -4); 89 test(S(""), 0, 0, S("abcde"), 0, 5, -5); 90 test(S(""), 0, 0, S("abcde"), 0, 6, -5); 91 test(S(""), 0, 0, S("abcde"), 1, 0, 0); 92 test(S(""), 0, 0, S("abcde"), 1, 1, -1); 93 test(S(""), 0, 0, S("abcde"), 1, 2, -2); 94 test(S(""), 0, 0, S("abcde"), 1, 3, -3); 95 test(S(""), 0, 0, S("abcde"), 1, 4, -4); 96 test(S(""), 0, 0, S("abcde"), 1, 5, -4); 97 test(S(""), 0, 0, S("abcde"), 2, 0, 0); 98 test(S(""), 0, 0, S("abcde"), 2, 1, -1); 99 test(S(""), 0, 0, S("abcde"), 2, 2, -2); 100 test(S(""), 0, 0, S("abcde"), 2, 3, -3); 101 test(S(""), 0, 0, S("abcde"), 2, 4, -3); 102 test(S(""), 0, 0, S("abcde"), 4, 0, 0); 103 test(S(""), 0, 0, S("abcde"), 4, 1, -1); 104 test(S(""), 0, 0, S("abcde"), 4, 2, -1); 105 test(S(""), 0, 0, S("abcde"), 5, 0, 0); 106 test(S(""), 0, 0, S("abcde"), 5, 1, 0); 107 test(S(""), 0, 0, S("abcde"), 6, 0, 0); 108 test(S(""), 0, 0, S("abcdefghij"), 0, 0, 0); 109 test(S(""), 0, 0, S("abcdefghij"), 0, 1, -1); 110 test(S(""), 0, 0, S("abcdefghij"), 0, 5, -5); 111 test(S(""), 0, 0, S("abcdefghij"), 0, 9, -9); 112 test(S(""), 0, 0, S("abcdefghij"), 0, 10, -10); 113 test(S(""), 0, 0, S("abcdefghij"), 0, 11, -10); 114 test(S(""), 0, 0, S("abcdefghij"), 1, 0, 0); 115 test(S(""), 0, 0, S("abcdefghij"), 1, 1, -1); 116 test(S(""), 0, 0, S("abcdefghij"), 1, 4, -4); 117 test(S(""), 0, 0, S("abcdefghij"), 1, 8, -8); 118 test(S(""), 0, 0, S("abcdefghij"), 1, 9, -9); 119 test(S(""), 0, 0, S("abcdefghij"), 1, 10, -9); 120 test(S(""), 0, 0, S("abcdefghij"), 5, 0, 0); 121 test(S(""), 0, 0, S("abcdefghij"), 5, 1, -1); 122 test(S(""), 0, 0, S("abcdefghij"), 5, 2, -2); 123 test(S(""), 0, 0, S("abcdefghij"), 5, 4, -4); 124 test(S(""), 0, 0, S("abcdefghij"), 5, 5, -5); 125 test(S(""), 0, 0, S("abcdefghij"), 5, 6, -5); 126 test(S(""), 0, 0, S("abcdefghij"), 9, 0, 0); 127 test(S(""), 0, 0, S("abcdefghij"), 9, 1, -1); 128 test(S(""), 0, 0, S("abcdefghij"), 9, 2, -1); 129 test(S(""), 0, 0, S("abcdefghij"), 10, 0, 0); 130 test(S(""), 0, 0, S("abcdefghij"), 10, 1, 0); 131 test(S(""), 0, 0, S("abcdefghij"), 11, 0, 0); 132 test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 0, 0, 0); 133 test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 0, 1, -1); 134 test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 0, 10, -10); 135 test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 0, 19, -19); 136 test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 0, 20, -20); 137 test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 0, 21, -20); 138 test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 1, 0, 0); 139 test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 1, 1, -1); 140 test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 1, 9, -9); 141 test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 1, 18, -18); 142 test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 1, 19, -19); 143 test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 1, 20, -19); 144 test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 10, 0, 0); 145 test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 10, 1, -1); 146 test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 10, 5, -5); 147 test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 10, 9, -9); 148 test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 10, 10, -10); 149 test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 10, 11, -10); 150 test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 19, 0, 0); 151 test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 19, 1, -1); 152 test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 19, 2, -1); 153 test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 20, 0, 0); 154 test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 20, 1, 0); 155 test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 21, 0, 0); 156 test(S(""), 0, 1, S(""), 0, 0, 0); 157 test(S(""), 0, 1, S(""), 0, 1, 0); 158 test(S(""), 0, 1, S(""), 1, 0, 0); 159 test(S(""), 0, 1, S("abcde"), 0, 0, 0); 160 test(S(""), 0, 1, S("abcde"), 0, 1, -1); 161 test(S(""), 0, 1, S("abcde"), 0, 2, -2); 162 test(S(""), 0, 1, S("abcde"), 0, 4, -4); 163 test(S(""), 0, 1, S("abcde"), 0, 5, -5); 164 test(S(""), 0, 1, S("abcde"), 0, 6, -5); 165 test(S(""), 0, 1, S("abcde"), 1, 0, 0); 166 test(S(""), 0, 1, S("abcde"), 1, 1, -1); 167 test(S(""), 0, 1, S("abcde"), 1, 2, -2); 168 test(S(""), 0, 1, S("abcde"), 1, 3, -3); 169 test(S(""), 0, 1, S("abcde"), 1, 4, -4); 170 test(S(""), 0, 1, S("abcde"), 1, 5, -4); 171 test(S(""), 0, 1, S("abcde"), 2, 0, 0); 172 test(S(""), 0, 1, S("abcde"), 2, 1, -1); 173 test(S(""), 0, 1, S("abcde"), 2, 2, -2); 174 test(S(""), 0, 1, S("abcde"), 2, 3, -3); 175 test(S(""), 0, 1, S("abcde"), 2, 4, -3); 176 test(S(""), 0, 1, S("abcde"), 4, 0, 0); 177 test(S(""), 0, 1, S("abcde"), 4, 1, -1); 178 test(S(""), 0, 1, S("abcde"), 4, 2, -1); 179 test(S(""), 0, 1, S("abcde"), 5, 0, 0); 180 test(S(""), 0, 1, S("abcde"), 5, 1, 0); 181 test(S(""), 0, 1, S("abcde"), 6, 0, 0); 182} 183 184template <class S> 185void test1() 186{ 187 test(S(""), 0, 1, S("abcdefghij"), 0, 0, 0); 188 test(S(""), 0, 1, S("abcdefghij"), 0, 1, -1); 189 test(S(""), 0, 1, S("abcdefghij"), 0, 5, -5); 190 test(S(""), 0, 1, S("abcdefghij"), 0, 9, -9); 191 test(S(""), 0, 1, S("abcdefghij"), 0, 10, -10); 192 test(S(""), 0, 1, S("abcdefghij"), 0, 11, -10); 193 test(S(""), 0, 1, S("abcdefghij"), 1, 0, 0); 194 test(S(""), 0, 1, S("abcdefghij"), 1, 1, -1); 195 test(S(""), 0, 1, S("abcdefghij"), 1, 4, -4); 196 test(S(""), 0, 1, S("abcdefghij"), 1, 8, -8); 197 test(S(""), 0, 1, S("abcdefghij"), 1, 9, -9); 198 test(S(""), 0, 1, S("abcdefghij"), 1, 10, -9); 199 test(S(""), 0, 1, S("abcdefghij"), 5, 0, 0); 200 test(S(""), 0, 1, S("abcdefghij"), 5, 1, -1); 201 test(S(""), 0, 1, S("abcdefghij"), 5, 2, -2); 202 test(S(""), 0, 1, S("abcdefghij"), 5, 4, -4); 203 test(S(""), 0, 1, S("abcdefghij"), 5, 5, -5); 204 test(S(""), 0, 1, S("abcdefghij"), 5, 6, -5); 205 test(S(""), 0, 1, S("abcdefghij"), 9, 0, 0); 206 test(S(""), 0, 1, S("abcdefghij"), 9, 1, -1); 207 test(S(""), 0, 1, S("abcdefghij"), 9, 2, -1); 208 test(S(""), 0, 1, S("abcdefghij"), 10, 0, 0); 209 test(S(""), 0, 1, S("abcdefghij"), 10, 1, 0); 210 test(S(""), 0, 1, S("abcdefghij"), 11, 0, 0); 211 test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 0, 0, 0); 212 test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 0, 1, -1); 213 test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 0, 10, -10); 214 test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 0, 19, -19); 215 test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 0, 20, -20); 216 test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 0, 21, -20); 217 test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 1, 0, 0); 218 test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 1, 1, -1); 219 test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 1, 9, -9); 220 test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 1, 18, -18); 221 test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 1, 19, -19); 222 test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 1, 20, -19); 223 test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 10, 0, 0); 224 test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 10, 1, -1); 225 test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 10, 5, -5); 226 test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 10, 9, -9); 227 test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 10, 10, -10); 228 test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 10, 11, -10); 229 test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 19, 0, 0); 230 test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 19, 1, -1); 231 test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 19, 2, -1); 232 test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 20, 0, 0); 233 test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 20, 1, 0); 234 test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 21, 0, 0); 235 test(S(""), 1, 0, S(""), 0, 0, 0); 236 test(S(""), 1, 0, S(""), 0, 1, 0); 237 test(S(""), 1, 0, S(""), 1, 0, 0); 238 test(S(""), 1, 0, S("abcde"), 0, 0, 0); 239 test(S(""), 1, 0, S("abcde"), 0, 1, 0); 240 test(S(""), 1, 0, S("abcde"), 0, 2, 0); 241 test(S(""), 1, 0, S("abcde"), 0, 4, 0); 242 test(S(""), 1, 0, S("abcde"), 0, 5, 0); 243 test(S(""), 1, 0, S("abcde"), 0, 6, 0); 244 test(S(""), 1, 0, S("abcde"), 1, 0, 0); 245 test(S(""), 1, 0, S("abcde"), 1, 1, 0); 246 test(S(""), 1, 0, S("abcde"), 1, 2, 0); 247 test(S(""), 1, 0, S("abcde"), 1, 3, 0); 248 test(S(""), 1, 0, S("abcde"), 1, 4, 0); 249 test(S(""), 1, 0, S("abcde"), 1, 5, 0); 250 test(S(""), 1, 0, S("abcde"), 2, 0, 0); 251 test(S(""), 1, 0, S("abcde"), 2, 1, 0); 252 test(S(""), 1, 0, S("abcde"), 2, 2, 0); 253 test(S(""), 1, 0, S("abcde"), 2, 3, 0); 254 test(S(""), 1, 0, S("abcde"), 2, 4, 0); 255 test(S(""), 1, 0, S("abcde"), 4, 0, 0); 256 test(S(""), 1, 0, S("abcde"), 4, 1, 0); 257 test(S(""), 1, 0, S("abcde"), 4, 2, 0); 258 test(S(""), 1, 0, S("abcde"), 5, 0, 0); 259 test(S(""), 1, 0, S("abcde"), 5, 1, 0); 260 test(S(""), 1, 0, S("abcde"), 6, 0, 0); 261 test(S(""), 1, 0, S("abcdefghij"), 0, 0, 0); 262 test(S(""), 1, 0, S("abcdefghij"), 0, 1, 0); 263 test(S(""), 1, 0, S("abcdefghij"), 0, 5, 0); 264 test(S(""), 1, 0, S("abcdefghij"), 0, 9, 0); 265 test(S(""), 1, 0, S("abcdefghij"), 0, 10, 0); 266 test(S(""), 1, 0, S("abcdefghij"), 0, 11, 0); 267 test(S(""), 1, 0, S("abcdefghij"), 1, 0, 0); 268 test(S(""), 1, 0, S("abcdefghij"), 1, 1, 0); 269 test(S(""), 1, 0, S("abcdefghij"), 1, 4, 0); 270 test(S(""), 1, 0, S("abcdefghij"), 1, 8, 0); 271 test(S(""), 1, 0, S("abcdefghij"), 1, 9, 0); 272 test(S(""), 1, 0, S("abcdefghij"), 1, 10, 0); 273 test(S(""), 1, 0, S("abcdefghij"), 5, 0, 0); 274 test(S(""), 1, 0, S("abcdefghij"), 5, 1, 0); 275 test(S(""), 1, 0, S("abcdefghij"), 5, 2, 0); 276 test(S(""), 1, 0, S("abcdefghij"), 5, 4, 0); 277 test(S(""), 1, 0, S("abcdefghij"), 5, 5, 0); 278 test(S(""), 1, 0, S("abcdefghij"), 5, 6, 0); 279 test(S(""), 1, 0, S("abcdefghij"), 9, 0, 0); 280 test(S(""), 1, 0, S("abcdefghij"), 9, 1, 0); 281 test(S(""), 1, 0, S("abcdefghij"), 9, 2, 0); 282 test(S(""), 1, 0, S("abcdefghij"), 10, 0, 0); 283 test(S(""), 1, 0, S("abcdefghij"), 10, 1, 0); 284 test(S(""), 1, 0, S("abcdefghij"), 11, 0, 0); 285 test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 0, 0, 0); 286 test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 0, 1, 0); 287} 288 289template <class S> 290void test2() 291{ 292 test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 0, 10, 0); 293 test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 0, 19, 0); 294 test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 0, 20, 0); 295 test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 0, 21, 0); 296 test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 1, 0, 0); 297 test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 1, 1, 0); 298 test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 1, 9, 0); 299 test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 1, 18, 0); 300 test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 1, 19, 0); 301 test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 1, 20, 0); 302 test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 10, 0, 0); 303 test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 10, 1, 0); 304 test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 10, 5, 0); 305 test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 10, 9, 0); 306 test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 10, 10, 0); 307 test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 10, 11, 0); 308 test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 19, 0, 0); 309 test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 19, 1, 0); 310 test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 19, 2, 0); 311 test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 20, 0, 0); 312 test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 20, 1, 0); 313 test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 21, 0, 0); 314 test(S("abcde"), 0, 0, S(""), 0, 0, 0); 315 test(S("abcde"), 0, 0, S(""), 0, 1, 0); 316 test(S("abcde"), 0, 0, S(""), 1, 0, 0); 317 test(S("abcde"), 0, 0, S("abcde"), 0, 0, 0); 318 test(S("abcde"), 0, 0, S("abcde"), 0, 1, -1); 319 test(S("abcde"), 0, 0, S("abcde"), 0, 2, -2); 320 test(S("abcde"), 0, 0, S("abcde"), 0, 4, -4); 321 test(S("abcde"), 0, 0, S("abcde"), 0, 5, -5); 322 test(S("abcde"), 0, 0, S("abcde"), 0, 6, -5); 323 test(S("abcde"), 0, 0, S("abcde"), 1, 0, 0); 324 test(S("abcde"), 0, 0, S("abcde"), 1, 1, -1); 325 test(S("abcde"), 0, 0, S("abcde"), 1, 2, -2); 326 test(S("abcde"), 0, 0, S("abcde"), 1, 3, -3); 327 test(S("abcde"), 0, 0, S("abcde"), 1, 4, -4); 328 test(S("abcde"), 0, 0, S("abcde"), 1, 5, -4); 329 test(S("abcde"), 0, 0, S("abcde"), 2, 0, 0); 330 test(S("abcde"), 0, 0, S("abcde"), 2, 1, -1); 331 test(S("abcde"), 0, 0, S("abcde"), 2, 2, -2); 332 test(S("abcde"), 0, 0, S("abcde"), 2, 3, -3); 333 test(S("abcde"), 0, 0, S("abcde"), 2, 4, -3); 334 test(S("abcde"), 0, 0, S("abcde"), 4, 0, 0); 335 test(S("abcde"), 0, 0, S("abcde"), 4, 1, -1); 336 test(S("abcde"), 0, 0, S("abcde"), 4, 2, -1); 337 test(S("abcde"), 0, 0, S("abcde"), 5, 0, 0); 338 test(S("abcde"), 0, 0, S("abcde"), 5, 1, 0); 339 test(S("abcde"), 0, 0, S("abcde"), 6, 0, 0); 340 test(S("abcde"), 0, 0, S("abcdefghij"), 0, 0, 0); 341 test(S("abcde"), 0, 0, S("abcdefghij"), 0, 1, -1); 342 test(S("abcde"), 0, 0, S("abcdefghij"), 0, 5, -5); 343 test(S("abcde"), 0, 0, S("abcdefghij"), 0, 9, -9); 344 test(S("abcde"), 0, 0, S("abcdefghij"), 0, 10, -10); 345 test(S("abcde"), 0, 0, S("abcdefghij"), 0, 11, -10); 346 test(S("abcde"), 0, 0, S("abcdefghij"), 1, 0, 0); 347 test(S("abcde"), 0, 0, S("abcdefghij"), 1, 1, -1); 348 test(S("abcde"), 0, 0, S("abcdefghij"), 1, 4, -4); 349 test(S("abcde"), 0, 0, S("abcdefghij"), 1, 8, -8); 350 test(S("abcde"), 0, 0, S("abcdefghij"), 1, 9, -9); 351 test(S("abcde"), 0, 0, S("abcdefghij"), 1, 10, -9); 352 test(S("abcde"), 0, 0, S("abcdefghij"), 5, 0, 0); 353 test(S("abcde"), 0, 0, S("abcdefghij"), 5, 1, -1); 354 test(S("abcde"), 0, 0, S("abcdefghij"), 5, 2, -2); 355 test(S("abcde"), 0, 0, S("abcdefghij"), 5, 4, -4); 356 test(S("abcde"), 0, 0, S("abcdefghij"), 5, 5, -5); 357 test(S("abcde"), 0, 0, S("abcdefghij"), 5, 6, -5); 358 test(S("abcde"), 0, 0, S("abcdefghij"), 9, 0, 0); 359 test(S("abcde"), 0, 0, S("abcdefghij"), 9, 1, -1); 360 test(S("abcde"), 0, 0, S("abcdefghij"), 9, 2, -1); 361 test(S("abcde"), 0, 0, S("abcdefghij"), 10, 0, 0); 362 test(S("abcde"), 0, 0, S("abcdefghij"), 10, 1, 0); 363 test(S("abcde"), 0, 0, S("abcdefghij"), 11, 0, 0); 364 test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 0, 0, 0); 365 test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 0, 1, -1); 366 test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 0, 10, -10); 367 test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 0, 19, -19); 368 test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 0, 20, -20); 369 test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 0, 21, -20); 370 test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 1, 0, 0); 371 test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 1, 1, -1); 372 test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 1, 9, -9); 373 test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 1, 18, -18); 374 test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 1, 19, -19); 375 test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 1, 20, -19); 376 test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 10, 0, 0); 377 test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 10, 1, -1); 378 test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 10, 5, -5); 379 test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 10, 9, -9); 380 test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 10, 10, -10); 381 test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 10, 11, -10); 382 test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 19, 0, 0); 383 test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 19, 1, -1); 384 test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 19, 2, -1); 385 test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 20, 0, 0); 386 test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 20, 1, 0); 387 test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 21, 0, 0); 388 test(S("abcde"), 0, 1, S(""), 0, 0, 1); 389 test(S("abcde"), 0, 1, S(""), 0, 1, 1); 390 test(S("abcde"), 0, 1, S(""), 1, 0, 0); 391 test(S("abcde"), 0, 1, S("abcde"), 0, 0, 1); 392} 393 394template <class S> 395void test3() 396{ 397 test(S("abcde"), 0, 1, S("abcde"), 0, 1, 0); 398 test(S("abcde"), 0, 1, S("abcde"), 0, 2, -1); 399 test(S("abcde"), 0, 1, S("abcde"), 0, 4, -3); 400 test(S("abcde"), 0, 1, S("abcde"), 0, 5, -4); 401 test(S("abcde"), 0, 1, S("abcde"), 0, 6, -4); 402 test(S("abcde"), 0, 1, S("abcde"), 1, 0, 1); 403 test(S("abcde"), 0, 1, S("abcde"), 1, 1, -1); 404 test(S("abcde"), 0, 1, S("abcde"), 1, 2, -1); 405 test(S("abcde"), 0, 1, S("abcde"), 1, 3, -1); 406 test(S("abcde"), 0, 1, S("abcde"), 1, 4, -1); 407 test(S("abcde"), 0, 1, S("abcde"), 1, 5, -1); 408 test(S("abcde"), 0, 1, S("abcde"), 2, 0, 1); 409 test(S("abcde"), 0, 1, S("abcde"), 2, 1, -2); 410 test(S("abcde"), 0, 1, S("abcde"), 2, 2, -2); 411 test(S("abcde"), 0, 1, S("abcde"), 2, 3, -2); 412 test(S("abcde"), 0, 1, S("abcde"), 2, 4, -2); 413 test(S("abcde"), 0, 1, S("abcde"), 4, 0, 1); 414 test(S("abcde"), 0, 1, S("abcde"), 4, 1, -4); 415 test(S("abcde"), 0, 1, S("abcde"), 4, 2, -4); 416 test(S("abcde"), 0, 1, S("abcde"), 5, 0, 1); 417 test(S("abcde"), 0, 1, S("abcde"), 5, 1, 1); 418 test(S("abcde"), 0, 1, S("abcde"), 6, 0, 0); 419 test(S("abcde"), 0, 1, S("abcdefghij"), 0, 0, 1); 420 test(S("abcde"), 0, 1, S("abcdefghij"), 0, 1, 0); 421 test(S("abcde"), 0, 1, S("abcdefghij"), 0, 5, -4); 422 test(S("abcde"), 0, 1, S("abcdefghij"), 0, 9, -8); 423 test(S("abcde"), 0, 1, S("abcdefghij"), 0, 10, -9); 424 test(S("abcde"), 0, 1, S("abcdefghij"), 0, 11, -9); 425 test(S("abcde"), 0, 1, S("abcdefghij"), 1, 0, 1); 426 test(S("abcde"), 0, 1, S("abcdefghij"), 1, 1, -1); 427 test(S("abcde"), 0, 1, S("abcdefghij"), 1, 4, -1); 428 test(S("abcde"), 0, 1, S("abcdefghij"), 1, 8, -1); 429 test(S("abcde"), 0, 1, S("abcdefghij"), 1, 9, -1); 430 test(S("abcde"), 0, 1, S("abcdefghij"), 1, 10, -1); 431 test(S("abcde"), 0, 1, S("abcdefghij"), 5, 0, 1); 432 test(S("abcde"), 0, 1, S("abcdefghij"), 5, 1, -5); 433 test(S("abcde"), 0, 1, S("abcdefghij"), 5, 2, -5); 434 test(S("abcde"), 0, 1, S("abcdefghij"), 5, 4, -5); 435 test(S("abcde"), 0, 1, S("abcdefghij"), 5, 5, -5); 436 test(S("abcde"), 0, 1, S("abcdefghij"), 5, 6, -5); 437 test(S("abcde"), 0, 1, S("abcdefghij"), 9, 0, 1); 438 test(S("abcde"), 0, 1, S("abcdefghij"), 9, 1, -9); 439 test(S("abcde"), 0, 1, S("abcdefghij"), 9, 2, -9); 440 test(S("abcde"), 0, 1, S("abcdefghij"), 10, 0, 1); 441 test(S("abcde"), 0, 1, S("abcdefghij"), 10, 1, 1); 442 test(S("abcde"), 0, 1, S("abcdefghij"), 11, 0, 0); 443 test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 0, 0, 1); 444 test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 0, 1, 0); 445 test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 0, 10, -9); 446 test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 0, 19, -18); 447 test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 0, 20, -19); 448 test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 0, 21, -19); 449 test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 1, 0, 1); 450 test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 1, 1, -1); 451 test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 1, 9, -1); 452 test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 1, 18, -1); 453 test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 1, 19, -1); 454 test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 1, 20, -1); 455 test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 10, 0, 1); 456 test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 10, 1, -10); 457 test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 10, 5, -10); 458 test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 10, 9, -10); 459 test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 10, 10, -10); 460 test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 10, 11, -10); 461 test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 19, 0, 1); 462 test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 19, 1, -19); 463 test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 19, 2, -19); 464 test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 20, 0, 1); 465 test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 20, 1, 1); 466 test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 21, 0, 0); 467 test(S("abcde"), 0, 2, S(""), 0, 0, 2); 468 test(S("abcde"), 0, 2, S(""), 0, 1, 2); 469 test(S("abcde"), 0, 2, S(""), 1, 0, 0); 470 test(S("abcde"), 0, 2, S("abcde"), 0, 0, 2); 471 test(S("abcde"), 0, 2, S("abcde"), 0, 1, 1); 472 test(S("abcde"), 0, 2, S("abcde"), 0, 2, 0); 473 test(S("abcde"), 0, 2, S("abcde"), 0, 4, -2); 474 test(S("abcde"), 0, 2, S("abcde"), 0, 5, -3); 475 test(S("abcde"), 0, 2, S("abcde"), 0, 6, -3); 476 test(S("abcde"), 0, 2, S("abcde"), 1, 0, 2); 477 test(S("abcde"), 0, 2, S("abcde"), 1, 1, -1); 478 test(S("abcde"), 0, 2, S("abcde"), 1, 2, -1); 479 test(S("abcde"), 0, 2, S("abcde"), 1, 3, -1); 480 test(S("abcde"), 0, 2, S("abcde"), 1, 4, -1); 481 test(S("abcde"), 0, 2, S("abcde"), 1, 5, -1); 482 test(S("abcde"), 0, 2, S("abcde"), 2, 0, 2); 483 test(S("abcde"), 0, 2, S("abcde"), 2, 1, -2); 484 test(S("abcde"), 0, 2, S("abcde"), 2, 2, -2); 485 test(S("abcde"), 0, 2, S("abcde"), 2, 3, -2); 486 test(S("abcde"), 0, 2, S("abcde"), 2, 4, -2); 487 test(S("abcde"), 0, 2, S("abcde"), 4, 0, 2); 488 test(S("abcde"), 0, 2, S("abcde"), 4, 1, -4); 489 test(S("abcde"), 0, 2, S("abcde"), 4, 2, -4); 490 test(S("abcde"), 0, 2, S("abcde"), 5, 0, 2); 491 test(S("abcde"), 0, 2, S("abcde"), 5, 1, 2); 492 test(S("abcde"), 0, 2, S("abcde"), 6, 0, 0); 493 test(S("abcde"), 0, 2, S("abcdefghij"), 0, 0, 2); 494 test(S("abcde"), 0, 2, S("abcdefghij"), 0, 1, 1); 495 test(S("abcde"), 0, 2, S("abcdefghij"), 0, 5, -3); 496 test(S("abcde"), 0, 2, S("abcdefghij"), 0, 9, -7); 497} 498 499template <class S> 500void test4() 501{ 502 test(S("abcde"), 0, 2, S("abcdefghij"), 0, 10, -8); 503 test(S("abcde"), 0, 2, S("abcdefghij"), 0, 11, -8); 504 test(S("abcde"), 0, 2, S("abcdefghij"), 1, 0, 2); 505 test(S("abcde"), 0, 2, S("abcdefghij"), 1, 1, -1); 506 test(S("abcde"), 0, 2, S("abcdefghij"), 1, 4, -1); 507 test(S("abcde"), 0, 2, S("abcdefghij"), 1, 8, -1); 508 test(S("abcde"), 0, 2, S("abcdefghij"), 1, 9, -1); 509 test(S("abcde"), 0, 2, S("abcdefghij"), 1, 10, -1); 510 test(S("abcde"), 0, 2, S("abcdefghij"), 5, 0, 2); 511 test(S("abcde"), 0, 2, S("abcdefghij"), 5, 1, -5); 512 test(S("abcde"), 0, 2, S("abcdefghij"), 5, 2, -5); 513 test(S("abcde"), 0, 2, S("abcdefghij"), 5, 4, -5); 514 test(S("abcde"), 0, 2, S("abcdefghij"), 5, 5, -5); 515 test(S("abcde"), 0, 2, S("abcdefghij"), 5, 6, -5); 516 test(S("abcde"), 0, 2, S("abcdefghij"), 9, 0, 2); 517 test(S("abcde"), 0, 2, S("abcdefghij"), 9, 1, -9); 518 test(S("abcde"), 0, 2, S("abcdefghij"), 9, 2, -9); 519 test(S("abcde"), 0, 2, S("abcdefghij"), 10, 0, 2); 520 test(S("abcde"), 0, 2, S("abcdefghij"), 10, 1, 2); 521 test(S("abcde"), 0, 2, S("abcdefghij"), 11, 0, 0); 522 test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 0, 0, 2); 523 test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 0, 1, 1); 524 test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 0, 10, -8); 525 test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 0, 19, -17); 526 test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 0, 20, -18); 527 test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 0, 21, -18); 528 test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 1, 0, 2); 529 test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 1, 1, -1); 530 test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 1, 9, -1); 531 test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 1, 18, -1); 532 test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 1, 19, -1); 533 test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 1, 20, -1); 534 test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 10, 0, 2); 535 test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 10, 1, -10); 536 test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 10, 5, -10); 537 test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 10, 9, -10); 538 test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 10, 10, -10); 539 test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 10, 11, -10); 540 test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 19, 0, 2); 541 test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 19, 1, -19); 542 test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 19, 2, -19); 543 test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 20, 0, 2); 544 test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 20, 1, 2); 545 test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 21, 0, 0); 546 test(S("abcde"), 0, 4, S(""), 0, 0, 4); 547 test(S("abcde"), 0, 4, S(""), 0, 1, 4); 548 test(S("abcde"), 0, 4, S(""), 1, 0, 0); 549 test(S("abcde"), 0, 4, S("abcde"), 0, 0, 4); 550 test(S("abcde"), 0, 4, S("abcde"), 0, 1, 3); 551 test(S("abcde"), 0, 4, S("abcde"), 0, 2, 2); 552 test(S("abcde"), 0, 4, S("abcde"), 0, 4, 0); 553 test(S("abcde"), 0, 4, S("abcde"), 0, 5, -1); 554 test(S("abcde"), 0, 4, S("abcde"), 0, 6, -1); 555 test(S("abcde"), 0, 4, S("abcde"), 1, 0, 4); 556 test(S("abcde"), 0, 4, S("abcde"), 1, 1, -1); 557 test(S("abcde"), 0, 4, S("abcde"), 1, 2, -1); 558 test(S("abcde"), 0, 4, S("abcde"), 1, 3, -1); 559 test(S("abcde"), 0, 4, S("abcde"), 1, 4, -1); 560 test(S("abcde"), 0, 4, S("abcde"), 1, 5, -1); 561 test(S("abcde"), 0, 4, S("abcde"), 2, 0, 4); 562 test(S("abcde"), 0, 4, S("abcde"), 2, 1, -2); 563 test(S("abcde"), 0, 4, S("abcde"), 2, 2, -2); 564 test(S("abcde"), 0, 4, S("abcde"), 2, 3, -2); 565 test(S("abcde"), 0, 4, S("abcde"), 2, 4, -2); 566 test(S("abcde"), 0, 4, S("abcde"), 4, 0, 4); 567 test(S("abcde"), 0, 4, S("abcde"), 4, 1, -4); 568 test(S("abcde"), 0, 4, S("abcde"), 4, 2, -4); 569 test(S("abcde"), 0, 4, S("abcde"), 5, 0, 4); 570 test(S("abcde"), 0, 4, S("abcde"), 5, 1, 4); 571 test(S("abcde"), 0, 4, S("abcde"), 6, 0, 0); 572 test(S("abcde"), 0, 4, S("abcdefghij"), 0, 0, 4); 573 test(S("abcde"), 0, 4, S("abcdefghij"), 0, 1, 3); 574 test(S("abcde"), 0, 4, S("abcdefghij"), 0, 5, -1); 575 test(S("abcde"), 0, 4, S("abcdefghij"), 0, 9, -5); 576 test(S("abcde"), 0, 4, S("abcdefghij"), 0, 10, -6); 577 test(S("abcde"), 0, 4, S("abcdefghij"), 0, 11, -6); 578 test(S("abcde"), 0, 4, S("abcdefghij"), 1, 0, 4); 579 test(S("abcde"), 0, 4, S("abcdefghij"), 1, 1, -1); 580 test(S("abcde"), 0, 4, S("abcdefghij"), 1, 4, -1); 581 test(S("abcde"), 0, 4, S("abcdefghij"), 1, 8, -1); 582 test(S("abcde"), 0, 4, S("abcdefghij"), 1, 9, -1); 583 test(S("abcde"), 0, 4, S("abcdefghij"), 1, 10, -1); 584 test(S("abcde"), 0, 4, S("abcdefghij"), 5, 0, 4); 585 test(S("abcde"), 0, 4, S("abcdefghij"), 5, 1, -5); 586 test(S("abcde"), 0, 4, S("abcdefghij"), 5, 2, -5); 587 test(S("abcde"), 0, 4, S("abcdefghij"), 5, 4, -5); 588 test(S("abcde"), 0, 4, S("abcdefghij"), 5, 5, -5); 589 test(S("abcde"), 0, 4, S("abcdefghij"), 5, 6, -5); 590 test(S("abcde"), 0, 4, S("abcdefghij"), 9, 0, 4); 591 test(S("abcde"), 0, 4, S("abcdefghij"), 9, 1, -9); 592 test(S("abcde"), 0, 4, S("abcdefghij"), 9, 2, -9); 593 test(S("abcde"), 0, 4, S("abcdefghij"), 10, 0, 4); 594 test(S("abcde"), 0, 4, S("abcdefghij"), 10, 1, 4); 595 test(S("abcde"), 0, 4, S("abcdefghij"), 11, 0, 0); 596 test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 0, 0, 4); 597 test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 0, 1, 3); 598 test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 0, 10, -6); 599 test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 0, 19, -15); 600 test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 0, 20, -16); 601 test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 0, 21, -16); 602} 603 604template <class S> 605void test5() 606{ 607 test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 1, 0, 4); 608 test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 1, 1, -1); 609 test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 1, 9, -1); 610 test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 1, 18, -1); 611 test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 1, 19, -1); 612 test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 1, 20, -1); 613 test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 10, 0, 4); 614 test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 10, 1, -10); 615 test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 10, 5, -10); 616 test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 10, 9, -10); 617 test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 10, 10, -10); 618 test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 10, 11, -10); 619 test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 19, 0, 4); 620 test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 19, 1, -19); 621 test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 19, 2, -19); 622 test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 20, 0, 4); 623 test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 20, 1, 4); 624 test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 21, 0, 0); 625 test(S("abcde"), 0, 5, S(""), 0, 0, 5); 626 test(S("abcde"), 0, 5, S(""), 0, 1, 5); 627 test(S("abcde"), 0, 5, S(""), 1, 0, 0); 628 test(S("abcde"), 0, 5, S("abcde"), 0, 0, 5); 629 test(S("abcde"), 0, 5, S("abcde"), 0, 1, 4); 630 test(S("abcde"), 0, 5, S("abcde"), 0, 2, 3); 631 test(S("abcde"), 0, 5, S("abcde"), 0, 4, 1); 632 test(S("abcde"), 0, 5, S("abcde"), 0, 5, 0); 633 test(S("abcde"), 0, 5, S("abcde"), 0, 6, 0); 634 test(S("abcde"), 0, 5, S("abcde"), 1, 0, 5); 635 test(S("abcde"), 0, 5, S("abcde"), 1, 1, -1); 636 test(S("abcde"), 0, 5, S("abcde"), 1, 2, -1); 637 test(S("abcde"), 0, 5, S("abcde"), 1, 3, -1); 638 test(S("abcde"), 0, 5, S("abcde"), 1, 4, -1); 639 test(S("abcde"), 0, 5, S("abcde"), 1, 5, -1); 640 test(S("abcde"), 0, 5, S("abcde"), 2, 0, 5); 641 test(S("abcde"), 0, 5, S("abcde"), 2, 1, -2); 642 test(S("abcde"), 0, 5, S("abcde"), 2, 2, -2); 643 test(S("abcde"), 0, 5, S("abcde"), 2, 3, -2); 644 test(S("abcde"), 0, 5, S("abcde"), 2, 4, -2); 645 test(S("abcde"), 0, 5, S("abcde"), 4, 0, 5); 646 test(S("abcde"), 0, 5, S("abcde"), 4, 1, -4); 647 test(S("abcde"), 0, 5, S("abcde"), 4, 2, -4); 648 test(S("abcde"), 0, 5, S("abcde"), 5, 0, 5); 649 test(S("abcde"), 0, 5, S("abcde"), 5, 1, 5); 650 test(S("abcde"), 0, 5, S("abcde"), 6, 0, 0); 651 test(S("abcde"), 0, 5, S("abcdefghij"), 0, 0, 5); 652 test(S("abcde"), 0, 5, S("abcdefghij"), 0, 1, 4); 653 test(S("abcde"), 0, 5, S("abcdefghij"), 0, 5, 0); 654 test(S("abcde"), 0, 5, S("abcdefghij"), 0, 9, -4); 655 test(S("abcde"), 0, 5, S("abcdefghij"), 0, 10, -5); 656 test(S("abcde"), 0, 5, S("abcdefghij"), 0, 11, -5); 657 test(S("abcde"), 0, 5, S("abcdefghij"), 1, 0, 5); 658 test(S("abcde"), 0, 5, S("abcdefghij"), 1, 1, -1); 659 test(S("abcde"), 0, 5, S("abcdefghij"), 1, 4, -1); 660 test(S("abcde"), 0, 5, S("abcdefghij"), 1, 8, -1); 661 test(S("abcde"), 0, 5, S("abcdefghij"), 1, 9, -1); 662 test(S("abcde"), 0, 5, S("abcdefghij"), 1, 10, -1); 663 test(S("abcde"), 0, 5, S("abcdefghij"), 5, 0, 5); 664 test(S("abcde"), 0, 5, S("abcdefghij"), 5, 1, -5); 665 test(S("abcde"), 0, 5, S("abcdefghij"), 5, 2, -5); 666 test(S("abcde"), 0, 5, S("abcdefghij"), 5, 4, -5); 667 test(S("abcde"), 0, 5, S("abcdefghij"), 5, 5, -5); 668 test(S("abcde"), 0, 5, S("abcdefghij"), 5, 6, -5); 669 test(S("abcde"), 0, 5, S("abcdefghij"), 9, 0, 5); 670 test(S("abcde"), 0, 5, S("abcdefghij"), 9, 1, -9); 671 test(S("abcde"), 0, 5, S("abcdefghij"), 9, 2, -9); 672 test(S("abcde"), 0, 5, S("abcdefghij"), 10, 0, 5); 673 test(S("abcde"), 0, 5, S("abcdefghij"), 10, 1, 5); 674 test(S("abcde"), 0, 5, S("abcdefghij"), 11, 0, 0); 675 test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 0, 0, 5); 676 test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 0, 1, 4); 677 test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 0, 10, -5); 678 test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 0, 19, -14); 679 test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 0, 20, -15); 680 test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 0, 21, -15); 681 test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 1, 0, 5); 682 test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 1, 1, -1); 683 test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 1, 9, -1); 684 test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 1, 18, -1); 685 test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 1, 19, -1); 686 test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 1, 20, -1); 687 test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 10, 0, 5); 688 test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 10, 1, -10); 689 test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 10, 5, -10); 690 test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 10, 9, -10); 691 test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 10, 10, -10); 692 test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 10, 11, -10); 693 test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 19, 0, 5); 694 test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 19, 1, -19); 695 test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 19, 2, -19); 696 test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 20, 0, 5); 697 test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 20, 1, 5); 698 test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 21, 0, 0); 699 test(S("abcde"), 0, 6, S(""), 0, 0, 5); 700 test(S("abcde"), 0, 6, S(""), 0, 1, 5); 701 test(S("abcde"), 0, 6, S(""), 1, 0, 0); 702 test(S("abcde"), 0, 6, S("abcde"), 0, 0, 5); 703 test(S("abcde"), 0, 6, S("abcde"), 0, 1, 4); 704 test(S("abcde"), 0, 6, S("abcde"), 0, 2, 3); 705 test(S("abcde"), 0, 6, S("abcde"), 0, 4, 1); 706 test(S("abcde"), 0, 6, S("abcde"), 0, 5, 0); 707} 708 709template <class S> 710void test6() 711{ 712 test(S("abcde"), 0, 6, S("abcde"), 0, 6, 0); 713 test(S("abcde"), 0, 6, S("abcde"), 1, 0, 5); 714 test(S("abcde"), 0, 6, S("abcde"), 1, 1, -1); 715 test(S("abcde"), 0, 6, S("abcde"), 1, 2, -1); 716 test(S("abcde"), 0, 6, S("abcde"), 1, 3, -1); 717 test(S("abcde"), 0, 6, S("abcde"), 1, 4, -1); 718 test(S("abcde"), 0, 6, S("abcde"), 1, 5, -1); 719 test(S("abcde"), 0, 6, S("abcde"), 2, 0, 5); 720 test(S("abcde"), 0, 6, S("abcde"), 2, 1, -2); 721 test(S("abcde"), 0, 6, S("abcde"), 2, 2, -2); 722 test(S("abcde"), 0, 6, S("abcde"), 2, 3, -2); 723 test(S("abcde"), 0, 6, S("abcde"), 2, 4, -2); 724 test(S("abcde"), 0, 6, S("abcde"), 4, 0, 5); 725 test(S("abcde"), 0, 6, S("abcde"), 4, 1, -4); 726 test(S("abcde"), 0, 6, S("abcde"), 4, 2, -4); 727 test(S("abcde"), 0, 6, S("abcde"), 5, 0, 5); 728 test(S("abcde"), 0, 6, S("abcde"), 5, 1, 5); 729 test(S("abcde"), 0, 6, S("abcde"), 6, 0, 0); 730 test(S("abcde"), 0, 6, S("abcdefghij"), 0, 0, 5); 731 test(S("abcde"), 0, 6, S("abcdefghij"), 0, 1, 4); 732 test(S("abcde"), 0, 6, S("abcdefghij"), 0, 5, 0); 733 test(S("abcde"), 0, 6, S("abcdefghij"), 0, 9, -4); 734 test(S("abcde"), 0, 6, S("abcdefghij"), 0, 10, -5); 735 test(S("abcde"), 0, 6, S("abcdefghij"), 0, 11, -5); 736 test(S("abcde"), 0, 6, S("abcdefghij"), 1, 0, 5); 737 test(S("abcde"), 0, 6, S("abcdefghij"), 1, 1, -1); 738 test(S("abcde"), 0, 6, S("abcdefghij"), 1, 4, -1); 739 test(S("abcde"), 0, 6, S("abcdefghij"), 1, 8, -1); 740 test(S("abcde"), 0, 6, S("abcdefghij"), 1, 9, -1); 741 test(S("abcde"), 0, 6, S("abcdefghij"), 1, 10, -1); 742 test(S("abcde"), 0, 6, S("abcdefghij"), 5, 0, 5); 743 test(S("abcde"), 0, 6, S("abcdefghij"), 5, 1, -5); 744 test(S("abcde"), 0, 6, S("abcdefghij"), 5, 2, -5); 745 test(S("abcde"), 0, 6, S("abcdefghij"), 5, 4, -5); 746 test(S("abcde"), 0, 6, S("abcdefghij"), 5, 5, -5); 747 test(S("abcde"), 0, 6, S("abcdefghij"), 5, 6, -5); 748 test(S("abcde"), 0, 6, S("abcdefghij"), 9, 0, 5); 749 test(S("abcde"), 0, 6, S("abcdefghij"), 9, 1, -9); 750 test(S("abcde"), 0, 6, S("abcdefghij"), 9, 2, -9); 751 test(S("abcde"), 0, 6, S("abcdefghij"), 10, 0, 5); 752 test(S("abcde"), 0, 6, S("abcdefghij"), 10, 1, 5); 753 test(S("abcde"), 0, 6, S("abcdefghij"), 11, 0, 0); 754 test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 0, 0, 5); 755 test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 0, 1, 4); 756 test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 0, 10, -5); 757 test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 0, 19, -14); 758 test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 0, 20, -15); 759 test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 0, 21, -15); 760 test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 1, 0, 5); 761 test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 1, 1, -1); 762 test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 1, 9, -1); 763 test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 1, 18, -1); 764 test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 1, 19, -1); 765 test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 1, 20, -1); 766 test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 10, 0, 5); 767 test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 10, 1, -10); 768 test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 10, 5, -10); 769 test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 10, 9, -10); 770 test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 10, 10, -10); 771 test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 10, 11, -10); 772 test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 19, 0, 5); 773 test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 19, 1, -19); 774 test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 19, 2, -19); 775 test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 20, 0, 5); 776 test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 20, 1, 5); 777 test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 21, 0, 0); 778 test(S("abcde"), 1, 0, S(""), 0, 0, 0); 779 test(S("abcde"), 1, 0, S(""), 0, 1, 0); 780 test(S("abcde"), 1, 0, S(""), 1, 0, 0); 781 test(S("abcde"), 1, 0, S("abcde"), 0, 0, 0); 782 test(S("abcde"), 1, 0, S("abcde"), 0, 1, -1); 783 test(S("abcde"), 1, 0, S("abcde"), 0, 2, -2); 784 test(S("abcde"), 1, 0, S("abcde"), 0, 4, -4); 785 test(S("abcde"), 1, 0, S("abcde"), 0, 5, -5); 786 test(S("abcde"), 1, 0, S("abcde"), 0, 6, -5); 787 test(S("abcde"), 1, 0, S("abcde"), 1, 0, 0); 788 test(S("abcde"), 1, 0, S("abcde"), 1, 1, -1); 789 test(S("abcde"), 1, 0, S("abcde"), 1, 2, -2); 790 test(S("abcde"), 1, 0, S("abcde"), 1, 3, -3); 791 test(S("abcde"), 1, 0, S("abcde"), 1, 4, -4); 792 test(S("abcde"), 1, 0, S("abcde"), 1, 5, -4); 793 test(S("abcde"), 1, 0, S("abcde"), 2, 0, 0); 794 test(S("abcde"), 1, 0, S("abcde"), 2, 1, -1); 795 test(S("abcde"), 1, 0, S("abcde"), 2, 2, -2); 796 test(S("abcde"), 1, 0, S("abcde"), 2, 3, -3); 797 test(S("abcde"), 1, 0, S("abcde"), 2, 4, -3); 798 test(S("abcde"), 1, 0, S("abcde"), 4, 0, 0); 799 test(S("abcde"), 1, 0, S("abcde"), 4, 1, -1); 800 test(S("abcde"), 1, 0, S("abcde"), 4, 2, -1); 801 test(S("abcde"), 1, 0, S("abcde"), 5, 0, 0); 802 test(S("abcde"), 1, 0, S("abcde"), 5, 1, 0); 803 test(S("abcde"), 1, 0, S("abcde"), 6, 0, 0); 804 test(S("abcde"), 1, 0, S("abcdefghij"), 0, 0, 0); 805 test(S("abcde"), 1, 0, S("abcdefghij"), 0, 1, -1); 806 test(S("abcde"), 1, 0, S("abcdefghij"), 0, 5, -5); 807 test(S("abcde"), 1, 0, S("abcdefghij"), 0, 9, -9); 808 test(S("abcde"), 1, 0, S("abcdefghij"), 0, 10, -10); 809 test(S("abcde"), 1, 0, S("abcdefghij"), 0, 11, -10); 810 test(S("abcde"), 1, 0, S("abcdefghij"), 1, 0, 0); 811 test(S("abcde"), 1, 0, S("abcdefghij"), 1, 1, -1); 812} 813 814template <class S> 815void test7() 816{ 817 test(S("abcde"), 1, 0, S("abcdefghij"), 1, 4, -4); 818 test(S("abcde"), 1, 0, S("abcdefghij"), 1, 8, -8); 819 test(S("abcde"), 1, 0, S("abcdefghij"), 1, 9, -9); 820 test(S("abcde"), 1, 0, S("abcdefghij"), 1, 10, -9); 821 test(S("abcde"), 1, 0, S("abcdefghij"), 5, 0, 0); 822 test(S("abcde"), 1, 0, S("abcdefghij"), 5, 1, -1); 823 test(S("abcde"), 1, 0, S("abcdefghij"), 5, 2, -2); 824 test(S("abcde"), 1, 0, S("abcdefghij"), 5, 4, -4); 825 test(S("abcde"), 1, 0, S("abcdefghij"), 5, 5, -5); 826 test(S("abcde"), 1, 0, S("abcdefghij"), 5, 6, -5); 827 test(S("abcde"), 1, 0, S("abcdefghij"), 9, 0, 0); 828 test(S("abcde"), 1, 0, S("abcdefghij"), 9, 1, -1); 829 test(S("abcde"), 1, 0, S("abcdefghij"), 9, 2, -1); 830 test(S("abcde"), 1, 0, S("abcdefghij"), 10, 0, 0); 831 test(S("abcde"), 1, 0, S("abcdefghij"), 10, 1, 0); 832 test(S("abcde"), 1, 0, S("abcdefghij"), 11, 0, 0); 833 test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 0, 0, 0); 834 test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 0, 1, -1); 835 test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 0, 10, -10); 836 test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 0, 19, -19); 837 test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 0, 20, -20); 838 test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 0, 21, -20); 839 test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 1, 0, 0); 840 test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 1, 1, -1); 841 test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 1, 9, -9); 842 test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 1, 18, -18); 843 test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 1, 19, -19); 844 test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 1, 20, -19); 845 test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 10, 0, 0); 846 test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 10, 1, -1); 847 test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 10, 5, -5); 848 test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 10, 9, -9); 849 test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 10, 10, -10); 850 test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 10, 11, -10); 851 test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 19, 0, 0); 852 test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 19, 1, -1); 853 test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 19, 2, -1); 854 test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 20, 0, 0); 855 test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 20, 1, 0); 856 test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 21, 0, 0); 857 test(S("abcde"), 1, 1, S(""), 0, 0, 1); 858 test(S("abcde"), 1, 1, S(""), 0, 1, 1); 859 test(S("abcde"), 1, 1, S(""), 1, 0, 0); 860 test(S("abcde"), 1, 1, S("abcde"), 0, 0, 1); 861 test(S("abcde"), 1, 1, S("abcde"), 0, 1, 1); 862 test(S("abcde"), 1, 1, S("abcde"), 0, 2, 1); 863 test(S("abcde"), 1, 1, S("abcde"), 0, 4, 1); 864 test(S("abcde"), 1, 1, S("abcde"), 0, 5, 1); 865 test(S("abcde"), 1, 1, S("abcde"), 0, 6, 1); 866 test(S("abcde"), 1, 1, S("abcde"), 1, 0, 1); 867 test(S("abcde"), 1, 1, S("abcde"), 1, 1, 0); 868 test(S("abcde"), 1, 1, S("abcde"), 1, 2, -1); 869 test(S("abcde"), 1, 1, S("abcde"), 1, 3, -2); 870 test(S("abcde"), 1, 1, S("abcde"), 1, 4, -3); 871 test(S("abcde"), 1, 1, S("abcde"), 1, 5, -3); 872 test(S("abcde"), 1, 1, S("abcde"), 2, 0, 1); 873 test(S("abcde"), 1, 1, S("abcde"), 2, 1, -1); 874 test(S("abcde"), 1, 1, S("abcde"), 2, 2, -1); 875 test(S("abcde"), 1, 1, S("abcde"), 2, 3, -1); 876 test(S("abcde"), 1, 1, S("abcde"), 2, 4, -1); 877 test(S("abcde"), 1, 1, S("abcde"), 4, 0, 1); 878 test(S("abcde"), 1, 1, S("abcde"), 4, 1, -3); 879 test(S("abcde"), 1, 1, S("abcde"), 4, 2, -3); 880 test(S("abcde"), 1, 1, S("abcde"), 5, 0, 1); 881 test(S("abcde"), 1, 1, S("abcde"), 5, 1, 1); 882 test(S("abcde"), 1, 1, S("abcde"), 6, 0, 0); 883 test(S("abcde"), 1, 1, S("abcdefghij"), 0, 0, 1); 884 test(S("abcde"), 1, 1, S("abcdefghij"), 0, 1, 1); 885 test(S("abcde"), 1, 1, S("abcdefghij"), 0, 5, 1); 886 test(S("abcde"), 1, 1, S("abcdefghij"), 0, 9, 1); 887 test(S("abcde"), 1, 1, S("abcdefghij"), 0, 10, 1); 888 test(S("abcde"), 1, 1, S("abcdefghij"), 0, 11, 1); 889 test(S("abcde"), 1, 1, S("abcdefghij"), 1, 0, 1); 890 test(S("abcde"), 1, 1, S("abcdefghij"), 1, 1, 0); 891 test(S("abcde"), 1, 1, S("abcdefghij"), 1, 4, -3); 892 test(S("abcde"), 1, 1, S("abcdefghij"), 1, 8, -7); 893 test(S("abcde"), 1, 1, S("abcdefghij"), 1, 9, -8); 894 test(S("abcde"), 1, 1, S("abcdefghij"), 1, 10, -8); 895 test(S("abcde"), 1, 1, S("abcdefghij"), 5, 0, 1); 896 test(S("abcde"), 1, 1, S("abcdefghij"), 5, 1, -4); 897 test(S("abcde"), 1, 1, S("abcdefghij"), 5, 2, -4); 898 test(S("abcde"), 1, 1, S("abcdefghij"), 5, 4, -4); 899 test(S("abcde"), 1, 1, S("abcdefghij"), 5, 5, -4); 900 test(S("abcde"), 1, 1, S("abcdefghij"), 5, 6, -4); 901 test(S("abcde"), 1, 1, S("abcdefghij"), 9, 0, 1); 902 test(S("abcde"), 1, 1, S("abcdefghij"), 9, 1, -8); 903 test(S("abcde"), 1, 1, S("abcdefghij"), 9, 2, -8); 904 test(S("abcde"), 1, 1, S("abcdefghij"), 10, 0, 1); 905 test(S("abcde"), 1, 1, S("abcdefghij"), 10, 1, 1); 906 test(S("abcde"), 1, 1, S("abcdefghij"), 11, 0, 0); 907 test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 0, 0, 1); 908 test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 0, 1, 1); 909 test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 0, 10, 1); 910 test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 0, 19, 1); 911 test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 0, 20, 1); 912 test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 0, 21, 1); 913 test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 1, 0, 1); 914 test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 1, 1, 0); 915 test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 1, 9, -8); 916 test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 1, 18, -17); 917} 918 919template <class S> 920void test8() 921{ 922 test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 1, 19, -18); 923 test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 1, 20, -18); 924 test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 10, 0, 1); 925 test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 10, 1, -9); 926 test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 10, 5, -9); 927 test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 10, 9, -9); 928 test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 10, 10, -9); 929 test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 10, 11, -9); 930 test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 19, 0, 1); 931 test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 19, 1, -18); 932 test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 19, 2, -18); 933 test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 20, 0, 1); 934 test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 20, 1, 1); 935 test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 21, 0, 0); 936 test(S("abcde"), 1, 2, S(""), 0, 0, 2); 937 test(S("abcde"), 1, 2, S(""), 0, 1, 2); 938 test(S("abcde"), 1, 2, S(""), 1, 0, 0); 939 test(S("abcde"), 1, 2, S("abcde"), 0, 0, 2); 940 test(S("abcde"), 1, 2, S("abcde"), 0, 1, 1); 941 test(S("abcde"), 1, 2, S("abcde"), 0, 2, 1); 942 test(S("abcde"), 1, 2, S("abcde"), 0, 4, 1); 943 test(S("abcde"), 1, 2, S("abcde"), 0, 5, 1); 944 test(S("abcde"), 1, 2, S("abcde"), 0, 6, 1); 945 test(S("abcde"), 1, 2, S("abcde"), 1, 0, 2); 946 test(S("abcde"), 1, 2, S("abcde"), 1, 1, 1); 947 test(S("abcde"), 1, 2, S("abcde"), 1, 2, 0); 948 test(S("abcde"), 1, 2, S("abcde"), 1, 3, -1); 949 test(S("abcde"), 1, 2, S("abcde"), 1, 4, -2); 950 test(S("abcde"), 1, 2, S("abcde"), 1, 5, -2); 951 test(S("abcde"), 1, 2, S("abcde"), 2, 0, 2); 952 test(S("abcde"), 1, 2, S("abcde"), 2, 1, -1); 953 test(S("abcde"), 1, 2, S("abcde"), 2, 2, -1); 954 test(S("abcde"), 1, 2, S("abcde"), 2, 3, -1); 955 test(S("abcde"), 1, 2, S("abcde"), 2, 4, -1); 956 test(S("abcde"), 1, 2, S("abcde"), 4, 0, 2); 957 test(S("abcde"), 1, 2, S("abcde"), 4, 1, -3); 958 test(S("abcde"), 1, 2, S("abcde"), 4, 2, -3); 959 test(S("abcde"), 1, 2, S("abcde"), 5, 0, 2); 960 test(S("abcde"), 1, 2, S("abcde"), 5, 1, 2); 961 test(S("abcde"), 1, 2, S("abcde"), 6, 0, 0); 962 test(S("abcde"), 1, 2, S("abcdefghij"), 0, 0, 2); 963 test(S("abcde"), 1, 2, S("abcdefghij"), 0, 1, 1); 964 test(S("abcde"), 1, 2, S("abcdefghij"), 0, 5, 1); 965 test(S("abcde"), 1, 2, S("abcdefghij"), 0, 9, 1); 966 test(S("abcde"), 1, 2, S("abcdefghij"), 0, 10, 1); 967 test(S("abcde"), 1, 2, S("abcdefghij"), 0, 11, 1); 968 test(S("abcde"), 1, 2, S("abcdefghij"), 1, 0, 2); 969 test(S("abcde"), 1, 2, S("abcdefghij"), 1, 1, 1); 970 test(S("abcde"), 1, 2, S("abcdefghij"), 1, 4, -2); 971 test(S("abcde"), 1, 2, S("abcdefghij"), 1, 8, -6); 972 test(S("abcde"), 1, 2, S("abcdefghij"), 1, 9, -7); 973 test(S("abcde"), 1, 2, S("abcdefghij"), 1, 10, -7); 974 test(S("abcde"), 1, 2, S("abcdefghij"), 5, 0, 2); 975 test(S("abcde"), 1, 2, S("abcdefghij"), 5, 1, -4); 976 test(S("abcde"), 1, 2, S("abcdefghij"), 5, 2, -4); 977 test(S("abcde"), 1, 2, S("abcdefghij"), 5, 4, -4); 978 test(S("abcde"), 1, 2, S("abcdefghij"), 5, 5, -4); 979 test(S("abcde"), 1, 2, S("abcdefghij"), 5, 6, -4); 980 test(S("abcde"), 1, 2, S("abcdefghij"), 9, 0, 2); 981 test(S("abcde"), 1, 2, S("abcdefghij"), 9, 1, -8); 982 test(S("abcde"), 1, 2, S("abcdefghij"), 9, 2, -8); 983 test(S("abcde"), 1, 2, S("abcdefghij"), 10, 0, 2); 984 test(S("abcde"), 1, 2, S("abcdefghij"), 10, 1, 2); 985 test(S("abcde"), 1, 2, S("abcdefghij"), 11, 0, 0); 986 test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 0, 0, 2); 987 test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 0, 1, 1); 988 test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 0, 10, 1); 989 test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 0, 19, 1); 990 test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 0, 20, 1); 991 test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 0, 21, 1); 992 test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 1, 0, 2); 993 test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 1, 1, 1); 994 test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 1, 9, -7); 995 test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 1, 18, -16); 996 test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 1, 19, -17); 997 test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 1, 20, -17); 998 test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 10, 0, 2); 999 test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 10, 1, -9); 1000 test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 10, 5, -9); 1001 test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 10, 9, -9); 1002 test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 10, 10, -9); 1003 test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 10, 11, -9); 1004 test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 19, 0, 2); 1005 test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 19, 1, -18); 1006 test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 19, 2, -18); 1007 test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 20, 0, 2); 1008 test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 20, 1, 2); 1009 test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 21, 0, 0); 1010 test(S("abcde"), 1, 3, S(""), 0, 0, 3); 1011 test(S("abcde"), 1, 3, S(""), 0, 1, 3); 1012 test(S("abcde"), 1, 3, S(""), 1, 0, 0); 1013 test(S("abcde"), 1, 3, S("abcde"), 0, 0, 3); 1014 test(S("abcde"), 1, 3, S("abcde"), 0, 1, 1); 1015 test(S("abcde"), 1, 3, S("abcde"), 0, 2, 1); 1016 test(S("abcde"), 1, 3, S("abcde"), 0, 4, 1); 1017 test(S("abcde"), 1, 3, S("abcde"), 0, 5, 1); 1018 test(S("abcde"), 1, 3, S("abcde"), 0, 6, 1); 1019 test(S("abcde"), 1, 3, S("abcde"), 1, 0, 3); 1020 test(S("abcde"), 1, 3, S("abcde"), 1, 1, 2); 1021 test(S("abcde"), 1, 3, S("abcde"), 1, 2, 1); 1022} 1023 1024template <class S> 1025void test9() 1026{ 1027 test(S("abcde"), 1, 3, S("abcde"), 1, 3, 0); 1028 test(S("abcde"), 1, 3, S("abcde"), 1, 4, -1); 1029 test(S("abcde"), 1, 3, S("abcde"), 1, 5, -1); 1030 test(S("abcde"), 1, 3, S("abcde"), 2, 0, 3); 1031 test(S("abcde"), 1, 3, S("abcde"), 2, 1, -1); 1032 test(S("abcde"), 1, 3, S("abcde"), 2, 2, -1); 1033 test(S("abcde"), 1, 3, S("abcde"), 2, 3, -1); 1034 test(S("abcde"), 1, 3, S("abcde"), 2, 4, -1); 1035 test(S("abcde"), 1, 3, S("abcde"), 4, 0, 3); 1036 test(S("abcde"), 1, 3, S("abcde"), 4, 1, -3); 1037 test(S("abcde"), 1, 3, S("abcde"), 4, 2, -3); 1038 test(S("abcde"), 1, 3, S("abcde"), 5, 0, 3); 1039 test(S("abcde"), 1, 3, S("abcde"), 5, 1, 3); 1040 test(S("abcde"), 1, 3, S("abcde"), 6, 0, 0); 1041 test(S("abcde"), 1, 3, S("abcdefghij"), 0, 0, 3); 1042 test(S("abcde"), 1, 3, S("abcdefghij"), 0, 1, 1); 1043 test(S("abcde"), 1, 3, S("abcdefghij"), 0, 5, 1); 1044 test(S("abcde"), 1, 3, S("abcdefghij"), 0, 9, 1); 1045 test(S("abcde"), 1, 3, S("abcdefghij"), 0, 10, 1); 1046 test(S("abcde"), 1, 3, S("abcdefghij"), 0, 11, 1); 1047 test(S("abcde"), 1, 3, S("abcdefghij"), 1, 0, 3); 1048 test(S("abcde"), 1, 3, S("abcdefghij"), 1, 1, 2); 1049 test(S("abcde"), 1, 3, S("abcdefghij"), 1, 4, -1); 1050 test(S("abcde"), 1, 3, S("abcdefghij"), 1, 8, -5); 1051 test(S("abcde"), 1, 3, S("abcdefghij"), 1, 9, -6); 1052 test(S("abcde"), 1, 3, S("abcdefghij"), 1, 10, -6); 1053 test(S("abcde"), 1, 3, S("abcdefghij"), 5, 0, 3); 1054 test(S("abcde"), 1, 3, S("abcdefghij"), 5, 1, -4); 1055 test(S("abcde"), 1, 3, S("abcdefghij"), 5, 2, -4); 1056 test(S("abcde"), 1, 3, S("abcdefghij"), 5, 4, -4); 1057 test(S("abcde"), 1, 3, S("abcdefghij"), 5, 5, -4); 1058 test(S("abcde"), 1, 3, S("abcdefghij"), 5, 6, -4); 1059 test(S("abcde"), 1, 3, S("abcdefghij"), 9, 0, 3); 1060 test(S("abcde"), 1, 3, S("abcdefghij"), 9, 1, -8); 1061 test(S("abcde"), 1, 3, S("abcdefghij"), 9, 2, -8); 1062 test(S("abcde"), 1, 3, S("abcdefghij"), 10, 0, 3); 1063 test(S("abcde"), 1, 3, S("abcdefghij"), 10, 1, 3); 1064 test(S("abcde"), 1, 3, S("abcdefghij"), 11, 0, 0); 1065 test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 0, 0, 3); 1066 test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 0, 1, 1); 1067 test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 0, 10, 1); 1068 test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 0, 19, 1); 1069 test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 0, 20, 1); 1070 test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 0, 21, 1); 1071 test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 1, 0, 3); 1072 test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 1, 1, 2); 1073 test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 1, 9, -6); 1074 test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 1, 18, -15); 1075 test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 1, 19, -16); 1076 test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 1, 20, -16); 1077 test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 10, 0, 3); 1078 test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 10, 1, -9); 1079 test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 10, 5, -9); 1080 test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 10, 9, -9); 1081 test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 10, 10, -9); 1082 test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 10, 11, -9); 1083 test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 19, 0, 3); 1084 test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 19, 1, -18); 1085 test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 19, 2, -18); 1086 test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 20, 0, 3); 1087 test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 20, 1, 3); 1088 test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 21, 0, 0); 1089 test(S("abcde"), 1, 4, S(""), 0, 0, 4); 1090 test(S("abcde"), 1, 4, S(""), 0, 1, 4); 1091 test(S("abcde"), 1, 4, S(""), 1, 0, 0); 1092 test(S("abcde"), 1, 4, S("abcde"), 0, 0, 4); 1093 test(S("abcde"), 1, 4, S("abcde"), 0, 1, 1); 1094 test(S("abcde"), 1, 4, S("abcde"), 0, 2, 1); 1095 test(S("abcde"), 1, 4, S("abcde"), 0, 4, 1); 1096 test(S("abcde"), 1, 4, S("abcde"), 0, 5, 1); 1097 test(S("abcde"), 1, 4, S("abcde"), 0, 6, 1); 1098 test(S("abcde"), 1, 4, S("abcde"), 1, 0, 4); 1099 test(S("abcde"), 1, 4, S("abcde"), 1, 1, 3); 1100 test(S("abcde"), 1, 4, S("abcde"), 1, 2, 2); 1101 test(S("abcde"), 1, 4, S("abcde"), 1, 3, 1); 1102 test(S("abcde"), 1, 4, S("abcde"), 1, 4, 0); 1103 test(S("abcde"), 1, 4, S("abcde"), 1, 5, 0); 1104 test(S("abcde"), 1, 4, S("abcde"), 2, 0, 4); 1105 test(S("abcde"), 1, 4, S("abcde"), 2, 1, -1); 1106 test(S("abcde"), 1, 4, S("abcde"), 2, 2, -1); 1107 test(S("abcde"), 1, 4, S("abcde"), 2, 3, -1); 1108 test(S("abcde"), 1, 4, S("abcde"), 2, 4, -1); 1109 test(S("abcde"), 1, 4, S("abcde"), 4, 0, 4); 1110 test(S("abcde"), 1, 4, S("abcde"), 4, 1, -3); 1111 test(S("abcde"), 1, 4, S("abcde"), 4, 2, -3); 1112 test(S("abcde"), 1, 4, S("abcde"), 5, 0, 4); 1113 test(S("abcde"), 1, 4, S("abcde"), 5, 1, 4); 1114 test(S("abcde"), 1, 4, S("abcde"), 6, 0, 0); 1115 test(S("abcde"), 1, 4, S("abcdefghij"), 0, 0, 4); 1116 test(S("abcde"), 1, 4, S("abcdefghij"), 0, 1, 1); 1117 test(S("abcde"), 1, 4, S("abcdefghij"), 0, 5, 1); 1118 test(S("abcde"), 1, 4, S("abcdefghij"), 0, 9, 1); 1119 test(S("abcde"), 1, 4, S("abcdefghij"), 0, 10, 1); 1120 test(S("abcde"), 1, 4, S("abcdefghij"), 0, 11, 1); 1121 test(S("abcde"), 1, 4, S("abcdefghij"), 1, 0, 4); 1122 test(S("abcde"), 1, 4, S("abcdefghij"), 1, 1, 3); 1123 test(S("abcde"), 1, 4, S("abcdefghij"), 1, 4, 0); 1124 test(S("abcde"), 1, 4, S("abcdefghij"), 1, 8, -4); 1125 test(S("abcde"), 1, 4, S("abcdefghij"), 1, 9, -5); 1126 test(S("abcde"), 1, 4, S("abcdefghij"), 1, 10, -5); 1127} 1128 1129template <class S> 1130void test10() 1131{ 1132 test(S("abcde"), 1, 4, S("abcdefghij"), 5, 0, 4); 1133 test(S("abcde"), 1, 4, S("abcdefghij"), 5, 1, -4); 1134 test(S("abcde"), 1, 4, S("abcdefghij"), 5, 2, -4); 1135 test(S("abcde"), 1, 4, S("abcdefghij"), 5, 4, -4); 1136 test(S("abcde"), 1, 4, S("abcdefghij"), 5, 5, -4); 1137 test(S("abcde"), 1, 4, S("abcdefghij"), 5, 6, -4); 1138 test(S("abcde"), 1, 4, S("abcdefghij"), 9, 0, 4); 1139 test(S("abcde"), 1, 4, S("abcdefghij"), 9, 1, -8); 1140 test(S("abcde"), 1, 4, S("abcdefghij"), 9, 2, -8); 1141 test(S("abcde"), 1, 4, S("abcdefghij"), 10, 0, 4); 1142 test(S("abcde"), 1, 4, S("abcdefghij"), 10, 1, 4); 1143 test(S("abcde"), 1, 4, S("abcdefghij"), 11, 0, 0); 1144 test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 0, 0, 4); 1145 test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 0, 1, 1); 1146 test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 0, 10, 1); 1147 test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 0, 19, 1); 1148 test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 0, 20, 1); 1149 test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 0, 21, 1); 1150 test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 1, 0, 4); 1151 test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 1, 1, 3); 1152 test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 1, 9, -5); 1153 test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 1, 18, -14); 1154 test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 1, 19, -15); 1155 test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 1, 20, -15); 1156 test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 10, 0, 4); 1157 test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 10, 1, -9); 1158 test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 10, 5, -9); 1159 test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 10, 9, -9); 1160 test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 10, 10, -9); 1161 test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 10, 11, -9); 1162 test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 19, 0, 4); 1163 test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 19, 1, -18); 1164 test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 19, 2, -18); 1165 test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 20, 0, 4); 1166 test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 20, 1, 4); 1167 test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 21, 0, 0); 1168 test(S("abcde"), 1, 5, S(""), 0, 0, 4); 1169 test(S("abcde"), 1, 5, S(""), 0, 1, 4); 1170 test(S("abcde"), 1, 5, S(""), 1, 0, 0); 1171 test(S("abcde"), 1, 5, S("abcde"), 0, 0, 4); 1172 test(S("abcde"), 1, 5, S("abcde"), 0, 1, 1); 1173 test(S("abcde"), 1, 5, S("abcde"), 0, 2, 1); 1174 test(S("abcde"), 1, 5, S("abcde"), 0, 4, 1); 1175 test(S("abcde"), 1, 5, S("abcde"), 0, 5, 1); 1176 test(S("abcde"), 1, 5, S("abcde"), 0, 6, 1); 1177 test(S("abcde"), 1, 5, S("abcde"), 1, 0, 4); 1178 test(S("abcde"), 1, 5, S("abcde"), 1, 1, 3); 1179 test(S("abcde"), 1, 5, S("abcde"), 1, 2, 2); 1180 test(S("abcde"), 1, 5, S("abcde"), 1, 3, 1); 1181 test(S("abcde"), 1, 5, S("abcde"), 1, 4, 0); 1182 test(S("abcde"), 1, 5, S("abcde"), 1, 5, 0); 1183 test(S("abcde"), 1, 5, S("abcde"), 2, 0, 4); 1184 test(S("abcde"), 1, 5, S("abcde"), 2, 1, -1); 1185 test(S("abcde"), 1, 5, S("abcde"), 2, 2, -1); 1186 test(S("abcde"), 1, 5, S("abcde"), 2, 3, -1); 1187 test(S("abcde"), 1, 5, S("abcde"), 2, 4, -1); 1188 test(S("abcde"), 1, 5, S("abcde"), 4, 0, 4); 1189 test(S("abcde"), 1, 5, S("abcde"), 4, 1, -3); 1190 test(S("abcde"), 1, 5, S("abcde"), 4, 2, -3); 1191 test(S("abcde"), 1, 5, S("abcde"), 5, 0, 4); 1192 test(S("abcde"), 1, 5, S("abcde"), 5, 1, 4); 1193 test(S("abcde"), 1, 5, S("abcde"), 6, 0, 0); 1194 test(S("abcde"), 1, 5, S("abcdefghij"), 0, 0, 4); 1195 test(S("abcde"), 1, 5, S("abcdefghij"), 0, 1, 1); 1196 test(S("abcde"), 1, 5, S("abcdefghij"), 0, 5, 1); 1197 test(S("abcde"), 1, 5, S("abcdefghij"), 0, 9, 1); 1198 test(S("abcde"), 1, 5, S("abcdefghij"), 0, 10, 1); 1199 test(S("abcde"), 1, 5, S("abcdefghij"), 0, 11, 1); 1200 test(S("abcde"), 1, 5, S("abcdefghij"), 1, 0, 4); 1201 test(S("abcde"), 1, 5, S("abcdefghij"), 1, 1, 3); 1202 test(S("abcde"), 1, 5, S("abcdefghij"), 1, 4, 0); 1203 test(S("abcde"), 1, 5, S("abcdefghij"), 1, 8, -4); 1204 test(S("abcde"), 1, 5, S("abcdefghij"), 1, 9, -5); 1205 test(S("abcde"), 1, 5, S("abcdefghij"), 1, 10, -5); 1206 test(S("abcde"), 1, 5, S("abcdefghij"), 5, 0, 4); 1207 test(S("abcde"), 1, 5, S("abcdefghij"), 5, 1, -4); 1208 test(S("abcde"), 1, 5, S("abcdefghij"), 5, 2, -4); 1209 test(S("abcde"), 1, 5, S("abcdefghij"), 5, 4, -4); 1210 test(S("abcde"), 1, 5, S("abcdefghij"), 5, 5, -4); 1211 test(S("abcde"), 1, 5, S("abcdefghij"), 5, 6, -4); 1212 test(S("abcde"), 1, 5, S("abcdefghij"), 9, 0, 4); 1213 test(S("abcde"), 1, 5, S("abcdefghij"), 9, 1, -8); 1214 test(S("abcde"), 1, 5, S("abcdefghij"), 9, 2, -8); 1215 test(S("abcde"), 1, 5, S("abcdefghij"), 10, 0, 4); 1216 test(S("abcde"), 1, 5, S("abcdefghij"), 10, 1, 4); 1217 test(S("abcde"), 1, 5, S("abcdefghij"), 11, 0, 0); 1218 test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 0, 0, 4); 1219 test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 0, 1, 1); 1220 test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 0, 10, 1); 1221 test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 0, 19, 1); 1222 test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 0, 20, 1); 1223 test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 0, 21, 1); 1224 test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 1, 0, 4); 1225 test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 1, 1, 3); 1226 test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 1, 9, -5); 1227 test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 1, 18, -14); 1228 test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 1, 19, -15); 1229 test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 1, 20, -15); 1230 test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 10, 0, 4); 1231 test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 10, 1, -9); 1232} 1233 1234template <class S> 1235void test11() 1236{ 1237 test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 10, 5, -9); 1238 test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 10, 9, -9); 1239 test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 10, 10, -9); 1240 test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 10, 11, -9); 1241 test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 19, 0, 4); 1242 test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 19, 1, -18); 1243 test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 19, 2, -18); 1244 test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 20, 0, 4); 1245 test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 20, 1, 4); 1246 test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 21, 0, 0); 1247 test(S("abcde"), 2, 0, S(""), 0, 0, 0); 1248 test(S("abcde"), 2, 0, S(""), 0, 1, 0); 1249 test(S("abcde"), 2, 0, S(""), 1, 0, 0); 1250 test(S("abcde"), 2, 0, S("abcde"), 0, 0, 0); 1251 test(S("abcde"), 2, 0, S("abcde"), 0, 1, -1); 1252 test(S("abcde"), 2, 0, S("abcde"), 0, 2, -2); 1253 test(S("abcde"), 2, 0, S("abcde"), 0, 4, -4); 1254 test(S("abcde"), 2, 0, S("abcde"), 0, 5, -5); 1255 test(S("abcde"), 2, 0, S("abcde"), 0, 6, -5); 1256 test(S("abcde"), 2, 0, S("abcde"), 1, 0, 0); 1257 test(S("abcde"), 2, 0, S("abcde"), 1, 1, -1); 1258 test(S("abcde"), 2, 0, S("abcde"), 1, 2, -2); 1259 test(S("abcde"), 2, 0, S("abcde"), 1, 3, -3); 1260 test(S("abcde"), 2, 0, S("abcde"), 1, 4, -4); 1261 test(S("abcde"), 2, 0, S("abcde"), 1, 5, -4); 1262 test(S("abcde"), 2, 0, S("abcde"), 2, 0, 0); 1263 test(S("abcde"), 2, 0, S("abcde"), 2, 1, -1); 1264 test(S("abcde"), 2, 0, S("abcde"), 2, 2, -2); 1265 test(S("abcde"), 2, 0, S("abcde"), 2, 3, -3); 1266 test(S("abcde"), 2, 0, S("abcde"), 2, 4, -3); 1267 test(S("abcde"), 2, 0, S("abcde"), 4, 0, 0); 1268 test(S("abcde"), 2, 0, S("abcde"), 4, 1, -1); 1269 test(S("abcde"), 2, 0, S("abcde"), 4, 2, -1); 1270 test(S("abcde"), 2, 0, S("abcde"), 5, 0, 0); 1271 test(S("abcde"), 2, 0, S("abcde"), 5, 1, 0); 1272 test(S("abcde"), 2, 0, S("abcde"), 6, 0, 0); 1273 test(S("abcde"), 2, 0, S("abcdefghij"), 0, 0, 0); 1274 test(S("abcde"), 2, 0, S("abcdefghij"), 0, 1, -1); 1275 test(S("abcde"), 2, 0, S("abcdefghij"), 0, 5, -5); 1276 test(S("abcde"), 2, 0, S("abcdefghij"), 0, 9, -9); 1277 test(S("abcde"), 2, 0, S("abcdefghij"), 0, 10, -10); 1278 test(S("abcde"), 2, 0, S("abcdefghij"), 0, 11, -10); 1279 test(S("abcde"), 2, 0, S("abcdefghij"), 1, 0, 0); 1280 test(S("abcde"), 2, 0, S("abcdefghij"), 1, 1, -1); 1281 test(S("abcde"), 2, 0, S("abcdefghij"), 1, 4, -4); 1282 test(S("abcde"), 2, 0, S("abcdefghij"), 1, 8, -8); 1283 test(S("abcde"), 2, 0, S("abcdefghij"), 1, 9, -9); 1284 test(S("abcde"), 2, 0, S("abcdefghij"), 1, 10, -9); 1285 test(S("abcde"), 2, 0, S("abcdefghij"), 5, 0, 0); 1286 test(S("abcde"), 2, 0, S("abcdefghij"), 5, 1, -1); 1287 test(S("abcde"), 2, 0, S("abcdefghij"), 5, 2, -2); 1288 test(S("abcde"), 2, 0, S("abcdefghij"), 5, 4, -4); 1289 test(S("abcde"), 2, 0, S("abcdefghij"), 5, 5, -5); 1290 test(S("abcde"), 2, 0, S("abcdefghij"), 5, 6, -5); 1291 test(S("abcde"), 2, 0, S("abcdefghij"), 9, 0, 0); 1292 test(S("abcde"), 2, 0, S("abcdefghij"), 9, 1, -1); 1293 test(S("abcde"), 2, 0, S("abcdefghij"), 9, 2, -1); 1294 test(S("abcde"), 2, 0, S("abcdefghij"), 10, 0, 0); 1295 test(S("abcde"), 2, 0, S("abcdefghij"), 10, 1, 0); 1296 test(S("abcde"), 2, 0, S("abcdefghij"), 11, 0, 0); 1297 test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 0, 0, 0); 1298 test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 0, 1, -1); 1299 test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 0, 10, -10); 1300 test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 0, 19, -19); 1301 test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 0, 20, -20); 1302 test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 0, 21, -20); 1303 test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 1, 0, 0); 1304 test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 1, 1, -1); 1305 test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 1, 9, -9); 1306 test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 1, 18, -18); 1307 test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 1, 19, -19); 1308 test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 1, 20, -19); 1309 test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 10, 0, 0); 1310 test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 10, 1, -1); 1311 test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 10, 5, -5); 1312 test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 10, 9, -9); 1313 test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 10, 10, -10); 1314 test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 10, 11, -10); 1315 test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 19, 0, 0); 1316 test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 19, 1, -1); 1317 test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 19, 2, -1); 1318 test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 20, 0, 0); 1319 test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 20, 1, 0); 1320 test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 21, 0, 0); 1321 test(S("abcde"), 2, 1, S(""), 0, 0, 1); 1322 test(S("abcde"), 2, 1, S(""), 0, 1, 1); 1323 test(S("abcde"), 2, 1, S(""), 1, 0, 0); 1324 test(S("abcde"), 2, 1, S("abcde"), 0, 0, 1); 1325 test(S("abcde"), 2, 1, S("abcde"), 0, 1, 2); 1326 test(S("abcde"), 2, 1, S("abcde"), 0, 2, 2); 1327 test(S("abcde"), 2, 1, S("abcde"), 0, 4, 2); 1328 test(S("abcde"), 2, 1, S("abcde"), 0, 5, 2); 1329 test(S("abcde"), 2, 1, S("abcde"), 0, 6, 2); 1330 test(S("abcde"), 2, 1, S("abcde"), 1, 0, 1); 1331 test(S("abcde"), 2, 1, S("abcde"), 1, 1, 1); 1332 test(S("abcde"), 2, 1, S("abcde"), 1, 2, 1); 1333 test(S("abcde"), 2, 1, S("abcde"), 1, 3, 1); 1334 test(S("abcde"), 2, 1, S("abcde"), 1, 4, 1); 1335 test(S("abcde"), 2, 1, S("abcde"), 1, 5, 1); 1336 test(S("abcde"), 2, 1, S("abcde"), 2, 0, 1); 1337} 1338 1339template <class S> 1340void test12() 1341{ 1342 test(S("abcde"), 2, 1, S("abcde"), 2, 1, 0); 1343 test(S("abcde"), 2, 1, S("abcde"), 2, 2, -1); 1344 test(S("abcde"), 2, 1, S("abcde"), 2, 3, -2); 1345 test(S("abcde"), 2, 1, S("abcde"), 2, 4, -2); 1346 test(S("abcde"), 2, 1, S("abcde"), 4, 0, 1); 1347 test(S("abcde"), 2, 1, S("abcde"), 4, 1, -2); 1348 test(S("abcde"), 2, 1, S("abcde"), 4, 2, -2); 1349 test(S("abcde"), 2, 1, S("abcde"), 5, 0, 1); 1350 test(S("abcde"), 2, 1, S("abcde"), 5, 1, 1); 1351 test(S("abcde"), 2, 1, S("abcde"), 6, 0, 0); 1352 test(S("abcde"), 2, 1, S("abcdefghij"), 0, 0, 1); 1353 test(S("abcde"), 2, 1, S("abcdefghij"), 0, 1, 2); 1354 test(S("abcde"), 2, 1, S("abcdefghij"), 0, 5, 2); 1355 test(S("abcde"), 2, 1, S("abcdefghij"), 0, 9, 2); 1356 test(S("abcde"), 2, 1, S("abcdefghij"), 0, 10, 2); 1357 test(S("abcde"), 2, 1, S("abcdefghij"), 0, 11, 2); 1358 test(S("abcde"), 2, 1, S("abcdefghij"), 1, 0, 1); 1359 test(S("abcde"), 2, 1, S("abcdefghij"), 1, 1, 1); 1360 test(S("abcde"), 2, 1, S("abcdefghij"), 1, 4, 1); 1361 test(S("abcde"), 2, 1, S("abcdefghij"), 1, 8, 1); 1362 test(S("abcde"), 2, 1, S("abcdefghij"), 1, 9, 1); 1363 test(S("abcde"), 2, 1, S("abcdefghij"), 1, 10, 1); 1364 test(S("abcde"), 2, 1, S("abcdefghij"), 5, 0, 1); 1365 test(S("abcde"), 2, 1, S("abcdefghij"), 5, 1, -3); 1366 test(S("abcde"), 2, 1, S("abcdefghij"), 5, 2, -3); 1367 test(S("abcde"), 2, 1, S("abcdefghij"), 5, 4, -3); 1368 test(S("abcde"), 2, 1, S("abcdefghij"), 5, 5, -3); 1369 test(S("abcde"), 2, 1, S("abcdefghij"), 5, 6, -3); 1370 test(S("abcde"), 2, 1, S("abcdefghij"), 9, 0, 1); 1371 test(S("abcde"), 2, 1, S("abcdefghij"), 9, 1, -7); 1372 test(S("abcde"), 2, 1, S("abcdefghij"), 9, 2, -7); 1373 test(S("abcde"), 2, 1, S("abcdefghij"), 10, 0, 1); 1374 test(S("abcde"), 2, 1, S("abcdefghij"), 10, 1, 1); 1375 test(S("abcde"), 2, 1, S("abcdefghij"), 11, 0, 0); 1376 test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 0, 0, 1); 1377 test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 0, 1, 2); 1378 test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 0, 10, 2); 1379 test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 0, 19, 2); 1380 test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 0, 20, 2); 1381 test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 0, 21, 2); 1382 test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 1, 0, 1); 1383 test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 1, 1, 1); 1384 test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 1, 9, 1); 1385 test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 1, 18, 1); 1386 test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 1, 19, 1); 1387 test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 1, 20, 1); 1388 test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 10, 0, 1); 1389 test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 10, 1, -8); 1390 test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 10, 5, -8); 1391 test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 10, 9, -8); 1392 test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 10, 10, -8); 1393 test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 10, 11, -8); 1394 test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 19, 0, 1); 1395 test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 19, 1, -17); 1396 test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 19, 2, -17); 1397 test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 20, 0, 1); 1398 test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 20, 1, 1); 1399 test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 21, 0, 0); 1400 test(S("abcde"), 2, 2, S(""), 0, 0, 2); 1401 test(S("abcde"), 2, 2, S(""), 0, 1, 2); 1402 test(S("abcde"), 2, 2, S(""), 1, 0, 0); 1403 test(S("abcde"), 2, 2, S("abcde"), 0, 0, 2); 1404 test(S("abcde"), 2, 2, S("abcde"), 0, 1, 2); 1405 test(S("abcde"), 2, 2, S("abcde"), 0, 2, 2); 1406 test(S("abcde"), 2, 2, S("abcde"), 0, 4, 2); 1407 test(S("abcde"), 2, 2, S("abcde"), 0, 5, 2); 1408 test(S("abcde"), 2, 2, S("abcde"), 0, 6, 2); 1409 test(S("abcde"), 2, 2, S("abcde"), 1, 0, 2); 1410 test(S("abcde"), 2, 2, S("abcde"), 1, 1, 1); 1411 test(S("abcde"), 2, 2, S("abcde"), 1, 2, 1); 1412 test(S("abcde"), 2, 2, S("abcde"), 1, 3, 1); 1413 test(S("abcde"), 2, 2, S("abcde"), 1, 4, 1); 1414 test(S("abcde"), 2, 2, S("abcde"), 1, 5, 1); 1415 test(S("abcde"), 2, 2, S("abcde"), 2, 0, 2); 1416 test(S("abcde"), 2, 2, S("abcde"), 2, 1, 1); 1417 test(S("abcde"), 2, 2, S("abcde"), 2, 2, 0); 1418 test(S("abcde"), 2, 2, S("abcde"), 2, 3, -1); 1419 test(S("abcde"), 2, 2, S("abcde"), 2, 4, -1); 1420 test(S("abcde"), 2, 2, S("abcde"), 4, 0, 2); 1421 test(S("abcde"), 2, 2, S("abcde"), 4, 1, -2); 1422 test(S("abcde"), 2, 2, S("abcde"), 4, 2, -2); 1423 test(S("abcde"), 2, 2, S("abcde"), 5, 0, 2); 1424 test(S("abcde"), 2, 2, S("abcde"), 5, 1, 2); 1425 test(S("abcde"), 2, 2, S("abcde"), 6, 0, 0); 1426 test(S("abcde"), 2, 2, S("abcdefghij"), 0, 0, 2); 1427 test(S("abcde"), 2, 2, S("abcdefghij"), 0, 1, 2); 1428 test(S("abcde"), 2, 2, S("abcdefghij"), 0, 5, 2); 1429 test(S("abcde"), 2, 2, S("abcdefghij"), 0, 9, 2); 1430 test(S("abcde"), 2, 2, S("abcdefghij"), 0, 10, 2); 1431 test(S("abcde"), 2, 2, S("abcdefghij"), 0, 11, 2); 1432 test(S("abcde"), 2, 2, S("abcdefghij"), 1, 0, 2); 1433 test(S("abcde"), 2, 2, S("abcdefghij"), 1, 1, 1); 1434 test(S("abcde"), 2, 2, S("abcdefghij"), 1, 4, 1); 1435 test(S("abcde"), 2, 2, S("abcdefghij"), 1, 8, 1); 1436 test(S("abcde"), 2, 2, S("abcdefghij"), 1, 9, 1); 1437 test(S("abcde"), 2, 2, S("abcdefghij"), 1, 10, 1); 1438 test(S("abcde"), 2, 2, S("abcdefghij"), 5, 0, 2); 1439 test(S("abcde"), 2, 2, S("abcdefghij"), 5, 1, -3); 1440 test(S("abcde"), 2, 2, S("abcdefghij"), 5, 2, -3); 1441 test(S("abcde"), 2, 2, S("abcdefghij"), 5, 4, -3); 1442} 1443 1444template <class S> 1445void test13() 1446{ 1447 test(S("abcde"), 2, 2, S("abcdefghij"), 5, 5, -3); 1448 test(S("abcde"), 2, 2, S("abcdefghij"), 5, 6, -3); 1449 test(S("abcde"), 2, 2, S("abcdefghij"), 9, 0, 2); 1450 test(S("abcde"), 2, 2, S("abcdefghij"), 9, 1, -7); 1451 test(S("abcde"), 2, 2, S("abcdefghij"), 9, 2, -7); 1452 test(S("abcde"), 2, 2, S("abcdefghij"), 10, 0, 2); 1453 test(S("abcde"), 2, 2, S("abcdefghij"), 10, 1, 2); 1454 test(S("abcde"), 2, 2, S("abcdefghij"), 11, 0, 0); 1455 test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 0, 0, 2); 1456 test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 0, 1, 2); 1457 test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 0, 10, 2); 1458 test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 0, 19, 2); 1459 test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 0, 20, 2); 1460 test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 0, 21, 2); 1461 test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 1, 0, 2); 1462 test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 1, 1, 1); 1463 test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 1, 9, 1); 1464 test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 1, 18, 1); 1465 test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 1, 19, 1); 1466 test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 1, 20, 1); 1467 test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 10, 0, 2); 1468 test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 10, 1, -8); 1469 test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 10, 5, -8); 1470 test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 10, 9, -8); 1471 test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 10, 10, -8); 1472 test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 10, 11, -8); 1473 test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 19, 0, 2); 1474 test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 19, 1, -17); 1475 test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 19, 2, -17); 1476 test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 20, 0, 2); 1477 test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 20, 1, 2); 1478 test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 21, 0, 0); 1479 test(S("abcde"), 2, 3, S(""), 0, 0, 3); 1480 test(S("abcde"), 2, 3, S(""), 0, 1, 3); 1481 test(S("abcde"), 2, 3, S(""), 1, 0, 0); 1482 test(S("abcde"), 2, 3, S("abcde"), 0, 0, 3); 1483 test(S("abcde"), 2, 3, S("abcde"), 0, 1, 2); 1484 test(S("abcde"), 2, 3, S("abcde"), 0, 2, 2); 1485 test(S("abcde"), 2, 3, S("abcde"), 0, 4, 2); 1486 test(S("abcde"), 2, 3, S("abcde"), 0, 5, 2); 1487 test(S("abcde"), 2, 3, S("abcde"), 0, 6, 2); 1488 test(S("abcde"), 2, 3, S("abcde"), 1, 0, 3); 1489 test(S("abcde"), 2, 3, S("abcde"), 1, 1, 1); 1490 test(S("abcde"), 2, 3, S("abcde"), 1, 2, 1); 1491 test(S("abcde"), 2, 3, S("abcde"), 1, 3, 1); 1492 test(S("abcde"), 2, 3, S("abcde"), 1, 4, 1); 1493 test(S("abcde"), 2, 3, S("abcde"), 1, 5, 1); 1494 test(S("abcde"), 2, 3, S("abcde"), 2, 0, 3); 1495 test(S("abcde"), 2, 3, S("abcde"), 2, 1, 2); 1496 test(S("abcde"), 2, 3, S("abcde"), 2, 2, 1); 1497 test(S("abcde"), 2, 3, S("abcde"), 2, 3, 0); 1498 test(S("abcde"), 2, 3, S("abcde"), 2, 4, 0); 1499 test(S("abcde"), 2, 3, S("abcde"), 4, 0, 3); 1500 test(S("abcde"), 2, 3, S("abcde"), 4, 1, -2); 1501 test(S("abcde"), 2, 3, S("abcde"), 4, 2, -2); 1502 test(S("abcde"), 2, 3, S("abcde"), 5, 0, 3); 1503 test(S("abcde"), 2, 3, S("abcde"), 5, 1, 3); 1504 test(S("abcde"), 2, 3, S("abcde"), 6, 0, 0); 1505 test(S("abcde"), 2, 3, S("abcdefghij"), 0, 0, 3); 1506 test(S("abcde"), 2, 3, S("abcdefghij"), 0, 1, 2); 1507 test(S("abcde"), 2, 3, S("abcdefghij"), 0, 5, 2); 1508 test(S("abcde"), 2, 3, S("abcdefghij"), 0, 9, 2); 1509 test(S("abcde"), 2, 3, S("abcdefghij"), 0, 10, 2); 1510 test(S("abcde"), 2, 3, S("abcdefghij"), 0, 11, 2); 1511 test(S("abcde"), 2, 3, S("abcdefghij"), 1, 0, 3); 1512 test(S("abcde"), 2, 3, S("abcdefghij"), 1, 1, 1); 1513 test(S("abcde"), 2, 3, S("abcdefghij"), 1, 4, 1); 1514 test(S("abcde"), 2, 3, S("abcdefghij"), 1, 8, 1); 1515 test(S("abcde"), 2, 3, S("abcdefghij"), 1, 9, 1); 1516 test(S("abcde"), 2, 3, S("abcdefghij"), 1, 10, 1); 1517 test(S("abcde"), 2, 3, S("abcdefghij"), 5, 0, 3); 1518 test(S("abcde"), 2, 3, S("abcdefghij"), 5, 1, -3); 1519 test(S("abcde"), 2, 3, S("abcdefghij"), 5, 2, -3); 1520 test(S("abcde"), 2, 3, S("abcdefghij"), 5, 4, -3); 1521 test(S("abcde"), 2, 3, S("abcdefghij"), 5, 5, -3); 1522 test(S("abcde"), 2, 3, S("abcdefghij"), 5, 6, -3); 1523 test(S("abcde"), 2, 3, S("abcdefghij"), 9, 0, 3); 1524 test(S("abcde"), 2, 3, S("abcdefghij"), 9, 1, -7); 1525 test(S("abcde"), 2, 3, S("abcdefghij"), 9, 2, -7); 1526 test(S("abcde"), 2, 3, S("abcdefghij"), 10, 0, 3); 1527 test(S("abcde"), 2, 3, S("abcdefghij"), 10, 1, 3); 1528 test(S("abcde"), 2, 3, S("abcdefghij"), 11, 0, 0); 1529 test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 0, 0, 3); 1530 test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 0, 1, 2); 1531 test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 0, 10, 2); 1532 test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 0, 19, 2); 1533 test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 0, 20, 2); 1534 test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 0, 21, 2); 1535 test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 1, 0, 3); 1536 test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 1, 1, 1); 1537 test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 1, 9, 1); 1538 test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 1, 18, 1); 1539 test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 1, 19, 1); 1540 test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 1, 20, 1); 1541 test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 10, 0, 3); 1542 test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 10, 1, -8); 1543 test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 10, 5, -8); 1544 test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 10, 9, -8); 1545 test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 10, 10, -8); 1546 test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 10, 11, -8); 1547} 1548 1549template <class S> 1550void test14() 1551{ 1552 test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 19, 0, 3); 1553 test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 19, 1, -17); 1554 test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 19, 2, -17); 1555 test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 20, 0, 3); 1556 test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 20, 1, 3); 1557 test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 21, 0, 0); 1558 test(S("abcde"), 2, 4, S(""), 0, 0, 3); 1559 test(S("abcde"), 2, 4, S(""), 0, 1, 3); 1560 test(S("abcde"), 2, 4, S(""), 1, 0, 0); 1561 test(S("abcde"), 2, 4, S("abcde"), 0, 0, 3); 1562 test(S("abcde"), 2, 4, S("abcde"), 0, 1, 2); 1563 test(S("abcde"), 2, 4, S("abcde"), 0, 2, 2); 1564 test(S("abcde"), 2, 4, S("abcde"), 0, 4, 2); 1565 test(S("abcde"), 2, 4, S("abcde"), 0, 5, 2); 1566 test(S("abcde"), 2, 4, S("abcde"), 0, 6, 2); 1567 test(S("abcde"), 2, 4, S("abcde"), 1, 0, 3); 1568 test(S("abcde"), 2, 4, S("abcde"), 1, 1, 1); 1569 test(S("abcde"), 2, 4, S("abcde"), 1, 2, 1); 1570 test(S("abcde"), 2, 4, S("abcde"), 1, 3, 1); 1571 test(S("abcde"), 2, 4, S("abcde"), 1, 4, 1); 1572 test(S("abcde"), 2, 4, S("abcde"), 1, 5, 1); 1573 test(S("abcde"), 2, 4, S("abcde"), 2, 0, 3); 1574 test(S("abcde"), 2, 4, S("abcde"), 2, 1, 2); 1575 test(S("abcde"), 2, 4, S("abcde"), 2, 2, 1); 1576 test(S("abcde"), 2, 4, S("abcde"), 2, 3, 0); 1577 test(S("abcde"), 2, 4, S("abcde"), 2, 4, 0); 1578 test(S("abcde"), 2, 4, S("abcde"), 4, 0, 3); 1579 test(S("abcde"), 2, 4, S("abcde"), 4, 1, -2); 1580 test(S("abcde"), 2, 4, S("abcde"), 4, 2, -2); 1581 test(S("abcde"), 2, 4, S("abcde"), 5, 0, 3); 1582 test(S("abcde"), 2, 4, S("abcde"), 5, 1, 3); 1583 test(S("abcde"), 2, 4, S("abcde"), 6, 0, 0); 1584 test(S("abcde"), 2, 4, S("abcdefghij"), 0, 0, 3); 1585 test(S("abcde"), 2, 4, S("abcdefghij"), 0, 1, 2); 1586 test(S("abcde"), 2, 4, S("abcdefghij"), 0, 5, 2); 1587 test(S("abcde"), 2, 4, S("abcdefghij"), 0, 9, 2); 1588 test(S("abcde"), 2, 4, S("abcdefghij"), 0, 10, 2); 1589 test(S("abcde"), 2, 4, S("abcdefghij"), 0, 11, 2); 1590 test(S("abcde"), 2, 4, S("abcdefghij"), 1, 0, 3); 1591 test(S("abcde"), 2, 4, S("abcdefghij"), 1, 1, 1); 1592 test(S("abcde"), 2, 4, S("abcdefghij"), 1, 4, 1); 1593 test(S("abcde"), 2, 4, S("abcdefghij"), 1, 8, 1); 1594 test(S("abcde"), 2, 4, S("abcdefghij"), 1, 9, 1); 1595 test(S("abcde"), 2, 4, S("abcdefghij"), 1, 10, 1); 1596 test(S("abcde"), 2, 4, S("abcdefghij"), 5, 0, 3); 1597 test(S("abcde"), 2, 4, S("abcdefghij"), 5, 1, -3); 1598 test(S("abcde"), 2, 4, S("abcdefghij"), 5, 2, -3); 1599 test(S("abcde"), 2, 4, S("abcdefghij"), 5, 4, -3); 1600 test(S("abcde"), 2, 4, S("abcdefghij"), 5, 5, -3); 1601 test(S("abcde"), 2, 4, S("abcdefghij"), 5, 6, -3); 1602 test(S("abcde"), 2, 4, S("abcdefghij"), 9, 0, 3); 1603 test(S("abcde"), 2, 4, S("abcdefghij"), 9, 1, -7); 1604 test(S("abcde"), 2, 4, S("abcdefghij"), 9, 2, -7); 1605 test(S("abcde"), 2, 4, S("abcdefghij"), 10, 0, 3); 1606 test(S("abcde"), 2, 4, S("abcdefghij"), 10, 1, 3); 1607 test(S("abcde"), 2, 4, S("abcdefghij"), 11, 0, 0); 1608 test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 0, 0, 3); 1609 test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 0, 1, 2); 1610 test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 0, 10, 2); 1611 test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 0, 19, 2); 1612 test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 0, 20, 2); 1613 test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 0, 21, 2); 1614 test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 1, 0, 3); 1615 test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 1, 1, 1); 1616 test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 1, 9, 1); 1617 test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 1, 18, 1); 1618 test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 1, 19, 1); 1619 test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 1, 20, 1); 1620 test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 10, 0, 3); 1621 test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 10, 1, -8); 1622 test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 10, 5, -8); 1623 test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 10, 9, -8); 1624 test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 10, 10, -8); 1625 test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 10, 11, -8); 1626 test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 19, 0, 3); 1627 test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 19, 1, -17); 1628 test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 19, 2, -17); 1629 test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 20, 0, 3); 1630 test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 20, 1, 3); 1631 test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 21, 0, 0); 1632 test(S("abcde"), 4, 0, S(""), 0, 0, 0); 1633 test(S("abcde"), 4, 0, S(""), 0, 1, 0); 1634 test(S("abcde"), 4, 0, S(""), 1, 0, 0); 1635 test(S("abcde"), 4, 0, S("abcde"), 0, 0, 0); 1636 test(S("abcde"), 4, 0, S("abcde"), 0, 1, -1); 1637 test(S("abcde"), 4, 0, S("abcde"), 0, 2, -2); 1638 test(S("abcde"), 4, 0, S("abcde"), 0, 4, -4); 1639 test(S("abcde"), 4, 0, S("abcde"), 0, 5, -5); 1640 test(S("abcde"), 4, 0, S("abcde"), 0, 6, -5); 1641 test(S("abcde"), 4, 0, S("abcde"), 1, 0, 0); 1642 test(S("abcde"), 4, 0, S("abcde"), 1, 1, -1); 1643 test(S("abcde"), 4, 0, S("abcde"), 1, 2, -2); 1644 test(S("abcde"), 4, 0, S("abcde"), 1, 3, -3); 1645 test(S("abcde"), 4, 0, S("abcde"), 1, 4, -4); 1646 test(S("abcde"), 4, 0, S("abcde"), 1, 5, -4); 1647 test(S("abcde"), 4, 0, S("abcde"), 2, 0, 0); 1648 test(S("abcde"), 4, 0, S("abcde"), 2, 1, -1); 1649 test(S("abcde"), 4, 0, S("abcde"), 2, 2, -2); 1650 test(S("abcde"), 4, 0, S("abcde"), 2, 3, -3); 1651 test(S("abcde"), 4, 0, S("abcde"), 2, 4, -3); 1652} 1653 1654template <class S> 1655void test15() 1656{ 1657 test(S("abcde"), 4, 0, S("abcde"), 4, 0, 0); 1658 test(S("abcde"), 4, 0, S("abcde"), 4, 1, -1); 1659 test(S("abcde"), 4, 0, S("abcde"), 4, 2, -1); 1660 test(S("abcde"), 4, 0, S("abcde"), 5, 0, 0); 1661 test(S("abcde"), 4, 0, S("abcde"), 5, 1, 0); 1662 test(S("abcde"), 4, 0, S("abcde"), 6, 0, 0); 1663 test(S("abcde"), 4, 0, S("abcdefghij"), 0, 0, 0); 1664 test(S("abcde"), 4, 0, S("abcdefghij"), 0, 1, -1); 1665 test(S("abcde"), 4, 0, S("abcdefghij"), 0, 5, -5); 1666 test(S("abcde"), 4, 0, S("abcdefghij"), 0, 9, -9); 1667 test(S("abcde"), 4, 0, S("abcdefghij"), 0, 10, -10); 1668 test(S("abcde"), 4, 0, S("abcdefghij"), 0, 11, -10); 1669 test(S("abcde"), 4, 0, S("abcdefghij"), 1, 0, 0); 1670 test(S("abcde"), 4, 0, S("abcdefghij"), 1, 1, -1); 1671 test(S("abcde"), 4, 0, S("abcdefghij"), 1, 4, -4); 1672 test(S("abcde"), 4, 0, S("abcdefghij"), 1, 8, -8); 1673 test(S("abcde"), 4, 0, S("abcdefghij"), 1, 9, -9); 1674 test(S("abcde"), 4, 0, S("abcdefghij"), 1, 10, -9); 1675 test(S("abcde"), 4, 0, S("abcdefghij"), 5, 0, 0); 1676 test(S("abcde"), 4, 0, S("abcdefghij"), 5, 1, -1); 1677 test(S("abcde"), 4, 0, S("abcdefghij"), 5, 2, -2); 1678 test(S("abcde"), 4, 0, S("abcdefghij"), 5, 4, -4); 1679 test(S("abcde"), 4, 0, S("abcdefghij"), 5, 5, -5); 1680 test(S("abcde"), 4, 0, S("abcdefghij"), 5, 6, -5); 1681 test(S("abcde"), 4, 0, S("abcdefghij"), 9, 0, 0); 1682 test(S("abcde"), 4, 0, S("abcdefghij"), 9, 1, -1); 1683 test(S("abcde"), 4, 0, S("abcdefghij"), 9, 2, -1); 1684 test(S("abcde"), 4, 0, S("abcdefghij"), 10, 0, 0); 1685 test(S("abcde"), 4, 0, S("abcdefghij"), 10, 1, 0); 1686 test(S("abcde"), 4, 0, S("abcdefghij"), 11, 0, 0); 1687 test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 0, 0, 0); 1688 test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 0, 1, -1); 1689 test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 0, 10, -10); 1690 test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 0, 19, -19); 1691 test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 0, 20, -20); 1692 test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 0, 21, -20); 1693 test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 1, 0, 0); 1694 test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 1, 1, -1); 1695 test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 1, 9, -9); 1696 test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 1, 18, -18); 1697 test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 1, 19, -19); 1698 test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 1, 20, -19); 1699 test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 10, 0, 0); 1700 test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 10, 1, -1); 1701 test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 10, 5, -5); 1702 test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 10, 9, -9); 1703 test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 10, 10, -10); 1704 test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 10, 11, -10); 1705 test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 19, 0, 0); 1706 test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 19, 1, -1); 1707 test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 19, 2, -1); 1708 test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 20, 0, 0); 1709 test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 20, 1, 0); 1710 test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 21, 0, 0); 1711 test(S("abcde"), 4, 1, S(""), 0, 0, 1); 1712 test(S("abcde"), 4, 1, S(""), 0, 1, 1); 1713 test(S("abcde"), 4, 1, S(""), 1, 0, 0); 1714 test(S("abcde"), 4, 1, S("abcde"), 0, 0, 1); 1715 test(S("abcde"), 4, 1, S("abcde"), 0, 1, 4); 1716 test(S("abcde"), 4, 1, S("abcde"), 0, 2, 4); 1717 test(S("abcde"), 4, 1, S("abcde"), 0, 4, 4); 1718 test(S("abcde"), 4, 1, S("abcde"), 0, 5, 4); 1719 test(S("abcde"), 4, 1, S("abcde"), 0, 6, 4); 1720 test(S("abcde"), 4, 1, S("abcde"), 1, 0, 1); 1721 test(S("abcde"), 4, 1, S("abcde"), 1, 1, 3); 1722 test(S("abcde"), 4, 1, S("abcde"), 1, 2, 3); 1723 test(S("abcde"), 4, 1, S("abcde"), 1, 3, 3); 1724 test(S("abcde"), 4, 1, S("abcde"), 1, 4, 3); 1725 test(S("abcde"), 4, 1, S("abcde"), 1, 5, 3); 1726 test(S("abcde"), 4, 1, S("abcde"), 2, 0, 1); 1727 test(S("abcde"), 4, 1, S("abcde"), 2, 1, 2); 1728 test(S("abcde"), 4, 1, S("abcde"), 2, 2, 2); 1729 test(S("abcde"), 4, 1, S("abcde"), 2, 3, 2); 1730 test(S("abcde"), 4, 1, S("abcde"), 2, 4, 2); 1731 test(S("abcde"), 4, 1, S("abcde"), 4, 0, 1); 1732 test(S("abcde"), 4, 1, S("abcde"), 4, 1, 0); 1733 test(S("abcde"), 4, 1, S("abcde"), 4, 2, 0); 1734 test(S("abcde"), 4, 1, S("abcde"), 5, 0, 1); 1735 test(S("abcde"), 4, 1, S("abcde"), 5, 1, 1); 1736 test(S("abcde"), 4, 1, S("abcde"), 6, 0, 0); 1737 test(S("abcde"), 4, 1, S("abcdefghij"), 0, 0, 1); 1738 test(S("abcde"), 4, 1, S("abcdefghij"), 0, 1, 4); 1739 test(S("abcde"), 4, 1, S("abcdefghij"), 0, 5, 4); 1740 test(S("abcde"), 4, 1, S("abcdefghij"), 0, 9, 4); 1741 test(S("abcde"), 4, 1, S("abcdefghij"), 0, 10, 4); 1742 test(S("abcde"), 4, 1, S("abcdefghij"), 0, 11, 4); 1743 test(S("abcde"), 4, 1, S("abcdefghij"), 1, 0, 1); 1744 test(S("abcde"), 4, 1, S("abcdefghij"), 1, 1, 3); 1745 test(S("abcde"), 4, 1, S("abcdefghij"), 1, 4, 3); 1746 test(S("abcde"), 4, 1, S("abcdefghij"), 1, 8, 3); 1747 test(S("abcde"), 4, 1, S("abcdefghij"), 1, 9, 3); 1748 test(S("abcde"), 4, 1, S("abcdefghij"), 1, 10, 3); 1749 test(S("abcde"), 4, 1, S("abcdefghij"), 5, 0, 1); 1750 test(S("abcde"), 4, 1, S("abcdefghij"), 5, 1, -1); 1751 test(S("abcde"), 4, 1, S("abcdefghij"), 5, 2, -1); 1752 test(S("abcde"), 4, 1, S("abcdefghij"), 5, 4, -1); 1753 test(S("abcde"), 4, 1, S("abcdefghij"), 5, 5, -1); 1754 test(S("abcde"), 4, 1, S("abcdefghij"), 5, 6, -1); 1755 test(S("abcde"), 4, 1, S("abcdefghij"), 9, 0, 1); 1756 test(S("abcde"), 4, 1, S("abcdefghij"), 9, 1, -5); 1757} 1758 1759template <class S> 1760void test16() 1761{ 1762 test(S("abcde"), 4, 1, S("abcdefghij"), 9, 2, -5); 1763 test(S("abcde"), 4, 1, S("abcdefghij"), 10, 0, 1); 1764 test(S("abcde"), 4, 1, S("abcdefghij"), 10, 1, 1); 1765 test(S("abcde"), 4, 1, S("abcdefghij"), 11, 0, 0); 1766 test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 0, 0, 1); 1767 test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 0, 1, 4); 1768 test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 0, 10, 4); 1769 test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 0, 19, 4); 1770 test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 0, 20, 4); 1771 test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 0, 21, 4); 1772 test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 1, 0, 1); 1773 test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 1, 1, 3); 1774 test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 1, 9, 3); 1775 test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 1, 18, 3); 1776 test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 1, 19, 3); 1777 test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 1, 20, 3); 1778 test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 10, 0, 1); 1779 test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 10, 1, -6); 1780 test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 10, 5, -6); 1781 test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 10, 9, -6); 1782 test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 10, 10, -6); 1783 test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 10, 11, -6); 1784 test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 19, 0, 1); 1785 test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 19, 1, -15); 1786 test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 19, 2, -15); 1787 test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 20, 0, 1); 1788 test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 20, 1, 1); 1789 test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 21, 0, 0); 1790 test(S("abcde"), 4, 2, S(""), 0, 0, 1); 1791 test(S("abcde"), 4, 2, S(""), 0, 1, 1); 1792 test(S("abcde"), 4, 2, S(""), 1, 0, 0); 1793 test(S("abcde"), 4, 2, S("abcde"), 0, 0, 1); 1794 test(S("abcde"), 4, 2, S("abcde"), 0, 1, 4); 1795 test(S("abcde"), 4, 2, S("abcde"), 0, 2, 4); 1796 test(S("abcde"), 4, 2, S("abcde"), 0, 4, 4); 1797 test(S("abcde"), 4, 2, S("abcde"), 0, 5, 4); 1798 test(S("abcde"), 4, 2, S("abcde"), 0, 6, 4); 1799 test(S("abcde"), 4, 2, S("abcde"), 1, 0, 1); 1800 test(S("abcde"), 4, 2, S("abcde"), 1, 1, 3); 1801 test(S("abcde"), 4, 2, S("abcde"), 1, 2, 3); 1802 test(S("abcde"), 4, 2, S("abcde"), 1, 3, 3); 1803 test(S("abcde"), 4, 2, S("abcde"), 1, 4, 3); 1804 test(S("abcde"), 4, 2, S("abcde"), 1, 5, 3); 1805 test(S("abcde"), 4, 2, S("abcde"), 2, 0, 1); 1806 test(S("abcde"), 4, 2, S("abcde"), 2, 1, 2); 1807 test(S("abcde"), 4, 2, S("abcde"), 2, 2, 2); 1808 test(S("abcde"), 4, 2, S("abcde"), 2, 3, 2); 1809 test(S("abcde"), 4, 2, S("abcde"), 2, 4, 2); 1810 test(S("abcde"), 4, 2, S("abcde"), 4, 0, 1); 1811 test(S("abcde"), 4, 2, S("abcde"), 4, 1, 0); 1812 test(S("abcde"), 4, 2, S("abcde"), 4, 2, 0); 1813 test(S("abcde"), 4, 2, S("abcde"), 5, 0, 1); 1814 test(S("abcde"), 4, 2, S("abcde"), 5, 1, 1); 1815 test(S("abcde"), 4, 2, S("abcde"), 6, 0, 0); 1816 test(S("abcde"), 4, 2, S("abcdefghij"), 0, 0, 1); 1817 test(S("abcde"), 4, 2, S("abcdefghij"), 0, 1, 4); 1818 test(S("abcde"), 4, 2, S("abcdefghij"), 0, 5, 4); 1819 test(S("abcde"), 4, 2, S("abcdefghij"), 0, 9, 4); 1820 test(S("abcde"), 4, 2, S("abcdefghij"), 0, 10, 4); 1821 test(S("abcde"), 4, 2, S("abcdefghij"), 0, 11, 4); 1822 test(S("abcde"), 4, 2, S("abcdefghij"), 1, 0, 1); 1823 test(S("abcde"), 4, 2, S("abcdefghij"), 1, 1, 3); 1824 test(S("abcde"), 4, 2, S("abcdefghij"), 1, 4, 3); 1825 test(S("abcde"), 4, 2, S("abcdefghij"), 1, 8, 3); 1826 test(S("abcde"), 4, 2, S("abcdefghij"), 1, 9, 3); 1827 test(S("abcde"), 4, 2, S("abcdefghij"), 1, 10, 3); 1828 test(S("abcde"), 4, 2, S("abcdefghij"), 5, 0, 1); 1829 test(S("abcde"), 4, 2, S("abcdefghij"), 5, 1, -1); 1830 test(S("abcde"), 4, 2, S("abcdefghij"), 5, 2, -1); 1831 test(S("abcde"), 4, 2, S("abcdefghij"), 5, 4, -1); 1832 test(S("abcde"), 4, 2, S("abcdefghij"), 5, 5, -1); 1833 test(S("abcde"), 4, 2, S("abcdefghij"), 5, 6, -1); 1834 test(S("abcde"), 4, 2, S("abcdefghij"), 9, 0, 1); 1835 test(S("abcde"), 4, 2, S("abcdefghij"), 9, 1, -5); 1836 test(S("abcde"), 4, 2, S("abcdefghij"), 9, 2, -5); 1837 test(S("abcde"), 4, 2, S("abcdefghij"), 10, 0, 1); 1838 test(S("abcde"), 4, 2, S("abcdefghij"), 10, 1, 1); 1839 test(S("abcde"), 4, 2, S("abcdefghij"), 11, 0, 0); 1840 test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 0, 0, 1); 1841 test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 0, 1, 4); 1842 test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 0, 10, 4); 1843 test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 0, 19, 4); 1844 test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 0, 20, 4); 1845 test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 0, 21, 4); 1846 test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 1, 0, 1); 1847 test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 1, 1, 3); 1848 test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 1, 9, 3); 1849 test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 1, 18, 3); 1850 test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 1, 19, 3); 1851 test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 1, 20, 3); 1852 test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 10, 0, 1); 1853 test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 10, 1, -6); 1854 test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 10, 5, -6); 1855 test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 10, 9, -6); 1856 test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 10, 10, -6); 1857 test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 10, 11, -6); 1858 test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 19, 0, 1); 1859 test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 19, 1, -15); 1860 test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 19, 2, -15); 1861 test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 20, 0, 1); 1862} 1863 1864template <class S> 1865void test17() 1866{ 1867 test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 20, 1, 1); 1868 test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 21, 0, 0); 1869 test(S("abcde"), 5, 0, S(""), 0, 0, 0); 1870 test(S("abcde"), 5, 0, S(""), 0, 1, 0); 1871 test(S("abcde"), 5, 0, S(""), 1, 0, 0); 1872 test(S("abcde"), 5, 0, S("abcde"), 0, 0, 0); 1873 test(S("abcde"), 5, 0, S("abcde"), 0, 1, -1); 1874 test(S("abcde"), 5, 0, S("abcde"), 0, 2, -2); 1875 test(S("abcde"), 5, 0, S("abcde"), 0, 4, -4); 1876 test(S("abcde"), 5, 0, S("abcde"), 0, 5, -5); 1877 test(S("abcde"), 5, 0, S("abcde"), 0, 6, -5); 1878 test(S("abcde"), 5, 0, S("abcde"), 1, 0, 0); 1879 test(S("abcde"), 5, 0, S("abcde"), 1, 1, -1); 1880 test(S("abcde"), 5, 0, S("abcde"), 1, 2, -2); 1881 test(S("abcde"), 5, 0, S("abcde"), 1, 3, -3); 1882 test(S("abcde"), 5, 0, S("abcde"), 1, 4, -4); 1883 test(S("abcde"), 5, 0, S("abcde"), 1, 5, -4); 1884 test(S("abcde"), 5, 0, S("abcde"), 2, 0, 0); 1885 test(S("abcde"), 5, 0, S("abcde"), 2, 1, -1); 1886 test(S("abcde"), 5, 0, S("abcde"), 2, 2, -2); 1887 test(S("abcde"), 5, 0, S("abcde"), 2, 3, -3); 1888 test(S("abcde"), 5, 0, S("abcde"), 2, 4, -3); 1889 test(S("abcde"), 5, 0, S("abcde"), 4, 0, 0); 1890 test(S("abcde"), 5, 0, S("abcde"), 4, 1, -1); 1891 test(S("abcde"), 5, 0, S("abcde"), 4, 2, -1); 1892 test(S("abcde"), 5, 0, S("abcde"), 5, 0, 0); 1893 test(S("abcde"), 5, 0, S("abcde"), 5, 1, 0); 1894 test(S("abcde"), 5, 0, S("abcde"), 6, 0, 0); 1895 test(S("abcde"), 5, 0, S("abcdefghij"), 0, 0, 0); 1896 test(S("abcde"), 5, 0, S("abcdefghij"), 0, 1, -1); 1897 test(S("abcde"), 5, 0, S("abcdefghij"), 0, 5, -5); 1898 test(S("abcde"), 5, 0, S("abcdefghij"), 0, 9, -9); 1899 test(S("abcde"), 5, 0, S("abcdefghij"), 0, 10, -10); 1900 test(S("abcde"), 5, 0, S("abcdefghij"), 0, 11, -10); 1901 test(S("abcde"), 5, 0, S("abcdefghij"), 1, 0, 0); 1902 test(S("abcde"), 5, 0, S("abcdefghij"), 1, 1, -1); 1903 test(S("abcde"), 5, 0, S("abcdefghij"), 1, 4, -4); 1904 test(S("abcde"), 5, 0, S("abcdefghij"), 1, 8, -8); 1905 test(S("abcde"), 5, 0, S("abcdefghij"), 1, 9, -9); 1906 test(S("abcde"), 5, 0, S("abcdefghij"), 1, 10, -9); 1907 test(S("abcde"), 5, 0, S("abcdefghij"), 5, 0, 0); 1908 test(S("abcde"), 5, 0, S("abcdefghij"), 5, 1, -1); 1909 test(S("abcde"), 5, 0, S("abcdefghij"), 5, 2, -2); 1910 test(S("abcde"), 5, 0, S("abcdefghij"), 5, 4, -4); 1911 test(S("abcde"), 5, 0, S("abcdefghij"), 5, 5, -5); 1912 test(S("abcde"), 5, 0, S("abcdefghij"), 5, 6, -5); 1913 test(S("abcde"), 5, 0, S("abcdefghij"), 9, 0, 0); 1914 test(S("abcde"), 5, 0, S("abcdefghij"), 9, 1, -1); 1915 test(S("abcde"), 5, 0, S("abcdefghij"), 9, 2, -1); 1916 test(S("abcde"), 5, 0, S("abcdefghij"), 10, 0, 0); 1917 test(S("abcde"), 5, 0, S("abcdefghij"), 10, 1, 0); 1918 test(S("abcde"), 5, 0, S("abcdefghij"), 11, 0, 0); 1919 test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 0, 0, 0); 1920 test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 0, 1, -1); 1921 test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 0, 10, -10); 1922 test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 0, 19, -19); 1923 test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 0, 20, -20); 1924 test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 0, 21, -20); 1925 test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 1, 0, 0); 1926 test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 1, 1, -1); 1927 test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 1, 9, -9); 1928 test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 1, 18, -18); 1929 test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 1, 19, -19); 1930 test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 1, 20, -19); 1931 test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 10, 0, 0); 1932 test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 10, 1, -1); 1933 test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 10, 5, -5); 1934 test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 10, 9, -9); 1935 test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 10, 10, -10); 1936 test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 10, 11, -10); 1937 test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 19, 0, 0); 1938 test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 19, 1, -1); 1939 test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 19, 2, -1); 1940 test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 20, 0, 0); 1941 test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 20, 1, 0); 1942 test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 21, 0, 0); 1943 test(S("abcde"), 5, 1, S(""), 0, 0, 0); 1944 test(S("abcde"), 5, 1, S(""), 0, 1, 0); 1945 test(S("abcde"), 5, 1, S(""), 1, 0, 0); 1946 test(S("abcde"), 5, 1, S("abcde"), 0, 0, 0); 1947 test(S("abcde"), 5, 1, S("abcde"), 0, 1, -1); 1948 test(S("abcde"), 5, 1, S("abcde"), 0, 2, -2); 1949 test(S("abcde"), 5, 1, S("abcde"), 0, 4, -4); 1950 test(S("abcde"), 5, 1, S("abcde"), 0, 5, -5); 1951 test(S("abcde"), 5, 1, S("abcde"), 0, 6, -5); 1952 test(S("abcde"), 5, 1, S("abcde"), 1, 0, 0); 1953 test(S("abcde"), 5, 1, S("abcde"), 1, 1, -1); 1954 test(S("abcde"), 5, 1, S("abcde"), 1, 2, -2); 1955 test(S("abcde"), 5, 1, S("abcde"), 1, 3, -3); 1956 test(S("abcde"), 5, 1, S("abcde"), 1, 4, -4); 1957 test(S("abcde"), 5, 1, S("abcde"), 1, 5, -4); 1958 test(S("abcde"), 5, 1, S("abcde"), 2, 0, 0); 1959 test(S("abcde"), 5, 1, S("abcde"), 2, 1, -1); 1960 test(S("abcde"), 5, 1, S("abcde"), 2, 2, -2); 1961 test(S("abcde"), 5, 1, S("abcde"), 2, 3, -3); 1962 test(S("abcde"), 5, 1, S("abcde"), 2, 4, -3); 1963 test(S("abcde"), 5, 1, S("abcde"), 4, 0, 0); 1964 test(S("abcde"), 5, 1, S("abcde"), 4, 1, -1); 1965 test(S("abcde"), 5, 1, S("abcde"), 4, 2, -1); 1966 test(S("abcde"), 5, 1, S("abcde"), 5, 0, 0); 1967} 1968 1969template <class S> 1970void test18() 1971{ 1972 test(S("abcde"), 5, 1, S("abcde"), 5, 1, 0); 1973 test(S("abcde"), 5, 1, S("abcde"), 6, 0, 0); 1974 test(S("abcde"), 5, 1, S("abcdefghij"), 0, 0, 0); 1975 test(S("abcde"), 5, 1, S("abcdefghij"), 0, 1, -1); 1976 test(S("abcde"), 5, 1, S("abcdefghij"), 0, 5, -5); 1977 test(S("abcde"), 5, 1, S("abcdefghij"), 0, 9, -9); 1978 test(S("abcde"), 5, 1, S("abcdefghij"), 0, 10, -10); 1979 test(S("abcde"), 5, 1, S("abcdefghij"), 0, 11, -10); 1980 test(S("abcde"), 5, 1, S("abcdefghij"), 1, 0, 0); 1981 test(S("abcde"), 5, 1, S("abcdefghij"), 1, 1, -1); 1982 test(S("abcde"), 5, 1, S("abcdefghij"), 1, 4, -4); 1983 test(S("abcde"), 5, 1, S("abcdefghij"), 1, 8, -8); 1984 test(S("abcde"), 5, 1, S("abcdefghij"), 1, 9, -9); 1985 test(S("abcde"), 5, 1, S("abcdefghij"), 1, 10, -9); 1986 test(S("abcde"), 5, 1, S("abcdefghij"), 5, 0, 0); 1987 test(S("abcde"), 5, 1, S("abcdefghij"), 5, 1, -1); 1988 test(S("abcde"), 5, 1, S("abcdefghij"), 5, 2, -2); 1989 test(S("abcde"), 5, 1, S("abcdefghij"), 5, 4, -4); 1990 test(S("abcde"), 5, 1, S("abcdefghij"), 5, 5, -5); 1991 test(S("abcde"), 5, 1, S("abcdefghij"), 5, 6, -5); 1992 test(S("abcde"), 5, 1, S("abcdefghij"), 9, 0, 0); 1993 test(S("abcde"), 5, 1, S("abcdefghij"), 9, 1, -1); 1994 test(S("abcde"), 5, 1, S("abcdefghij"), 9, 2, -1); 1995 test(S("abcde"), 5, 1, S("abcdefghij"), 10, 0, 0); 1996 test(S("abcde"), 5, 1, S("abcdefghij"), 10, 1, 0); 1997 test(S("abcde"), 5, 1, S("abcdefghij"), 11, 0, 0); 1998 test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 0, 0, 0); 1999 test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 0, 1, -1); 2000 test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 0, 10, -10); 2001 test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 0, 19, -19); 2002 test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 0, 20, -20); 2003 test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 0, 21, -20); 2004 test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 1, 0, 0); 2005 test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 1, 1, -1); 2006 test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 1, 9, -9); 2007 test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 1, 18, -18); 2008 test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 1, 19, -19); 2009 test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 1, 20, -19); 2010 test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 10, 0, 0); 2011 test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 10, 1, -1); 2012 test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 10, 5, -5); 2013 test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 10, 9, -9); 2014 test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 10, 10, -10); 2015 test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 10, 11, -10); 2016 test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 19, 0, 0); 2017 test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 19, 1, -1); 2018 test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 19, 2, -1); 2019 test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 20, 0, 0); 2020 test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 20, 1, 0); 2021 test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 21, 0, 0); 2022 test(S("abcde"), 6, 0, S(""), 0, 0, 0); 2023 test(S("abcde"), 6, 0, S(""), 0, 1, 0); 2024 test(S("abcde"), 6, 0, S(""), 1, 0, 0); 2025 test(S("abcde"), 6, 0, S("abcde"), 0, 0, 0); 2026 test(S("abcde"), 6, 0, S("abcde"), 0, 1, 0); 2027 test(S("abcde"), 6, 0, S("abcde"), 0, 2, 0); 2028 test(S("abcde"), 6, 0, S("abcde"), 0, 4, 0); 2029 test(S("abcde"), 6, 0, S("abcde"), 0, 5, 0); 2030 test(S("abcde"), 6, 0, S("abcde"), 0, 6, 0); 2031 test(S("abcde"), 6, 0, S("abcde"), 1, 0, 0); 2032 test(S("abcde"), 6, 0, S("abcde"), 1, 1, 0); 2033 test(S("abcde"), 6, 0, S("abcde"), 1, 2, 0); 2034 test(S("abcde"), 6, 0, S("abcde"), 1, 3, 0); 2035 test(S("abcde"), 6, 0, S("abcde"), 1, 4, 0); 2036 test(S("abcde"), 6, 0, S("abcde"), 1, 5, 0); 2037 test(S("abcde"), 6, 0, S("abcde"), 2, 0, 0); 2038 test(S("abcde"), 6, 0, S("abcde"), 2, 1, 0); 2039 test(S("abcde"), 6, 0, S("abcde"), 2, 2, 0); 2040 test(S("abcde"), 6, 0, S("abcde"), 2, 3, 0); 2041 test(S("abcde"), 6, 0, S("abcde"), 2, 4, 0); 2042 test(S("abcde"), 6, 0, S("abcde"), 4, 0, 0); 2043 test(S("abcde"), 6, 0, S("abcde"), 4, 1, 0); 2044 test(S("abcde"), 6, 0, S("abcde"), 4, 2, 0); 2045 test(S("abcde"), 6, 0, S("abcde"), 5, 0, 0); 2046 test(S("abcde"), 6, 0, S("abcde"), 5, 1, 0); 2047 test(S("abcde"), 6, 0, S("abcde"), 6, 0, 0); 2048 test(S("abcde"), 6, 0, S("abcdefghij"), 0, 0, 0); 2049 test(S("abcde"), 6, 0, S("abcdefghij"), 0, 1, 0); 2050 test(S("abcde"), 6, 0, S("abcdefghij"), 0, 5, 0); 2051 test(S("abcde"), 6, 0, S("abcdefghij"), 0, 9, 0); 2052 test(S("abcde"), 6, 0, S("abcdefghij"), 0, 10, 0); 2053 test(S("abcde"), 6, 0, S("abcdefghij"), 0, 11, 0); 2054 test(S("abcde"), 6, 0, S("abcdefghij"), 1, 0, 0); 2055 test(S("abcde"), 6, 0, S("abcdefghij"), 1, 1, 0); 2056 test(S("abcde"), 6, 0, S("abcdefghij"), 1, 4, 0); 2057 test(S("abcde"), 6, 0, S("abcdefghij"), 1, 8, 0); 2058 test(S("abcde"), 6, 0, S("abcdefghij"), 1, 9, 0); 2059 test(S("abcde"), 6, 0, S("abcdefghij"), 1, 10, 0); 2060 test(S("abcde"), 6, 0, S("abcdefghij"), 5, 0, 0); 2061 test(S("abcde"), 6, 0, S("abcdefghij"), 5, 1, 0); 2062 test(S("abcde"), 6, 0, S("abcdefghij"), 5, 2, 0); 2063 test(S("abcde"), 6, 0, S("abcdefghij"), 5, 4, 0); 2064 test(S("abcde"), 6, 0, S("abcdefghij"), 5, 5, 0); 2065 test(S("abcde"), 6, 0, S("abcdefghij"), 5, 6, 0); 2066 test(S("abcde"), 6, 0, S("abcdefghij"), 9, 0, 0); 2067 test(S("abcde"), 6, 0, S("abcdefghij"), 9, 1, 0); 2068 test(S("abcde"), 6, 0, S("abcdefghij"), 9, 2, 0); 2069 test(S("abcde"), 6, 0, S("abcdefghij"), 10, 0, 0); 2070 test(S("abcde"), 6, 0, S("abcdefghij"), 10, 1, 0); 2071 test(S("abcde"), 6, 0, S("abcdefghij"), 11, 0, 0); 2072} 2073 2074template <class S> 2075void test19() 2076{ 2077 test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 0, 0, 0); 2078 test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 0, 1, 0); 2079 test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 0, 10, 0); 2080 test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 0, 19, 0); 2081 test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 0, 20, 0); 2082 test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 0, 21, 0); 2083 test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 1, 0, 0); 2084 test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 1, 1, 0); 2085 test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 1, 9, 0); 2086 test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 1, 18, 0); 2087 test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 1, 19, 0); 2088 test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 1, 20, 0); 2089 test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 10, 0, 0); 2090 test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 10, 1, 0); 2091 test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 10, 5, 0); 2092 test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 10, 9, 0); 2093 test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 10, 10, 0); 2094 test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 10, 11, 0); 2095 test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 19, 0, 0); 2096 test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 19, 1, 0); 2097 test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 19, 2, 0); 2098 test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 20, 0, 0); 2099 test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 20, 1, 0); 2100 test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 21, 0, 0); 2101 test(S("abcdefghij"), 0, 0, S(""), 0, 0, 0); 2102 test(S("abcdefghij"), 0, 0, S(""), 0, 1, 0); 2103 test(S("abcdefghij"), 0, 0, S(""), 1, 0, 0); 2104 test(S("abcdefghij"), 0, 0, S("abcde"), 0, 0, 0); 2105 test(S("abcdefghij"), 0, 0, S("abcde"), 0, 1, -1); 2106 test(S("abcdefghij"), 0, 0, S("abcde"), 0, 2, -2); 2107 test(S("abcdefghij"), 0, 0, S("abcde"), 0, 4, -4); 2108 test(S("abcdefghij"), 0, 0, S("abcde"), 0, 5, -5); 2109 test(S("abcdefghij"), 0, 0, S("abcde"), 0, 6, -5); 2110 test(S("abcdefghij"), 0, 0, S("abcde"), 1, 0, 0); 2111 test(S("abcdefghij"), 0, 0, S("abcde"), 1, 1, -1); 2112 test(S("abcdefghij"), 0, 0, S("abcde"), 1, 2, -2); 2113 test(S("abcdefghij"), 0, 0, S("abcde"), 1, 3, -3); 2114 test(S("abcdefghij"), 0, 0, S("abcde"), 1, 4, -4); 2115 test(S("abcdefghij"), 0, 0, S("abcde"), 1, 5, -4); 2116 test(S("abcdefghij"), 0, 0, S("abcde"), 2, 0, 0); 2117 test(S("abcdefghij"), 0, 0, S("abcde"), 2, 1, -1); 2118 test(S("abcdefghij"), 0, 0, S("abcde"), 2, 2, -2); 2119 test(S("abcdefghij"), 0, 0, S("abcde"), 2, 3, -3); 2120 test(S("abcdefghij"), 0, 0, S("abcde"), 2, 4, -3); 2121 test(S("abcdefghij"), 0, 0, S("abcde"), 4, 0, 0); 2122 test(S("abcdefghij"), 0, 0, S("abcde"), 4, 1, -1); 2123 test(S("abcdefghij"), 0, 0, S("abcde"), 4, 2, -1); 2124 test(S("abcdefghij"), 0, 0, S("abcde"), 5, 0, 0); 2125 test(S("abcdefghij"), 0, 0, S("abcde"), 5, 1, 0); 2126 test(S("abcdefghij"), 0, 0, S("abcde"), 6, 0, 0); 2127 test(S("abcdefghij"), 0, 0, S("abcdefghij"), 0, 0, 0); 2128 test(S("abcdefghij"), 0, 0, S("abcdefghij"), 0, 1, -1); 2129 test(S("abcdefghij"), 0, 0, S("abcdefghij"), 0, 5, -5); 2130 test(S("abcdefghij"), 0, 0, S("abcdefghij"), 0, 9, -9); 2131 test(S("abcdefghij"), 0, 0, S("abcdefghij"), 0, 10, -10); 2132 test(S("abcdefghij"), 0, 0, S("abcdefghij"), 0, 11, -10); 2133 test(S("abcdefghij"), 0, 0, S("abcdefghij"), 1, 0, 0); 2134 test(S("abcdefghij"), 0, 0, S("abcdefghij"), 1, 1, -1); 2135 test(S("abcdefghij"), 0, 0, S("abcdefghij"), 1, 4, -4); 2136 test(S("abcdefghij"), 0, 0, S("abcdefghij"), 1, 8, -8); 2137 test(S("abcdefghij"), 0, 0, S("abcdefghij"), 1, 9, -9); 2138 test(S("abcdefghij"), 0, 0, S("abcdefghij"), 1, 10, -9); 2139 test(S("abcdefghij"), 0, 0, S("abcdefghij"), 5, 0, 0); 2140 test(S("abcdefghij"), 0, 0, S("abcdefghij"), 5, 1, -1); 2141 test(S("abcdefghij"), 0, 0, S("abcdefghij"), 5, 2, -2); 2142 test(S("abcdefghij"), 0, 0, S("abcdefghij"), 5, 4, -4); 2143 test(S("abcdefghij"), 0, 0, S("abcdefghij"), 5, 5, -5); 2144 test(S("abcdefghij"), 0, 0, S("abcdefghij"), 5, 6, -5); 2145 test(S("abcdefghij"), 0, 0, S("abcdefghij"), 9, 0, 0); 2146 test(S("abcdefghij"), 0, 0, S("abcdefghij"), 9, 1, -1); 2147 test(S("abcdefghij"), 0, 0, S("abcdefghij"), 9, 2, -1); 2148 test(S("abcdefghij"), 0, 0, S("abcdefghij"), 10, 0, 0); 2149 test(S("abcdefghij"), 0, 0, S("abcdefghij"), 10, 1, 0); 2150 test(S("abcdefghij"), 0, 0, S("abcdefghij"), 11, 0, 0); 2151 test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 0, 0, 0); 2152 test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 0, 1, -1); 2153 test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 0, 10, -10); 2154 test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 0, 19, -19); 2155 test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 0, 20, -20); 2156 test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 0, 21, -20); 2157 test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 1, 0, 0); 2158 test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 1, 1, -1); 2159 test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 1, 9, -9); 2160 test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 1, 18, -18); 2161 test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 1, 19, -19); 2162 test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 1, 20, -19); 2163 test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 10, 0, 0); 2164 test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 10, 1, -1); 2165 test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 10, 5, -5); 2166 test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 10, 9, -9); 2167 test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 10, 10, -10); 2168 test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 10, 11, -10); 2169 test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 19, 0, 0); 2170 test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 19, 1, -1); 2171 test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 19, 2, -1); 2172 test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 20, 0, 0); 2173 test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 20, 1, 0); 2174 test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 21, 0, 0); 2175 test(S("abcdefghij"), 0, 1, S(""), 0, 0, 1); 2176 test(S("abcdefghij"), 0, 1, S(""), 0, 1, 1); 2177} 2178 2179template <class S> 2180void test20() 2181{ 2182 test(S("abcdefghij"), 0, 1, S(""), 1, 0, 0); 2183 test(S("abcdefghij"), 0, 1, S("abcde"), 0, 0, 1); 2184 test(S("abcdefghij"), 0, 1, S("abcde"), 0, 1, 0); 2185 test(S("abcdefghij"), 0, 1, S("abcde"), 0, 2, -1); 2186 test(S("abcdefghij"), 0, 1, S("abcde"), 0, 4, -3); 2187 test(S("abcdefghij"), 0, 1, S("abcde"), 0, 5, -4); 2188 test(S("abcdefghij"), 0, 1, S("abcde"), 0, 6, -4); 2189 test(S("abcdefghij"), 0, 1, S("abcde"), 1, 0, 1); 2190 test(S("abcdefghij"), 0, 1, S("abcde"), 1, 1, -1); 2191 test(S("abcdefghij"), 0, 1, S("abcde"), 1, 2, -1); 2192 test(S("abcdefghij"), 0, 1, S("abcde"), 1, 3, -1); 2193 test(S("abcdefghij"), 0, 1, S("abcde"), 1, 4, -1); 2194 test(S("abcdefghij"), 0, 1, S("abcde"), 1, 5, -1); 2195 test(S("abcdefghij"), 0, 1, S("abcde"), 2, 0, 1); 2196 test(S("abcdefghij"), 0, 1, S("abcde"), 2, 1, -2); 2197 test(S("abcdefghij"), 0, 1, S("abcde"), 2, 2, -2); 2198 test(S("abcdefghij"), 0, 1, S("abcde"), 2, 3, -2); 2199 test(S("abcdefghij"), 0, 1, S("abcde"), 2, 4, -2); 2200 test(S("abcdefghij"), 0, 1, S("abcde"), 4, 0, 1); 2201 test(S("abcdefghij"), 0, 1, S("abcde"), 4, 1, -4); 2202 test(S("abcdefghij"), 0, 1, S("abcde"), 4, 2, -4); 2203 test(S("abcdefghij"), 0, 1, S("abcde"), 5, 0, 1); 2204 test(S("abcdefghij"), 0, 1, S("abcde"), 5, 1, 1); 2205 test(S("abcdefghij"), 0, 1, S("abcde"), 6, 0, 0); 2206 test(S("abcdefghij"), 0, 1, S("abcdefghij"), 0, 0, 1); 2207 test(S("abcdefghij"), 0, 1, S("abcdefghij"), 0, 1, 0); 2208 test(S("abcdefghij"), 0, 1, S("abcdefghij"), 0, 5, -4); 2209 test(S("abcdefghij"), 0, 1, S("abcdefghij"), 0, 9, -8); 2210 test(S("abcdefghij"), 0, 1, S("abcdefghij"), 0, 10, -9); 2211 test(S("abcdefghij"), 0, 1, S("abcdefghij"), 0, 11, -9); 2212 test(S("abcdefghij"), 0, 1, S("abcdefghij"), 1, 0, 1); 2213 test(S("abcdefghij"), 0, 1, S("abcdefghij"), 1, 1, -1); 2214 test(S("abcdefghij"), 0, 1, S("abcdefghij"), 1, 4, -1); 2215 test(S("abcdefghij"), 0, 1, S("abcdefghij"), 1, 8, -1); 2216 test(S("abcdefghij"), 0, 1, S("abcdefghij"), 1, 9, -1); 2217 test(S("abcdefghij"), 0, 1, S("abcdefghij"), 1, 10, -1); 2218 test(S("abcdefghij"), 0, 1, S("abcdefghij"), 5, 0, 1); 2219 test(S("abcdefghij"), 0, 1, S("abcdefghij"), 5, 1, -5); 2220 test(S("abcdefghij"), 0, 1, S("abcdefghij"), 5, 2, -5); 2221 test(S("abcdefghij"), 0, 1, S("abcdefghij"), 5, 4, -5); 2222 test(S("abcdefghij"), 0, 1, S("abcdefghij"), 5, 5, -5); 2223 test(S("abcdefghij"), 0, 1, S("abcdefghij"), 5, 6, -5); 2224 test(S("abcdefghij"), 0, 1, S("abcdefghij"), 9, 0, 1); 2225 test(S("abcdefghij"), 0, 1, S("abcdefghij"), 9, 1, -9); 2226 test(S("abcdefghij"), 0, 1, S("abcdefghij"), 9, 2, -9); 2227 test(S("abcdefghij"), 0, 1, S("abcdefghij"), 10, 0, 1); 2228 test(S("abcdefghij"), 0, 1, S("abcdefghij"), 10, 1, 1); 2229 test(S("abcdefghij"), 0, 1, S("abcdefghij"), 11, 0, 0); 2230 test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 0, 0, 1); 2231 test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 0, 1, 0); 2232 test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 0, 10, -9); 2233 test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 0, 19, -18); 2234 test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 0, 20, -19); 2235 test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 0, 21, -19); 2236 test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 1, 0, 1); 2237 test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 1, 1, -1); 2238 test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 1, 9, -1); 2239 test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 1, 18, -1); 2240 test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 1, 19, -1); 2241 test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 1, 20, -1); 2242 test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 10, 0, 1); 2243 test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 10, 1, -10); 2244 test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 10, 5, -10); 2245 test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 10, 9, -10); 2246 test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 10, 10, -10); 2247 test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 10, 11, -10); 2248 test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 19, 0, 1); 2249 test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 19, 1, -19); 2250 test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 19, 2, -19); 2251 test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 20, 0, 1); 2252 test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 20, 1, 1); 2253 test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 21, 0, 0); 2254 test(S("abcdefghij"), 0, 5, S(""), 0, 0, 5); 2255 test(S("abcdefghij"), 0, 5, S(""), 0, 1, 5); 2256 test(S("abcdefghij"), 0, 5, S(""), 1, 0, 0); 2257 test(S("abcdefghij"), 0, 5, S("abcde"), 0, 0, 5); 2258 test(S("abcdefghij"), 0, 5, S("abcde"), 0, 1, 4); 2259 test(S("abcdefghij"), 0, 5, S("abcde"), 0, 2, 3); 2260 test(S("abcdefghij"), 0, 5, S("abcde"), 0, 4, 1); 2261 test(S("abcdefghij"), 0, 5, S("abcde"), 0, 5, 0); 2262 test(S("abcdefghij"), 0, 5, S("abcde"), 0, 6, 0); 2263 test(S("abcdefghij"), 0, 5, S("abcde"), 1, 0, 5); 2264 test(S("abcdefghij"), 0, 5, S("abcde"), 1, 1, -1); 2265 test(S("abcdefghij"), 0, 5, S("abcde"), 1, 2, -1); 2266 test(S("abcdefghij"), 0, 5, S("abcde"), 1, 3, -1); 2267 test(S("abcdefghij"), 0, 5, S("abcde"), 1, 4, -1); 2268 test(S("abcdefghij"), 0, 5, S("abcde"), 1, 5, -1); 2269 test(S("abcdefghij"), 0, 5, S("abcde"), 2, 0, 5); 2270 test(S("abcdefghij"), 0, 5, S("abcde"), 2, 1, -2); 2271 test(S("abcdefghij"), 0, 5, S("abcde"), 2, 2, -2); 2272 test(S("abcdefghij"), 0, 5, S("abcde"), 2, 3, -2); 2273 test(S("abcdefghij"), 0, 5, S("abcde"), 2, 4, -2); 2274 test(S("abcdefghij"), 0, 5, S("abcde"), 4, 0, 5); 2275 test(S("abcdefghij"), 0, 5, S("abcde"), 4, 1, -4); 2276 test(S("abcdefghij"), 0, 5, S("abcde"), 4, 2, -4); 2277 test(S("abcdefghij"), 0, 5, S("abcde"), 5, 0, 5); 2278 test(S("abcdefghij"), 0, 5, S("abcde"), 5, 1, 5); 2279 test(S("abcdefghij"), 0, 5, S("abcde"), 6, 0, 0); 2280 test(S("abcdefghij"), 0, 5, S("abcdefghij"), 0, 0, 5); 2281 test(S("abcdefghij"), 0, 5, S("abcdefghij"), 0, 1, 4); 2282} 2283 2284template <class S> 2285void test21() 2286{ 2287 test(S("abcdefghij"), 0, 5, S("abcdefghij"), 0, 5, 0); 2288 test(S("abcdefghij"), 0, 5, S("abcdefghij"), 0, 9, -4); 2289 test(S("abcdefghij"), 0, 5, S("abcdefghij"), 0, 10, -5); 2290 test(S("abcdefghij"), 0, 5, S("abcdefghij"), 0, 11, -5); 2291 test(S("abcdefghij"), 0, 5, S("abcdefghij"), 1, 0, 5); 2292 test(S("abcdefghij"), 0, 5, S("abcdefghij"), 1, 1, -1); 2293 test(S("abcdefghij"), 0, 5, S("abcdefghij"), 1, 4, -1); 2294 test(S("abcdefghij"), 0, 5, S("abcdefghij"), 1, 8, -1); 2295 test(S("abcdefghij"), 0, 5, S("abcdefghij"), 1, 9, -1); 2296 test(S("abcdefghij"), 0, 5, S("abcdefghij"), 1, 10, -1); 2297 test(S("abcdefghij"), 0, 5, S("abcdefghij"), 5, 0, 5); 2298 test(S("abcdefghij"), 0, 5, S("abcdefghij"), 5, 1, -5); 2299 test(S("abcdefghij"), 0, 5, S("abcdefghij"), 5, 2, -5); 2300 test(S("abcdefghij"), 0, 5, S("abcdefghij"), 5, 4, -5); 2301 test(S("abcdefghij"), 0, 5, S("abcdefghij"), 5, 5, -5); 2302 test(S("abcdefghij"), 0, 5, S("abcdefghij"), 5, 6, -5); 2303 test(S("abcdefghij"), 0, 5, S("abcdefghij"), 9, 0, 5); 2304 test(S("abcdefghij"), 0, 5, S("abcdefghij"), 9, 1, -9); 2305 test(S("abcdefghij"), 0, 5, S("abcdefghij"), 9, 2, -9); 2306 test(S("abcdefghij"), 0, 5, S("abcdefghij"), 10, 0, 5); 2307 test(S("abcdefghij"), 0, 5, S("abcdefghij"), 10, 1, 5); 2308 test(S("abcdefghij"), 0, 5, S("abcdefghij"), 11, 0, 0); 2309 test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 0, 0, 5); 2310 test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 0, 1, 4); 2311 test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 0, 10, -5); 2312 test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 0, 19, -14); 2313 test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 0, 20, -15); 2314 test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 0, 21, -15); 2315 test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 1, 0, 5); 2316 test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 1, 1, -1); 2317 test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 1, 9, -1); 2318 test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 1, 18, -1); 2319 test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 1, 19, -1); 2320 test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 1, 20, -1); 2321 test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 10, 0, 5); 2322 test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 10, 1, -10); 2323 test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 10, 5, -10); 2324 test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 10, 9, -10); 2325 test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 10, 10, -10); 2326 test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 10, 11, -10); 2327 test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 19, 0, 5); 2328 test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 19, 1, -19); 2329 test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 19, 2, -19); 2330 test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 20, 0, 5); 2331 test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 20, 1, 5); 2332 test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 21, 0, 0); 2333 test(S("abcdefghij"), 0, 9, S(""), 0, 0, 9); 2334 test(S("abcdefghij"), 0, 9, S(""), 0, 1, 9); 2335 test(S("abcdefghij"), 0, 9, S(""), 1, 0, 0); 2336 test(S("abcdefghij"), 0, 9, S("abcde"), 0, 0, 9); 2337 test(S("abcdefghij"), 0, 9, S("abcde"), 0, 1, 8); 2338 test(S("abcdefghij"), 0, 9, S("abcde"), 0, 2, 7); 2339 test(S("abcdefghij"), 0, 9, S("abcde"), 0, 4, 5); 2340 test(S("abcdefghij"), 0, 9, S("abcde"), 0, 5, 4); 2341 test(S("abcdefghij"), 0, 9, S("abcde"), 0, 6, 4); 2342 test(S("abcdefghij"), 0, 9, S("abcde"), 1, 0, 9); 2343 test(S("abcdefghij"), 0, 9, S("abcde"), 1, 1, -1); 2344 test(S("abcdefghij"), 0, 9, S("abcde"), 1, 2, -1); 2345 test(S("abcdefghij"), 0, 9, S("abcde"), 1, 3, -1); 2346 test(S("abcdefghij"), 0, 9, S("abcde"), 1, 4, -1); 2347 test(S("abcdefghij"), 0, 9, S("abcde"), 1, 5, -1); 2348 test(S("abcdefghij"), 0, 9, S("abcde"), 2, 0, 9); 2349 test(S("abcdefghij"), 0, 9, S("abcde"), 2, 1, -2); 2350 test(S("abcdefghij"), 0, 9, S("abcde"), 2, 2, -2); 2351 test(S("abcdefghij"), 0, 9, S("abcde"), 2, 3, -2); 2352 test(S("abcdefghij"), 0, 9, S("abcde"), 2, 4, -2); 2353 test(S("abcdefghij"), 0, 9, S("abcde"), 4, 0, 9); 2354 test(S("abcdefghij"), 0, 9, S("abcde"), 4, 1, -4); 2355 test(S("abcdefghij"), 0, 9, S("abcde"), 4, 2, -4); 2356 test(S("abcdefghij"), 0, 9, S("abcde"), 5, 0, 9); 2357 test(S("abcdefghij"), 0, 9, S("abcde"), 5, 1, 9); 2358 test(S("abcdefghij"), 0, 9, S("abcde"), 6, 0, 0); 2359 test(S("abcdefghij"), 0, 9, S("abcdefghij"), 0, 0, 9); 2360 test(S("abcdefghij"), 0, 9, S("abcdefghij"), 0, 1, 8); 2361 test(S("abcdefghij"), 0, 9, S("abcdefghij"), 0, 5, 4); 2362 test(S("abcdefghij"), 0, 9, S("abcdefghij"), 0, 9, 0); 2363 test(S("abcdefghij"), 0, 9, S("abcdefghij"), 0, 10, -1); 2364 test(S("abcdefghij"), 0, 9, S("abcdefghij"), 0, 11, -1); 2365 test(S("abcdefghij"), 0, 9, S("abcdefghij"), 1, 0, 9); 2366 test(S("abcdefghij"), 0, 9, S("abcdefghij"), 1, 1, -1); 2367 test(S("abcdefghij"), 0, 9, S("abcdefghij"), 1, 4, -1); 2368 test(S("abcdefghij"), 0, 9, S("abcdefghij"), 1, 8, -1); 2369 test(S("abcdefghij"), 0, 9, S("abcdefghij"), 1, 9, -1); 2370 test(S("abcdefghij"), 0, 9, S("abcdefghij"), 1, 10, -1); 2371 test(S("abcdefghij"), 0, 9, S("abcdefghij"), 5, 0, 9); 2372 test(S("abcdefghij"), 0, 9, S("abcdefghij"), 5, 1, -5); 2373 test(S("abcdefghij"), 0, 9, S("abcdefghij"), 5, 2, -5); 2374 test(S("abcdefghij"), 0, 9, S("abcdefghij"), 5, 4, -5); 2375 test(S("abcdefghij"), 0, 9, S("abcdefghij"), 5, 5, -5); 2376 test(S("abcdefghij"), 0, 9, S("abcdefghij"), 5, 6, -5); 2377 test(S("abcdefghij"), 0, 9, S("abcdefghij"), 9, 0, 9); 2378 test(S("abcdefghij"), 0, 9, S("abcdefghij"), 9, 1, -9); 2379 test(S("abcdefghij"), 0, 9, S("abcdefghij"), 9, 2, -9); 2380 test(S("abcdefghij"), 0, 9, S("abcdefghij"), 10, 0, 9); 2381 test(S("abcdefghij"), 0, 9, S("abcdefghij"), 10, 1, 9); 2382 test(S("abcdefghij"), 0, 9, S("abcdefghij"), 11, 0, 0); 2383 test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 0, 0, 9); 2384 test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 0, 1, 8); 2385 test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 0, 10, -1); 2386 test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 0, 19, -10); 2387} 2388 2389template <class S> 2390void test22() 2391{ 2392 test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 0, 20, -11); 2393 test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 0, 21, -11); 2394 test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 1, 0, 9); 2395 test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 1, 1, -1); 2396 test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 1, 9, -1); 2397 test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 1, 18, -1); 2398 test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 1, 19, -1); 2399 test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 1, 20, -1); 2400 test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 10, 0, 9); 2401 test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 10, 1, -10); 2402 test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 10, 5, -10); 2403 test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 10, 9, -10); 2404 test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 10, 10, -10); 2405 test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 10, 11, -10); 2406 test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 19, 0, 9); 2407 test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 19, 1, -19); 2408 test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 19, 2, -19); 2409 test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 20, 0, 9); 2410 test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 20, 1, 9); 2411 test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 21, 0, 0); 2412 test(S("abcdefghij"), 0, 10, S(""), 0, 0, 10); 2413 test(S("abcdefghij"), 0, 10, S(""), 0, 1, 10); 2414 test(S("abcdefghij"), 0, 10, S(""), 1, 0, 0); 2415 test(S("abcdefghij"), 0, 10, S("abcde"), 0, 0, 10); 2416 test(S("abcdefghij"), 0, 10, S("abcde"), 0, 1, 9); 2417 test(S("abcdefghij"), 0, 10, S("abcde"), 0, 2, 8); 2418 test(S("abcdefghij"), 0, 10, S("abcde"), 0, 4, 6); 2419 test(S("abcdefghij"), 0, 10, S("abcde"), 0, 5, 5); 2420 test(S("abcdefghij"), 0, 10, S("abcde"), 0, 6, 5); 2421 test(S("abcdefghij"), 0, 10, S("abcde"), 1, 0, 10); 2422 test(S("abcdefghij"), 0, 10, S("abcde"), 1, 1, -1); 2423 test(S("abcdefghij"), 0, 10, S("abcde"), 1, 2, -1); 2424 test(S("abcdefghij"), 0, 10, S("abcde"), 1, 3, -1); 2425 test(S("abcdefghij"), 0, 10, S("abcde"), 1, 4, -1); 2426 test(S("abcdefghij"), 0, 10, S("abcde"), 1, 5, -1); 2427 test(S("abcdefghij"), 0, 10, S("abcde"), 2, 0, 10); 2428 test(S("abcdefghij"), 0, 10, S("abcde"), 2, 1, -2); 2429 test(S("abcdefghij"), 0, 10, S("abcde"), 2, 2, -2); 2430 test(S("abcdefghij"), 0, 10, S("abcde"), 2, 3, -2); 2431 test(S("abcdefghij"), 0, 10, S("abcde"), 2, 4, -2); 2432 test(S("abcdefghij"), 0, 10, S("abcde"), 4, 0, 10); 2433 test(S("abcdefghij"), 0, 10, S("abcde"), 4, 1, -4); 2434 test(S("abcdefghij"), 0, 10, S("abcde"), 4, 2, -4); 2435 test(S("abcdefghij"), 0, 10, S("abcde"), 5, 0, 10); 2436 test(S("abcdefghij"), 0, 10, S("abcde"), 5, 1, 10); 2437 test(S("abcdefghij"), 0, 10, S("abcde"), 6, 0, 0); 2438 test(S("abcdefghij"), 0, 10, S("abcdefghij"), 0, 0, 10); 2439 test(S("abcdefghij"), 0, 10, S("abcdefghij"), 0, 1, 9); 2440 test(S("abcdefghij"), 0, 10, S("abcdefghij"), 0, 5, 5); 2441 test(S("abcdefghij"), 0, 10, S("abcdefghij"), 0, 9, 1); 2442 test(S("abcdefghij"), 0, 10, S("abcdefghij"), 0, 10, 0); 2443 test(S("abcdefghij"), 0, 10, S("abcdefghij"), 0, 11, 0); 2444 test(S("abcdefghij"), 0, 10, S("abcdefghij"), 1, 0, 10); 2445 test(S("abcdefghij"), 0, 10, S("abcdefghij"), 1, 1, -1); 2446 test(S("abcdefghij"), 0, 10, S("abcdefghij"), 1, 4, -1); 2447 test(S("abcdefghij"), 0, 10, S("abcdefghij"), 1, 8, -1); 2448 test(S("abcdefghij"), 0, 10, S("abcdefghij"), 1, 9, -1); 2449 test(S("abcdefghij"), 0, 10, S("abcdefghij"), 1, 10, -1); 2450 test(S("abcdefghij"), 0, 10, S("abcdefghij"), 5, 0, 10); 2451 test(S("abcdefghij"), 0, 10, S("abcdefghij"), 5, 1, -5); 2452 test(S("abcdefghij"), 0, 10, S("abcdefghij"), 5, 2, -5); 2453 test(S("abcdefghij"), 0, 10, S("abcdefghij"), 5, 4, -5); 2454 test(S("abcdefghij"), 0, 10, S("abcdefghij"), 5, 5, -5); 2455 test(S("abcdefghij"), 0, 10, S("abcdefghij"), 5, 6, -5); 2456 test(S("abcdefghij"), 0, 10, S("abcdefghij"), 9, 0, 10); 2457 test(S("abcdefghij"), 0, 10, S("abcdefghij"), 9, 1, -9); 2458 test(S("abcdefghij"), 0, 10, S("abcdefghij"), 9, 2, -9); 2459 test(S("abcdefghij"), 0, 10, S("abcdefghij"), 10, 0, 10); 2460 test(S("abcdefghij"), 0, 10, S("abcdefghij"), 10, 1, 10); 2461 test(S("abcdefghij"), 0, 10, S("abcdefghij"), 11, 0, 0); 2462 test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 0, 0, 10); 2463 test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 0, 1, 9); 2464 test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 0, 10, 0); 2465 test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 0, 19, -9); 2466 test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 0, 20, -10); 2467 test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 0, 21, -10); 2468 test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 1, 0, 10); 2469 test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 1, 1, -1); 2470 test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 1, 9, -1); 2471 test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 1, 18, -1); 2472 test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 1, 19, -1); 2473 test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 1, 20, -1); 2474 test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 10, 0, 10); 2475 test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 10, 1, -10); 2476 test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 10, 5, -10); 2477 test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 10, 9, -10); 2478 test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 10, 10, -10); 2479 test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 10, 11, -10); 2480 test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 19, 0, 10); 2481 test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 19, 1, -19); 2482 test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 19, 2, -19); 2483 test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 20, 0, 10); 2484 test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 20, 1, 10); 2485 test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 21, 0, 0); 2486 test(S("abcdefghij"), 0, 11, S(""), 0, 0, 10); 2487 test(S("abcdefghij"), 0, 11, S(""), 0, 1, 10); 2488 test(S("abcdefghij"), 0, 11, S(""), 1, 0, 0); 2489 test(S("abcdefghij"), 0, 11, S("abcde"), 0, 0, 10); 2490 test(S("abcdefghij"), 0, 11, S("abcde"), 0, 1, 9); 2491 test(S("abcdefghij"), 0, 11, S("abcde"), 0, 2, 8); 2492} 2493 2494template <class S> 2495void test23() 2496{ 2497 test(S("abcdefghij"), 0, 11, S("abcde"), 0, 4, 6); 2498 test(S("abcdefghij"), 0, 11, S("abcde"), 0, 5, 5); 2499 test(S("abcdefghij"), 0, 11, S("abcde"), 0, 6, 5); 2500 test(S("abcdefghij"), 0, 11, S("abcde"), 1, 0, 10); 2501 test(S("abcdefghij"), 0, 11, S("abcde"), 1, 1, -1); 2502 test(S("abcdefghij"), 0, 11, S("abcde"), 1, 2, -1); 2503 test(S("abcdefghij"), 0, 11, S("abcde"), 1, 3, -1); 2504 test(S("abcdefghij"), 0, 11, S("abcde"), 1, 4, -1); 2505 test(S("abcdefghij"), 0, 11, S("abcde"), 1, 5, -1); 2506 test(S("abcdefghij"), 0, 11, S("abcde"), 2, 0, 10); 2507 test(S("abcdefghij"), 0, 11, S("abcde"), 2, 1, -2); 2508 test(S("abcdefghij"), 0, 11, S("abcde"), 2, 2, -2); 2509 test(S("abcdefghij"), 0, 11, S("abcde"), 2, 3, -2); 2510 test(S("abcdefghij"), 0, 11, S("abcde"), 2, 4, -2); 2511 test(S("abcdefghij"), 0, 11, S("abcde"), 4, 0, 10); 2512 test(S("abcdefghij"), 0, 11, S("abcde"), 4, 1, -4); 2513 test(S("abcdefghij"), 0, 11, S("abcde"), 4, 2, -4); 2514 test(S("abcdefghij"), 0, 11, S("abcde"), 5, 0, 10); 2515 test(S("abcdefghij"), 0, 11, S("abcde"), 5, 1, 10); 2516 test(S("abcdefghij"), 0, 11, S("abcde"), 6, 0, 0); 2517 test(S("abcdefghij"), 0, 11, S("abcdefghij"), 0, 0, 10); 2518 test(S("abcdefghij"), 0, 11, S("abcdefghij"), 0, 1, 9); 2519 test(S("abcdefghij"), 0, 11, S("abcdefghij"), 0, 5, 5); 2520 test(S("abcdefghij"), 0, 11, S("abcdefghij"), 0, 9, 1); 2521 test(S("abcdefghij"), 0, 11, S("abcdefghij"), 0, 10, 0); 2522 test(S("abcdefghij"), 0, 11, S("abcdefghij"), 0, 11, 0); 2523 test(S("abcdefghij"), 0, 11, S("abcdefghij"), 1, 0, 10); 2524 test(S("abcdefghij"), 0, 11, S("abcdefghij"), 1, 1, -1); 2525 test(S("abcdefghij"), 0, 11, S("abcdefghij"), 1, 4, -1); 2526 test(S("abcdefghij"), 0, 11, S("abcdefghij"), 1, 8, -1); 2527 test(S("abcdefghij"), 0, 11, S("abcdefghij"), 1, 9, -1); 2528 test(S("abcdefghij"), 0, 11, S("abcdefghij"), 1, 10, -1); 2529 test(S("abcdefghij"), 0, 11, S("abcdefghij"), 5, 0, 10); 2530 test(S("abcdefghij"), 0, 11, S("abcdefghij"), 5, 1, -5); 2531 test(S("abcdefghij"), 0, 11, S("abcdefghij"), 5, 2, -5); 2532 test(S("abcdefghij"), 0, 11, S("abcdefghij"), 5, 4, -5); 2533 test(S("abcdefghij"), 0, 11, S("abcdefghij"), 5, 5, -5); 2534 test(S("abcdefghij"), 0, 11, S("abcdefghij"), 5, 6, -5); 2535 test(S("abcdefghij"), 0, 11, S("abcdefghij"), 9, 0, 10); 2536 test(S("abcdefghij"), 0, 11, S("abcdefghij"), 9, 1, -9); 2537 test(S("abcdefghij"), 0, 11, S("abcdefghij"), 9, 2, -9); 2538 test(S("abcdefghij"), 0, 11, S("abcdefghij"), 10, 0, 10); 2539 test(S("abcdefghij"), 0, 11, S("abcdefghij"), 10, 1, 10); 2540 test(S("abcdefghij"), 0, 11, S("abcdefghij"), 11, 0, 0); 2541 test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 0, 0, 10); 2542 test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 0, 1, 9); 2543 test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 0, 10, 0); 2544 test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 0, 19, -9); 2545 test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 0, 20, -10); 2546 test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 0, 21, -10); 2547 test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 1, 0, 10); 2548 test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 1, 1, -1); 2549 test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 1, 9, -1); 2550 test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 1, 18, -1); 2551 test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 1, 19, -1); 2552 test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 1, 20, -1); 2553 test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 10, 0, 10); 2554 test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 10, 1, -10); 2555 test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 10, 5, -10); 2556 test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 10, 9, -10); 2557 test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 10, 10, -10); 2558 test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 10, 11, -10); 2559 test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 19, 0, 10); 2560 test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 19, 1, -19); 2561 test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 19, 2, -19); 2562 test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 20, 0, 10); 2563 test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 20, 1, 10); 2564 test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 21, 0, 0); 2565 test(S("abcdefghij"), 1, 0, S(""), 0, 0, 0); 2566 test(S("abcdefghij"), 1, 0, S(""), 0, 1, 0); 2567 test(S("abcdefghij"), 1, 0, S(""), 1, 0, 0); 2568 test(S("abcdefghij"), 1, 0, S("abcde"), 0, 0, 0); 2569 test(S("abcdefghij"), 1, 0, S("abcde"), 0, 1, -1); 2570 test(S("abcdefghij"), 1, 0, S("abcde"), 0, 2, -2); 2571 test(S("abcdefghij"), 1, 0, S("abcde"), 0, 4, -4); 2572 test(S("abcdefghij"), 1, 0, S("abcde"), 0, 5, -5); 2573 test(S("abcdefghij"), 1, 0, S("abcde"), 0, 6, -5); 2574 test(S("abcdefghij"), 1, 0, S("abcde"), 1, 0, 0); 2575 test(S("abcdefghij"), 1, 0, S("abcde"), 1, 1, -1); 2576 test(S("abcdefghij"), 1, 0, S("abcde"), 1, 2, -2); 2577 test(S("abcdefghij"), 1, 0, S("abcde"), 1, 3, -3); 2578 test(S("abcdefghij"), 1, 0, S("abcde"), 1, 4, -4); 2579 test(S("abcdefghij"), 1, 0, S("abcde"), 1, 5, -4); 2580 test(S("abcdefghij"), 1, 0, S("abcde"), 2, 0, 0); 2581 test(S("abcdefghij"), 1, 0, S("abcde"), 2, 1, -1); 2582 test(S("abcdefghij"), 1, 0, S("abcde"), 2, 2, -2); 2583 test(S("abcdefghij"), 1, 0, S("abcde"), 2, 3, -3); 2584 test(S("abcdefghij"), 1, 0, S("abcde"), 2, 4, -3); 2585 test(S("abcdefghij"), 1, 0, S("abcde"), 4, 0, 0); 2586 test(S("abcdefghij"), 1, 0, S("abcde"), 4, 1, -1); 2587 test(S("abcdefghij"), 1, 0, S("abcde"), 4, 2, -1); 2588 test(S("abcdefghij"), 1, 0, S("abcde"), 5, 0, 0); 2589 test(S("abcdefghij"), 1, 0, S("abcde"), 5, 1, 0); 2590 test(S("abcdefghij"), 1, 0, S("abcde"), 6, 0, 0); 2591 test(S("abcdefghij"), 1, 0, S("abcdefghij"), 0, 0, 0); 2592 test(S("abcdefghij"), 1, 0, S("abcdefghij"), 0, 1, -1); 2593 test(S("abcdefghij"), 1, 0, S("abcdefghij"), 0, 5, -5); 2594 test(S("abcdefghij"), 1, 0, S("abcdefghij"), 0, 9, -9); 2595 test(S("abcdefghij"), 1, 0, S("abcdefghij"), 0, 10, -10); 2596 test(S("abcdefghij"), 1, 0, S("abcdefghij"), 0, 11, -10); 2597} 2598 2599template <class S> 2600void test24() 2601{ 2602 test(S("abcdefghij"), 1, 0, S("abcdefghij"), 1, 0, 0); 2603 test(S("abcdefghij"), 1, 0, S("abcdefghij"), 1, 1, -1); 2604 test(S("abcdefghij"), 1, 0, S("abcdefghij"), 1, 4, -4); 2605 test(S("abcdefghij"), 1, 0, S("abcdefghij"), 1, 8, -8); 2606 test(S("abcdefghij"), 1, 0, S("abcdefghij"), 1, 9, -9); 2607 test(S("abcdefghij"), 1, 0, S("abcdefghij"), 1, 10, -9); 2608 test(S("abcdefghij"), 1, 0, S("abcdefghij"), 5, 0, 0); 2609 test(S("abcdefghij"), 1, 0, S("abcdefghij"), 5, 1, -1); 2610 test(S("abcdefghij"), 1, 0, S("abcdefghij"), 5, 2, -2); 2611 test(S("abcdefghij"), 1, 0, S("abcdefghij"), 5, 4, -4); 2612 test(S("abcdefghij"), 1, 0, S("abcdefghij"), 5, 5, -5); 2613 test(S("abcdefghij"), 1, 0, S("abcdefghij"), 5, 6, -5); 2614 test(S("abcdefghij"), 1, 0, S("abcdefghij"), 9, 0, 0); 2615 test(S("abcdefghij"), 1, 0, S("abcdefghij"), 9, 1, -1); 2616 test(S("abcdefghij"), 1, 0, S("abcdefghij"), 9, 2, -1); 2617 test(S("abcdefghij"), 1, 0, S("abcdefghij"), 10, 0, 0); 2618 test(S("abcdefghij"), 1, 0, S("abcdefghij"), 10, 1, 0); 2619 test(S("abcdefghij"), 1, 0, S("abcdefghij"), 11, 0, 0); 2620 test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 0, 0, 0); 2621 test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 0, 1, -1); 2622 test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 0, 10, -10); 2623 test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 0, 19, -19); 2624 test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 0, 20, -20); 2625 test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 0, 21, -20); 2626 test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 1, 0, 0); 2627 test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 1, 1, -1); 2628 test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 1, 9, -9); 2629 test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 1, 18, -18); 2630 test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 1, 19, -19); 2631 test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 1, 20, -19); 2632 test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 10, 0, 0); 2633 test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 10, 1, -1); 2634 test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 10, 5, -5); 2635 test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 10, 9, -9); 2636 test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 10, 10, -10); 2637 test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 10, 11, -10); 2638 test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 19, 0, 0); 2639 test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 19, 1, -1); 2640 test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 19, 2, -1); 2641 test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 20, 0, 0); 2642 test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 20, 1, 0); 2643 test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 21, 0, 0); 2644 test(S("abcdefghij"), 1, 1, S(""), 0, 0, 1); 2645 test(S("abcdefghij"), 1, 1, S(""), 0, 1, 1); 2646 test(S("abcdefghij"), 1, 1, S(""), 1, 0, 0); 2647 test(S("abcdefghij"), 1, 1, S("abcde"), 0, 0, 1); 2648 test(S("abcdefghij"), 1, 1, S("abcde"), 0, 1, 1); 2649 test(S("abcdefghij"), 1, 1, S("abcde"), 0, 2, 1); 2650 test(S("abcdefghij"), 1, 1, S("abcde"), 0, 4, 1); 2651 test(S("abcdefghij"), 1, 1, S("abcde"), 0, 5, 1); 2652 test(S("abcdefghij"), 1, 1, S("abcde"), 0, 6, 1); 2653 test(S("abcdefghij"), 1, 1, S("abcde"), 1, 0, 1); 2654 test(S("abcdefghij"), 1, 1, S("abcde"), 1, 1, 0); 2655 test(S("abcdefghij"), 1, 1, S("abcde"), 1, 2, -1); 2656 test(S("abcdefghij"), 1, 1, S("abcde"), 1, 3, -2); 2657 test(S("abcdefghij"), 1, 1, S("abcde"), 1, 4, -3); 2658 test(S("abcdefghij"), 1, 1, S("abcde"), 1, 5, -3); 2659 test(S("abcdefghij"), 1, 1, S("abcde"), 2, 0, 1); 2660 test(S("abcdefghij"), 1, 1, S("abcde"), 2, 1, -1); 2661 test(S("abcdefghij"), 1, 1, S("abcde"), 2, 2, -1); 2662 test(S("abcdefghij"), 1, 1, S("abcde"), 2, 3, -1); 2663 test(S("abcdefghij"), 1, 1, S("abcde"), 2, 4, -1); 2664 test(S("abcdefghij"), 1, 1, S("abcde"), 4, 0, 1); 2665 test(S("abcdefghij"), 1, 1, S("abcde"), 4, 1, -3); 2666 test(S("abcdefghij"), 1, 1, S("abcde"), 4, 2, -3); 2667 test(S("abcdefghij"), 1, 1, S("abcde"), 5, 0, 1); 2668 test(S("abcdefghij"), 1, 1, S("abcde"), 5, 1, 1); 2669 test(S("abcdefghij"), 1, 1, S("abcde"), 6, 0, 0); 2670 test(S("abcdefghij"), 1, 1, S("abcdefghij"), 0, 0, 1); 2671 test(S("abcdefghij"), 1, 1, S("abcdefghij"), 0, 1, 1); 2672 test(S("abcdefghij"), 1, 1, S("abcdefghij"), 0, 5, 1); 2673 test(S("abcdefghij"), 1, 1, S("abcdefghij"), 0, 9, 1); 2674 test(S("abcdefghij"), 1, 1, S("abcdefghij"), 0, 10, 1); 2675 test(S("abcdefghij"), 1, 1, S("abcdefghij"), 0, 11, 1); 2676 test(S("abcdefghij"), 1, 1, S("abcdefghij"), 1, 0, 1); 2677 test(S("abcdefghij"), 1, 1, S("abcdefghij"), 1, 1, 0); 2678 test(S("abcdefghij"), 1, 1, S("abcdefghij"), 1, 4, -3); 2679 test(S("abcdefghij"), 1, 1, S("abcdefghij"), 1, 8, -7); 2680 test(S("abcdefghij"), 1, 1, S("abcdefghij"), 1, 9, -8); 2681 test(S("abcdefghij"), 1, 1, S("abcdefghij"), 1, 10, -8); 2682 test(S("abcdefghij"), 1, 1, S("abcdefghij"), 5, 0, 1); 2683 test(S("abcdefghij"), 1, 1, S("abcdefghij"), 5, 1, -4); 2684 test(S("abcdefghij"), 1, 1, S("abcdefghij"), 5, 2, -4); 2685 test(S("abcdefghij"), 1, 1, S("abcdefghij"), 5, 4, -4); 2686 test(S("abcdefghij"), 1, 1, S("abcdefghij"), 5, 5, -4); 2687 test(S("abcdefghij"), 1, 1, S("abcdefghij"), 5, 6, -4); 2688 test(S("abcdefghij"), 1, 1, S("abcdefghij"), 9, 0, 1); 2689 test(S("abcdefghij"), 1, 1, S("abcdefghij"), 9, 1, -8); 2690 test(S("abcdefghij"), 1, 1, S("abcdefghij"), 9, 2, -8); 2691 test(S("abcdefghij"), 1, 1, S("abcdefghij"), 10, 0, 1); 2692 test(S("abcdefghij"), 1, 1, S("abcdefghij"), 10, 1, 1); 2693 test(S("abcdefghij"), 1, 1, S("abcdefghij"), 11, 0, 0); 2694 test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 0, 0, 1); 2695 test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 0, 1, 1); 2696 test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 0, 10, 1); 2697 test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 0, 19, 1); 2698 test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 0, 20, 1); 2699 test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 0, 21, 1); 2700 test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 1, 0, 1); 2701 test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 1, 1, 0); 2702} 2703 2704template <class S> 2705void test25() 2706{ 2707 test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 1, 9, -8); 2708 test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 1, 18, -17); 2709 test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 1, 19, -18); 2710 test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 1, 20, -18); 2711 test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 10, 0, 1); 2712 test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 10, 1, -9); 2713 test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 10, 5, -9); 2714 test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 10, 9, -9); 2715 test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 10, 10, -9); 2716 test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 10, 11, -9); 2717 test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 19, 0, 1); 2718 test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 19, 1, -18); 2719 test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 19, 2, -18); 2720 test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 20, 0, 1); 2721 test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 20, 1, 1); 2722 test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 21, 0, 0); 2723 test(S("abcdefghij"), 1, 4, S(""), 0, 0, 4); 2724 test(S("abcdefghij"), 1, 4, S(""), 0, 1, 4); 2725 test(S("abcdefghij"), 1, 4, S(""), 1, 0, 0); 2726 test(S("abcdefghij"), 1, 4, S("abcde"), 0, 0, 4); 2727 test(S("abcdefghij"), 1, 4, S("abcde"), 0, 1, 1); 2728 test(S("abcdefghij"), 1, 4, S("abcde"), 0, 2, 1); 2729 test(S("abcdefghij"), 1, 4, S("abcde"), 0, 4, 1); 2730 test(S("abcdefghij"), 1, 4, S("abcde"), 0, 5, 1); 2731 test(S("abcdefghij"), 1, 4, S("abcde"), 0, 6, 1); 2732 test(S("abcdefghij"), 1, 4, S("abcde"), 1, 0, 4); 2733 test(S("abcdefghij"), 1, 4, S("abcde"), 1, 1, 3); 2734 test(S("abcdefghij"), 1, 4, S("abcde"), 1, 2, 2); 2735 test(S("abcdefghij"), 1, 4, S("abcde"), 1, 3, 1); 2736 test(S("abcdefghij"), 1, 4, S("abcde"), 1, 4, 0); 2737 test(S("abcdefghij"), 1, 4, S("abcde"), 1, 5, 0); 2738 test(S("abcdefghij"), 1, 4, S("abcde"), 2, 0, 4); 2739 test(S("abcdefghij"), 1, 4, S("abcde"), 2, 1, -1); 2740 test(S("abcdefghij"), 1, 4, S("abcde"), 2, 2, -1); 2741 test(S("abcdefghij"), 1, 4, S("abcde"), 2, 3, -1); 2742 test(S("abcdefghij"), 1, 4, S("abcde"), 2, 4, -1); 2743 test(S("abcdefghij"), 1, 4, S("abcde"), 4, 0, 4); 2744 test(S("abcdefghij"), 1, 4, S("abcde"), 4, 1, -3); 2745 test(S("abcdefghij"), 1, 4, S("abcde"), 4, 2, -3); 2746 test(S("abcdefghij"), 1, 4, S("abcde"), 5, 0, 4); 2747 test(S("abcdefghij"), 1, 4, S("abcde"), 5, 1, 4); 2748 test(S("abcdefghij"), 1, 4, S("abcde"), 6, 0, 0); 2749 test(S("abcdefghij"), 1, 4, S("abcdefghij"), 0, 0, 4); 2750 test(S("abcdefghij"), 1, 4, S("abcdefghij"), 0, 1, 1); 2751 test(S("abcdefghij"), 1, 4, S("abcdefghij"), 0, 5, 1); 2752 test(S("abcdefghij"), 1, 4, S("abcdefghij"), 0, 9, 1); 2753 test(S("abcdefghij"), 1, 4, S("abcdefghij"), 0, 10, 1); 2754 test(S("abcdefghij"), 1, 4, S("abcdefghij"), 0, 11, 1); 2755 test(S("abcdefghij"), 1, 4, S("abcdefghij"), 1, 0, 4); 2756 test(S("abcdefghij"), 1, 4, S("abcdefghij"), 1, 1, 3); 2757 test(S("abcdefghij"), 1, 4, S("abcdefghij"), 1, 4, 0); 2758 test(S("abcdefghij"), 1, 4, S("abcdefghij"), 1, 8, -4); 2759 test(S("abcdefghij"), 1, 4, S("abcdefghij"), 1, 9, -5); 2760 test(S("abcdefghij"), 1, 4, S("abcdefghij"), 1, 10, -5); 2761 test(S("abcdefghij"), 1, 4, S("abcdefghij"), 5, 0, 4); 2762 test(S("abcdefghij"), 1, 4, S("abcdefghij"), 5, 1, -4); 2763 test(S("abcdefghij"), 1, 4, S("abcdefghij"), 5, 2, -4); 2764 test(S("abcdefghij"), 1, 4, S("abcdefghij"), 5, 4, -4); 2765 test(S("abcdefghij"), 1, 4, S("abcdefghij"), 5, 5, -4); 2766 test(S("abcdefghij"), 1, 4, S("abcdefghij"), 5, 6, -4); 2767 test(S("abcdefghij"), 1, 4, S("abcdefghij"), 9, 0, 4); 2768 test(S("abcdefghij"), 1, 4, S("abcdefghij"), 9, 1, -8); 2769 test(S("abcdefghij"), 1, 4, S("abcdefghij"), 9, 2, -8); 2770 test(S("abcdefghij"), 1, 4, S("abcdefghij"), 10, 0, 4); 2771 test(S("abcdefghij"), 1, 4, S("abcdefghij"), 10, 1, 4); 2772 test(S("abcdefghij"), 1, 4, S("abcdefghij"), 11, 0, 0); 2773 test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 0, 0, 4); 2774 test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 0, 1, 1); 2775 test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 0, 10, 1); 2776 test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 0, 19, 1); 2777 test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 0, 20, 1); 2778 test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 0, 21, 1); 2779 test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 1, 0, 4); 2780 test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 1, 1, 3); 2781 test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 1, 9, -5); 2782 test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 1, 18, -14); 2783 test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 1, 19, -15); 2784 test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 1, 20, -15); 2785 test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 10, 0, 4); 2786 test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 10, 1, -9); 2787 test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 10, 5, -9); 2788 test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 10, 9, -9); 2789 test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 10, 10, -9); 2790 test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 10, 11, -9); 2791 test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 19, 0, 4); 2792 test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 19, 1, -18); 2793 test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 19, 2, -18); 2794 test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 20, 0, 4); 2795 test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 20, 1, 4); 2796 test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 21, 0, 0); 2797 test(S("abcdefghij"), 1, 8, S(""), 0, 0, 8); 2798 test(S("abcdefghij"), 1, 8, S(""), 0, 1, 8); 2799 test(S("abcdefghij"), 1, 8, S(""), 1, 0, 0); 2800 test(S("abcdefghij"), 1, 8, S("abcde"), 0, 0, 8); 2801 test(S("abcdefghij"), 1, 8, S("abcde"), 0, 1, 1); 2802 test(S("abcdefghij"), 1, 8, S("abcde"), 0, 2, 1); 2803 test(S("abcdefghij"), 1, 8, S("abcde"), 0, 4, 1); 2804 test(S("abcdefghij"), 1, 8, S("abcde"), 0, 5, 1); 2805 test(S("abcdefghij"), 1, 8, S("abcde"), 0, 6, 1); 2806 test(S("abcdefghij"), 1, 8, S("abcde"), 1, 0, 8); 2807} 2808 2809template <class S> 2810void test26() 2811{ 2812 test(S("abcdefghij"), 1, 8, S("abcde"), 1, 1, 7); 2813 test(S("abcdefghij"), 1, 8, S("abcde"), 1, 2, 6); 2814 test(S("abcdefghij"), 1, 8, S("abcde"), 1, 3, 5); 2815 test(S("abcdefghij"), 1, 8, S("abcde"), 1, 4, 4); 2816 test(S("abcdefghij"), 1, 8, S("abcde"), 1, 5, 4); 2817 test(S("abcdefghij"), 1, 8, S("abcde"), 2, 0, 8); 2818 test(S("abcdefghij"), 1, 8, S("abcde"), 2, 1, -1); 2819 test(S("abcdefghij"), 1, 8, S("abcde"), 2, 2, -1); 2820 test(S("abcdefghij"), 1, 8, S("abcde"), 2, 3, -1); 2821 test(S("abcdefghij"), 1, 8, S("abcde"), 2, 4, -1); 2822 test(S("abcdefghij"), 1, 8, S("abcde"), 4, 0, 8); 2823 test(S("abcdefghij"), 1, 8, S("abcde"), 4, 1, -3); 2824 test(S("abcdefghij"), 1, 8, S("abcde"), 4, 2, -3); 2825 test(S("abcdefghij"), 1, 8, S("abcde"), 5, 0, 8); 2826 test(S("abcdefghij"), 1, 8, S("abcde"), 5, 1, 8); 2827 test(S("abcdefghij"), 1, 8, S("abcde"), 6, 0, 0); 2828 test(S("abcdefghij"), 1, 8, S("abcdefghij"), 0, 0, 8); 2829 test(S("abcdefghij"), 1, 8, S("abcdefghij"), 0, 1, 1); 2830 test(S("abcdefghij"), 1, 8, S("abcdefghij"), 0, 5, 1); 2831 test(S("abcdefghij"), 1, 8, S("abcdefghij"), 0, 9, 1); 2832 test(S("abcdefghij"), 1, 8, S("abcdefghij"), 0, 10, 1); 2833 test(S("abcdefghij"), 1, 8, S("abcdefghij"), 0, 11, 1); 2834 test(S("abcdefghij"), 1, 8, S("abcdefghij"), 1, 0, 8); 2835 test(S("abcdefghij"), 1, 8, S("abcdefghij"), 1, 1, 7); 2836 test(S("abcdefghij"), 1, 8, S("abcdefghij"), 1, 4, 4); 2837 test(S("abcdefghij"), 1, 8, S("abcdefghij"), 1, 8, 0); 2838 test(S("abcdefghij"), 1, 8, S("abcdefghij"), 1, 9, -1); 2839 test(S("abcdefghij"), 1, 8, S("abcdefghij"), 1, 10, -1); 2840 test(S("abcdefghij"), 1, 8, S("abcdefghij"), 5, 0, 8); 2841 test(S("abcdefghij"), 1, 8, S("abcdefghij"), 5, 1, -4); 2842 test(S("abcdefghij"), 1, 8, S("abcdefghij"), 5, 2, -4); 2843 test(S("abcdefghij"), 1, 8, S("abcdefghij"), 5, 4, -4); 2844 test(S("abcdefghij"), 1, 8, S("abcdefghij"), 5, 5, -4); 2845 test(S("abcdefghij"), 1, 8, S("abcdefghij"), 5, 6, -4); 2846 test(S("abcdefghij"), 1, 8, S("abcdefghij"), 9, 0, 8); 2847 test(S("abcdefghij"), 1, 8, S("abcdefghij"), 9, 1, -8); 2848 test(S("abcdefghij"), 1, 8, S("abcdefghij"), 9, 2, -8); 2849 test(S("abcdefghij"), 1, 8, S("abcdefghij"), 10, 0, 8); 2850 test(S("abcdefghij"), 1, 8, S("abcdefghij"), 10, 1, 8); 2851 test(S("abcdefghij"), 1, 8, S("abcdefghij"), 11, 0, 0); 2852 test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 0, 0, 8); 2853 test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 0, 1, 1); 2854 test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 0, 10, 1); 2855 test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 0, 19, 1); 2856 test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 0, 20, 1); 2857 test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 0, 21, 1); 2858 test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 1, 0, 8); 2859 test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 1, 1, 7); 2860 test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 1, 9, -1); 2861 test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 1, 18, -10); 2862 test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 1, 19, -11); 2863 test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 1, 20, -11); 2864 test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 10, 0, 8); 2865 test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 10, 1, -9); 2866 test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 10, 5, -9); 2867 test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 10, 9, -9); 2868 test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 10, 10, -9); 2869 test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 10, 11, -9); 2870 test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 19, 0, 8); 2871 test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 19, 1, -18); 2872 test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 19, 2, -18); 2873 test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 20, 0, 8); 2874 test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 20, 1, 8); 2875 test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 21, 0, 0); 2876 test(S("abcdefghij"), 1, 9, S(""), 0, 0, 9); 2877 test(S("abcdefghij"), 1, 9, S(""), 0, 1, 9); 2878 test(S("abcdefghij"), 1, 9, S(""), 1, 0, 0); 2879 test(S("abcdefghij"), 1, 9, S("abcde"), 0, 0, 9); 2880 test(S("abcdefghij"), 1, 9, S("abcde"), 0, 1, 1); 2881 test(S("abcdefghij"), 1, 9, S("abcde"), 0, 2, 1); 2882 test(S("abcdefghij"), 1, 9, S("abcde"), 0, 4, 1); 2883 test(S("abcdefghij"), 1, 9, S("abcde"), 0, 5, 1); 2884 test(S("abcdefghij"), 1, 9, S("abcde"), 0, 6, 1); 2885 test(S("abcdefghij"), 1, 9, S("abcde"), 1, 0, 9); 2886 test(S("abcdefghij"), 1, 9, S("abcde"), 1, 1, 8); 2887 test(S("abcdefghij"), 1, 9, S("abcde"), 1, 2, 7); 2888 test(S("abcdefghij"), 1, 9, S("abcde"), 1, 3, 6); 2889 test(S("abcdefghij"), 1, 9, S("abcde"), 1, 4, 5); 2890 test(S("abcdefghij"), 1, 9, S("abcde"), 1, 5, 5); 2891 test(S("abcdefghij"), 1, 9, S("abcde"), 2, 0, 9); 2892 test(S("abcdefghij"), 1, 9, S("abcde"), 2, 1, -1); 2893 test(S("abcdefghij"), 1, 9, S("abcde"), 2, 2, -1); 2894 test(S("abcdefghij"), 1, 9, S("abcde"), 2, 3, -1); 2895 test(S("abcdefghij"), 1, 9, S("abcde"), 2, 4, -1); 2896 test(S("abcdefghij"), 1, 9, S("abcde"), 4, 0, 9); 2897 test(S("abcdefghij"), 1, 9, S("abcde"), 4, 1, -3); 2898 test(S("abcdefghij"), 1, 9, S("abcde"), 4, 2, -3); 2899 test(S("abcdefghij"), 1, 9, S("abcde"), 5, 0, 9); 2900 test(S("abcdefghij"), 1, 9, S("abcde"), 5, 1, 9); 2901 test(S("abcdefghij"), 1, 9, S("abcde"), 6, 0, 0); 2902 test(S("abcdefghij"), 1, 9, S("abcdefghij"), 0, 0, 9); 2903 test(S("abcdefghij"), 1, 9, S("abcdefghij"), 0, 1, 1); 2904 test(S("abcdefghij"), 1, 9, S("abcdefghij"), 0, 5, 1); 2905 test(S("abcdefghij"), 1, 9, S("abcdefghij"), 0, 9, 1); 2906 test(S("abcdefghij"), 1, 9, S("abcdefghij"), 0, 10, 1); 2907 test(S("abcdefghij"), 1, 9, S("abcdefghij"), 0, 11, 1); 2908 test(S("abcdefghij"), 1, 9, S("abcdefghij"), 1, 0, 9); 2909 test(S("abcdefghij"), 1, 9, S("abcdefghij"), 1, 1, 8); 2910 test(S("abcdefghij"), 1, 9, S("abcdefghij"), 1, 4, 5); 2911 test(S("abcdefghij"), 1, 9, S("abcdefghij"), 1, 8, 1); 2912} 2913 2914template <class S> 2915void test27() 2916{ 2917 test(S("abcdefghij"), 1, 9, S("abcdefghij"), 1, 9, 0); 2918 test(S("abcdefghij"), 1, 9, S("abcdefghij"), 1, 10, 0); 2919 test(S("abcdefghij"), 1, 9, S("abcdefghij"), 5, 0, 9); 2920 test(S("abcdefghij"), 1, 9, S("abcdefghij"), 5, 1, -4); 2921 test(S("abcdefghij"), 1, 9, S("abcdefghij"), 5, 2, -4); 2922 test(S("abcdefghij"), 1, 9, S("abcdefghij"), 5, 4, -4); 2923 test(S("abcdefghij"), 1, 9, S("abcdefghij"), 5, 5, -4); 2924 test(S("abcdefghij"), 1, 9, S("abcdefghij"), 5, 6, -4); 2925 test(S("abcdefghij"), 1, 9, S("abcdefghij"), 9, 0, 9); 2926 test(S("abcdefghij"), 1, 9, S("abcdefghij"), 9, 1, -8); 2927 test(S("abcdefghij"), 1, 9, S("abcdefghij"), 9, 2, -8); 2928 test(S("abcdefghij"), 1, 9, S("abcdefghij"), 10, 0, 9); 2929 test(S("abcdefghij"), 1, 9, S("abcdefghij"), 10, 1, 9); 2930 test(S("abcdefghij"), 1, 9, S("abcdefghij"), 11, 0, 0); 2931 test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 0, 0, 9); 2932 test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 0, 1, 1); 2933 test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 0, 10, 1); 2934 test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 0, 19, 1); 2935 test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 0, 20, 1); 2936 test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 0, 21, 1); 2937 test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 1, 0, 9); 2938 test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 1, 1, 8); 2939 test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 1, 9, 0); 2940 test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 1, 18, -9); 2941 test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 1, 19, -10); 2942 test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 1, 20, -10); 2943 test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 10, 0, 9); 2944 test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 10, 1, -9); 2945 test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 10, 5, -9); 2946 test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 10, 9, -9); 2947 test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 10, 10, -9); 2948 test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 10, 11, -9); 2949 test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 19, 0, 9); 2950 test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 19, 1, -18); 2951 test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 19, 2, -18); 2952 test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 20, 0, 9); 2953 test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 20, 1, 9); 2954 test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 21, 0, 0); 2955 test(S("abcdefghij"), 1, 10, S(""), 0, 0, 9); 2956 test(S("abcdefghij"), 1, 10, S(""), 0, 1, 9); 2957 test(S("abcdefghij"), 1, 10, S(""), 1, 0, 0); 2958 test(S("abcdefghij"), 1, 10, S("abcde"), 0, 0, 9); 2959 test(S("abcdefghij"), 1, 10, S("abcde"), 0, 1, 1); 2960 test(S("abcdefghij"), 1, 10, S("abcde"), 0, 2, 1); 2961 test(S("abcdefghij"), 1, 10, S("abcde"), 0, 4, 1); 2962 test(S("abcdefghij"), 1, 10, S("abcde"), 0, 5, 1); 2963 test(S("abcdefghij"), 1, 10, S("abcde"), 0, 6, 1); 2964 test(S("abcdefghij"), 1, 10, S("abcde"), 1, 0, 9); 2965 test(S("abcdefghij"), 1, 10, S("abcde"), 1, 1, 8); 2966 test(S("abcdefghij"), 1, 10, S("abcde"), 1, 2, 7); 2967 test(S("abcdefghij"), 1, 10, S("abcde"), 1, 3, 6); 2968 test(S("abcdefghij"), 1, 10, S("abcde"), 1, 4, 5); 2969 test(S("abcdefghij"), 1, 10, S("abcde"), 1, 5, 5); 2970 test(S("abcdefghij"), 1, 10, S("abcde"), 2, 0, 9); 2971 test(S("abcdefghij"), 1, 10, S("abcde"), 2, 1, -1); 2972 test(S("abcdefghij"), 1, 10, S("abcde"), 2, 2, -1); 2973 test(S("abcdefghij"), 1, 10, S("abcde"), 2, 3, -1); 2974 test(S("abcdefghij"), 1, 10, S("abcde"), 2, 4, -1); 2975 test(S("abcdefghij"), 1, 10, S("abcde"), 4, 0, 9); 2976 test(S("abcdefghij"), 1, 10, S("abcde"), 4, 1, -3); 2977 test(S("abcdefghij"), 1, 10, S("abcde"), 4, 2, -3); 2978 test(S("abcdefghij"), 1, 10, S("abcde"), 5, 0, 9); 2979 test(S("abcdefghij"), 1, 10, S("abcde"), 5, 1, 9); 2980 test(S("abcdefghij"), 1, 10, S("abcde"), 6, 0, 0); 2981 test(S("abcdefghij"), 1, 10, S("abcdefghij"), 0, 0, 9); 2982 test(S("abcdefghij"), 1, 10, S("abcdefghij"), 0, 1, 1); 2983 test(S("abcdefghij"), 1, 10, S("abcdefghij"), 0, 5, 1); 2984 test(S("abcdefghij"), 1, 10, S("abcdefghij"), 0, 9, 1); 2985 test(S("abcdefghij"), 1, 10, S("abcdefghij"), 0, 10, 1); 2986 test(S("abcdefghij"), 1, 10, S("abcdefghij"), 0, 11, 1); 2987 test(S("abcdefghij"), 1, 10, S("abcdefghij"), 1, 0, 9); 2988 test(S("abcdefghij"), 1, 10, S("abcdefghij"), 1, 1, 8); 2989 test(S("abcdefghij"), 1, 10, S("abcdefghij"), 1, 4, 5); 2990 test(S("abcdefghij"), 1, 10, S("abcdefghij"), 1, 8, 1); 2991 test(S("abcdefghij"), 1, 10, S("abcdefghij"), 1, 9, 0); 2992 test(S("abcdefghij"), 1, 10, S("abcdefghij"), 1, 10, 0); 2993 test(S("abcdefghij"), 1, 10, S("abcdefghij"), 5, 0, 9); 2994 test(S("abcdefghij"), 1, 10, S("abcdefghij"), 5, 1, -4); 2995 test(S("abcdefghij"), 1, 10, S("abcdefghij"), 5, 2, -4); 2996 test(S("abcdefghij"), 1, 10, S("abcdefghij"), 5, 4, -4); 2997 test(S("abcdefghij"), 1, 10, S("abcdefghij"), 5, 5, -4); 2998 test(S("abcdefghij"), 1, 10, S("abcdefghij"), 5, 6, -4); 2999 test(S("abcdefghij"), 1, 10, S("abcdefghij"), 9, 0, 9); 3000 test(S("abcdefghij"), 1, 10, S("abcdefghij"), 9, 1, -8); 3001 test(S("abcdefghij"), 1, 10, S("abcdefghij"), 9, 2, -8); 3002 test(S("abcdefghij"), 1, 10, S("abcdefghij"), 10, 0, 9); 3003 test(S("abcdefghij"), 1, 10, S("abcdefghij"), 10, 1, 9); 3004 test(S("abcdefghij"), 1, 10, S("abcdefghij"), 11, 0, 0); 3005 test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 0, 0, 9); 3006 test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 0, 1, 1); 3007 test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 0, 10, 1); 3008 test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 0, 19, 1); 3009 test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 0, 20, 1); 3010 test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 0, 21, 1); 3011 test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 1, 0, 9); 3012 test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 1, 1, 8); 3013 test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 1, 9, 0); 3014 test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 1, 18, -9); 3015 test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 1, 19, -10); 3016 test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 1, 20, -10); 3017} 3018 3019template <class S> 3020void test28() 3021{ 3022 test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 10, 0, 9); 3023 test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 10, 1, -9); 3024 test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 10, 5, -9); 3025 test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 10, 9, -9); 3026 test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 10, 10, -9); 3027 test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 10, 11, -9); 3028 test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 19, 0, 9); 3029 test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 19, 1, -18); 3030 test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 19, 2, -18); 3031 test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 20, 0, 9); 3032 test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 20, 1, 9); 3033 test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 21, 0, 0); 3034 test(S("abcdefghij"), 5, 0, S(""), 0, 0, 0); 3035 test(S("abcdefghij"), 5, 0, S(""), 0, 1, 0); 3036 test(S("abcdefghij"), 5, 0, S(""), 1, 0, 0); 3037 test(S("abcdefghij"), 5, 0, S("abcde"), 0, 0, 0); 3038 test(S("abcdefghij"), 5, 0, S("abcde"), 0, 1, -1); 3039 test(S("abcdefghij"), 5, 0, S("abcde"), 0, 2, -2); 3040 test(S("abcdefghij"), 5, 0, S("abcde"), 0, 4, -4); 3041 test(S("abcdefghij"), 5, 0, S("abcde"), 0, 5, -5); 3042 test(S("abcdefghij"), 5, 0, S("abcde"), 0, 6, -5); 3043 test(S("abcdefghij"), 5, 0, S("abcde"), 1, 0, 0); 3044 test(S("abcdefghij"), 5, 0, S("abcde"), 1, 1, -1); 3045 test(S("abcdefghij"), 5, 0, S("abcde"), 1, 2, -2); 3046 test(S("abcdefghij"), 5, 0, S("abcde"), 1, 3, -3); 3047 test(S("abcdefghij"), 5, 0, S("abcde"), 1, 4, -4); 3048 test(S("abcdefghij"), 5, 0, S("abcde"), 1, 5, -4); 3049 test(S("abcdefghij"), 5, 0, S("abcde"), 2, 0, 0); 3050 test(S("abcdefghij"), 5, 0, S("abcde"), 2, 1, -1); 3051 test(S("abcdefghij"), 5, 0, S("abcde"), 2, 2, -2); 3052 test(S("abcdefghij"), 5, 0, S("abcde"), 2, 3, -3); 3053 test(S("abcdefghij"), 5, 0, S("abcde"), 2, 4, -3); 3054 test(S("abcdefghij"), 5, 0, S("abcde"), 4, 0, 0); 3055 test(S("abcdefghij"), 5, 0, S("abcde"), 4, 1, -1); 3056 test(S("abcdefghij"), 5, 0, S("abcde"), 4, 2, -1); 3057 test(S("abcdefghij"), 5, 0, S("abcde"), 5, 0, 0); 3058 test(S("abcdefghij"), 5, 0, S("abcde"), 5, 1, 0); 3059 test(S("abcdefghij"), 5, 0, S("abcde"), 6, 0, 0); 3060 test(S("abcdefghij"), 5, 0, S("abcdefghij"), 0, 0, 0); 3061 test(S("abcdefghij"), 5, 0, S("abcdefghij"), 0, 1, -1); 3062 test(S("abcdefghij"), 5, 0, S("abcdefghij"), 0, 5, -5); 3063 test(S("abcdefghij"), 5, 0, S("abcdefghij"), 0, 9, -9); 3064 test(S("abcdefghij"), 5, 0, S("abcdefghij"), 0, 10, -10); 3065 test(S("abcdefghij"), 5, 0, S("abcdefghij"), 0, 11, -10); 3066 test(S("abcdefghij"), 5, 0, S("abcdefghij"), 1, 0, 0); 3067 test(S("abcdefghij"), 5, 0, S("abcdefghij"), 1, 1, -1); 3068 test(S("abcdefghij"), 5, 0, S("abcdefghij"), 1, 4, -4); 3069 test(S("abcdefghij"), 5, 0, S("abcdefghij"), 1, 8, -8); 3070 test(S("abcdefghij"), 5, 0, S("abcdefghij"), 1, 9, -9); 3071 test(S("abcdefghij"), 5, 0, S("abcdefghij"), 1, 10, -9); 3072 test(S("abcdefghij"), 5, 0, S("abcdefghij"), 5, 0, 0); 3073 test(S("abcdefghij"), 5, 0, S("abcdefghij"), 5, 1, -1); 3074 test(S("abcdefghij"), 5, 0, S("abcdefghij"), 5, 2, -2); 3075 test(S("abcdefghij"), 5, 0, S("abcdefghij"), 5, 4, -4); 3076 test(S("abcdefghij"), 5, 0, S("abcdefghij"), 5, 5, -5); 3077 test(S("abcdefghij"), 5, 0, S("abcdefghij"), 5, 6, -5); 3078 test(S("abcdefghij"), 5, 0, S("abcdefghij"), 9, 0, 0); 3079 test(S("abcdefghij"), 5, 0, S("abcdefghij"), 9, 1, -1); 3080 test(S("abcdefghij"), 5, 0, S("abcdefghij"), 9, 2, -1); 3081 test(S("abcdefghij"), 5, 0, S("abcdefghij"), 10, 0, 0); 3082 test(S("abcdefghij"), 5, 0, S("abcdefghij"), 10, 1, 0); 3083 test(S("abcdefghij"), 5, 0, S("abcdefghij"), 11, 0, 0); 3084 test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 0, 0, 0); 3085 test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 0, 1, -1); 3086 test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 0, 10, -10); 3087 test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 0, 19, -19); 3088 test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 0, 20, -20); 3089 test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 0, 21, -20); 3090 test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 1, 0, 0); 3091 test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 1, 1, -1); 3092 test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 1, 9, -9); 3093 test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 1, 18, -18); 3094 test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 1, 19, -19); 3095 test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 1, 20, -19); 3096 test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 10, 0, 0); 3097 test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 10, 1, -1); 3098 test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 10, 5, -5); 3099 test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 10, 9, -9); 3100 test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 10, 10, -10); 3101 test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 10, 11, -10); 3102 test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 19, 0, 0); 3103 test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 19, 1, -1); 3104 test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 19, 2, -1); 3105 test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 20, 0, 0); 3106 test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 20, 1, 0); 3107 test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 21, 0, 0); 3108 test(S("abcdefghij"), 5, 1, S(""), 0, 0, 1); 3109 test(S("abcdefghij"), 5, 1, S(""), 0, 1, 1); 3110 test(S("abcdefghij"), 5, 1, S(""), 1, 0, 0); 3111 test(S("abcdefghij"), 5, 1, S("abcde"), 0, 0, 1); 3112 test(S("abcdefghij"), 5, 1, S("abcde"), 0, 1, 5); 3113 test(S("abcdefghij"), 5, 1, S("abcde"), 0, 2, 5); 3114 test(S("abcdefghij"), 5, 1, S("abcde"), 0, 4, 5); 3115 test(S("abcdefghij"), 5, 1, S("abcde"), 0, 5, 5); 3116 test(S("abcdefghij"), 5, 1, S("abcde"), 0, 6, 5); 3117 test(S("abcdefghij"), 5, 1, S("abcde"), 1, 0, 1); 3118 test(S("abcdefghij"), 5, 1, S("abcde"), 1, 1, 4); 3119 test(S("abcdefghij"), 5, 1, S("abcde"), 1, 2, 4); 3120 test(S("abcdefghij"), 5, 1, S("abcde"), 1, 3, 4); 3121 test(S("abcdefghij"), 5, 1, S("abcde"), 1, 4, 4); 3122} 3123 3124template <class S> 3125void test29() 3126{ 3127 test(S("abcdefghij"), 5, 1, S("abcde"), 1, 5, 4); 3128 test(S("abcdefghij"), 5, 1, S("abcde"), 2, 0, 1); 3129 test(S("abcdefghij"), 5, 1, S("abcde"), 2, 1, 3); 3130 test(S("abcdefghij"), 5, 1, S("abcde"), 2, 2, 3); 3131 test(S("abcdefghij"), 5, 1, S("abcde"), 2, 3, 3); 3132 test(S("abcdefghij"), 5, 1, S("abcde"), 2, 4, 3); 3133 test(S("abcdefghij"), 5, 1, S("abcde"), 4, 0, 1); 3134 test(S("abcdefghij"), 5, 1, S("abcde"), 4, 1, 1); 3135 test(S("abcdefghij"), 5, 1, S("abcde"), 4, 2, 1); 3136 test(S("abcdefghij"), 5, 1, S("abcde"), 5, 0, 1); 3137 test(S("abcdefghij"), 5, 1, S("abcde"), 5, 1, 1); 3138 test(S("abcdefghij"), 5, 1, S("abcde"), 6, 0, 0); 3139 test(S("abcdefghij"), 5, 1, S("abcdefghij"), 0, 0, 1); 3140 test(S("abcdefghij"), 5, 1, S("abcdefghij"), 0, 1, 5); 3141 test(S("abcdefghij"), 5, 1, S("abcdefghij"), 0, 5, 5); 3142 test(S("abcdefghij"), 5, 1, S("abcdefghij"), 0, 9, 5); 3143 test(S("abcdefghij"), 5, 1, S("abcdefghij"), 0, 10, 5); 3144 test(S("abcdefghij"), 5, 1, S("abcdefghij"), 0, 11, 5); 3145 test(S("abcdefghij"), 5, 1, S("abcdefghij"), 1, 0, 1); 3146 test(S("abcdefghij"), 5, 1, S("abcdefghij"), 1, 1, 4); 3147 test(S("abcdefghij"), 5, 1, S("abcdefghij"), 1, 4, 4); 3148 test(S("abcdefghij"), 5, 1, S("abcdefghij"), 1, 8, 4); 3149 test(S("abcdefghij"), 5, 1, S("abcdefghij"), 1, 9, 4); 3150 test(S("abcdefghij"), 5, 1, S("abcdefghij"), 1, 10, 4); 3151 test(S("abcdefghij"), 5, 1, S("abcdefghij"), 5, 0, 1); 3152 test(S("abcdefghij"), 5, 1, S("abcdefghij"), 5, 1, 0); 3153 test(S("abcdefghij"), 5, 1, S("abcdefghij"), 5, 2, -1); 3154 test(S("abcdefghij"), 5, 1, S("abcdefghij"), 5, 4, -3); 3155 test(S("abcdefghij"), 5, 1, S("abcdefghij"), 5, 5, -4); 3156 test(S("abcdefghij"), 5, 1, S("abcdefghij"), 5, 6, -4); 3157 test(S("abcdefghij"), 5, 1, S("abcdefghij"), 9, 0, 1); 3158 test(S("abcdefghij"), 5, 1, S("abcdefghij"), 9, 1, -4); 3159 test(S("abcdefghij"), 5, 1, S("abcdefghij"), 9, 2, -4); 3160 test(S("abcdefghij"), 5, 1, S("abcdefghij"), 10, 0, 1); 3161 test(S("abcdefghij"), 5, 1, S("abcdefghij"), 10, 1, 1); 3162 test(S("abcdefghij"), 5, 1, S("abcdefghij"), 11, 0, 0); 3163 test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 0, 0, 1); 3164 test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 0, 1, 5); 3165 test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 0, 10, 5); 3166 test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 0, 19, 5); 3167 test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 0, 20, 5); 3168 test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 0, 21, 5); 3169 test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 1, 0, 1); 3170 test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 1, 1, 4); 3171 test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 1, 9, 4); 3172 test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 1, 18, 4); 3173 test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 1, 19, 4); 3174 test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 1, 20, 4); 3175 test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 10, 0, 1); 3176 test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 10, 1, -5); 3177 test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 10, 5, -5); 3178 test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 10, 9, -5); 3179 test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 10, 10, -5); 3180 test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 10, 11, -5); 3181 test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 19, 0, 1); 3182 test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 19, 1, -14); 3183 test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 19, 2, -14); 3184 test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 20, 0, 1); 3185 test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 20, 1, 1); 3186 test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 21, 0, 0); 3187 test(S("abcdefghij"), 5, 2, S(""), 0, 0, 2); 3188 test(S("abcdefghij"), 5, 2, S(""), 0, 1, 2); 3189 test(S("abcdefghij"), 5, 2, S(""), 1, 0, 0); 3190 test(S("abcdefghij"), 5, 2, S("abcde"), 0, 0, 2); 3191 test(S("abcdefghij"), 5, 2, S("abcde"), 0, 1, 5); 3192 test(S("abcdefghij"), 5, 2, S("abcde"), 0, 2, 5); 3193 test(S("abcdefghij"), 5, 2, S("abcde"), 0, 4, 5); 3194 test(S("abcdefghij"), 5, 2, S("abcde"), 0, 5, 5); 3195 test(S("abcdefghij"), 5, 2, S("abcde"), 0, 6, 5); 3196 test(S("abcdefghij"), 5, 2, S("abcde"), 1, 0, 2); 3197 test(S("abcdefghij"), 5, 2, S("abcde"), 1, 1, 4); 3198 test(S("abcdefghij"), 5, 2, S("abcde"), 1, 2, 4); 3199 test(S("abcdefghij"), 5, 2, S("abcde"), 1, 3, 4); 3200 test(S("abcdefghij"), 5, 2, S("abcde"), 1, 4, 4); 3201 test(S("abcdefghij"), 5, 2, S("abcde"), 1, 5, 4); 3202 test(S("abcdefghij"), 5, 2, S("abcde"), 2, 0, 2); 3203 test(S("abcdefghij"), 5, 2, S("abcde"), 2, 1, 3); 3204 test(S("abcdefghij"), 5, 2, S("abcde"), 2, 2, 3); 3205 test(S("abcdefghij"), 5, 2, S("abcde"), 2, 3, 3); 3206 test(S("abcdefghij"), 5, 2, S("abcde"), 2, 4, 3); 3207 test(S("abcdefghij"), 5, 2, S("abcde"), 4, 0, 2); 3208 test(S("abcdefghij"), 5, 2, S("abcde"), 4, 1, 1); 3209 test(S("abcdefghij"), 5, 2, S("abcde"), 4, 2, 1); 3210 test(S("abcdefghij"), 5, 2, S("abcde"), 5, 0, 2); 3211 test(S("abcdefghij"), 5, 2, S("abcde"), 5, 1, 2); 3212 test(S("abcdefghij"), 5, 2, S("abcde"), 6, 0, 0); 3213 test(S("abcdefghij"), 5, 2, S("abcdefghij"), 0, 0, 2); 3214 test(S("abcdefghij"), 5, 2, S("abcdefghij"), 0, 1, 5); 3215 test(S("abcdefghij"), 5, 2, S("abcdefghij"), 0, 5, 5); 3216 test(S("abcdefghij"), 5, 2, S("abcdefghij"), 0, 9, 5); 3217 test(S("abcdefghij"), 5, 2, S("abcdefghij"), 0, 10, 5); 3218 test(S("abcdefghij"), 5, 2, S("abcdefghij"), 0, 11, 5); 3219 test(S("abcdefghij"), 5, 2, S("abcdefghij"), 1, 0, 2); 3220 test(S("abcdefghij"), 5, 2, S("abcdefghij"), 1, 1, 4); 3221 test(S("abcdefghij"), 5, 2, S("abcdefghij"), 1, 4, 4); 3222 test(S("abcdefghij"), 5, 2, S("abcdefghij"), 1, 8, 4); 3223 test(S("abcdefghij"), 5, 2, S("abcdefghij"), 1, 9, 4); 3224 test(S("abcdefghij"), 5, 2, S("abcdefghij"), 1, 10, 4); 3225 test(S("abcdefghij"), 5, 2, S("abcdefghij"), 5, 0, 2); 3226 test(S("abcdefghij"), 5, 2, S("abcdefghij"), 5, 1, 1); 3227} 3228 3229template <class S> 3230void test30() 3231{ 3232 test(S("abcdefghij"), 5, 2, S("abcdefghij"), 5, 2, 0); 3233 test(S("abcdefghij"), 5, 2, S("abcdefghij"), 5, 4, -2); 3234 test(S("abcdefghij"), 5, 2, S("abcdefghij"), 5, 5, -3); 3235 test(S("abcdefghij"), 5, 2, S("abcdefghij"), 5, 6, -3); 3236 test(S("abcdefghij"), 5, 2, S("abcdefghij"), 9, 0, 2); 3237 test(S("abcdefghij"), 5, 2, S("abcdefghij"), 9, 1, -4); 3238 test(S("abcdefghij"), 5, 2, S("abcdefghij"), 9, 2, -4); 3239 test(S("abcdefghij"), 5, 2, S("abcdefghij"), 10, 0, 2); 3240 test(S("abcdefghij"), 5, 2, S("abcdefghij"), 10, 1, 2); 3241 test(S("abcdefghij"), 5, 2, S("abcdefghij"), 11, 0, 0); 3242 test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 0, 0, 2); 3243 test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 0, 1, 5); 3244 test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 0, 10, 5); 3245 test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 0, 19, 5); 3246 test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 0, 20, 5); 3247 test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 0, 21, 5); 3248 test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 1, 0, 2); 3249 test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 1, 1, 4); 3250 test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 1, 9, 4); 3251 test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 1, 18, 4); 3252 test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 1, 19, 4); 3253 test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 1, 20, 4); 3254 test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 10, 0, 2); 3255 test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 10, 1, -5); 3256 test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 10, 5, -5); 3257 test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 10, 9, -5); 3258 test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 10, 10, -5); 3259 test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 10, 11, -5); 3260 test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 19, 0, 2); 3261 test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 19, 1, -14); 3262 test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 19, 2, -14); 3263 test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 20, 0, 2); 3264 test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 20, 1, 2); 3265 test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 21, 0, 0); 3266 test(S("abcdefghij"), 5, 4, S(""), 0, 0, 4); 3267 test(S("abcdefghij"), 5, 4, S(""), 0, 1, 4); 3268 test(S("abcdefghij"), 5, 4, S(""), 1, 0, 0); 3269 test(S("abcdefghij"), 5, 4, S("abcde"), 0, 0, 4); 3270 test(S("abcdefghij"), 5, 4, S("abcde"), 0, 1, 5); 3271 test(S("abcdefghij"), 5, 4, S("abcde"), 0, 2, 5); 3272 test(S("abcdefghij"), 5, 4, S("abcde"), 0, 4, 5); 3273 test(S("abcdefghij"), 5, 4, S("abcde"), 0, 5, 5); 3274 test(S("abcdefghij"), 5, 4, S("abcde"), 0, 6, 5); 3275 test(S("abcdefghij"), 5, 4, S("abcde"), 1, 0, 4); 3276 test(S("abcdefghij"), 5, 4, S("abcde"), 1, 1, 4); 3277 test(S("abcdefghij"), 5, 4, S("abcde"), 1, 2, 4); 3278 test(S("abcdefghij"), 5, 4, S("abcde"), 1, 3, 4); 3279 test(S("abcdefghij"), 5, 4, S("abcde"), 1, 4, 4); 3280 test(S("abcdefghij"), 5, 4, S("abcde"), 1, 5, 4); 3281 test(S("abcdefghij"), 5, 4, S("abcde"), 2, 0, 4); 3282 test(S("abcdefghij"), 5, 4, S("abcde"), 2, 1, 3); 3283 test(S("abcdefghij"), 5, 4, S("abcde"), 2, 2, 3); 3284 test(S("abcdefghij"), 5, 4, S("abcde"), 2, 3, 3); 3285 test(S("abcdefghij"), 5, 4, S("abcde"), 2, 4, 3); 3286 test(S("abcdefghij"), 5, 4, S("abcde"), 4, 0, 4); 3287 test(S("abcdefghij"), 5, 4, S("abcde"), 4, 1, 1); 3288 test(S("abcdefghij"), 5, 4, S("abcde"), 4, 2, 1); 3289 test(S("abcdefghij"), 5, 4, S("abcde"), 5, 0, 4); 3290 test(S("abcdefghij"), 5, 4, S("abcde"), 5, 1, 4); 3291 test(S("abcdefghij"), 5, 4, S("abcde"), 6, 0, 0); 3292 test(S("abcdefghij"), 5, 4, S("abcdefghij"), 0, 0, 4); 3293 test(S("abcdefghij"), 5, 4, S("abcdefghij"), 0, 1, 5); 3294 test(S("abcdefghij"), 5, 4, S("abcdefghij"), 0, 5, 5); 3295 test(S("abcdefghij"), 5, 4, S("abcdefghij"), 0, 9, 5); 3296 test(S("abcdefghij"), 5, 4, S("abcdefghij"), 0, 10, 5); 3297 test(S("abcdefghij"), 5, 4, S("abcdefghij"), 0, 11, 5); 3298 test(S("abcdefghij"), 5, 4, S("abcdefghij"), 1, 0, 4); 3299 test(S("abcdefghij"), 5, 4, S("abcdefghij"), 1, 1, 4); 3300 test(S("abcdefghij"), 5, 4, S("abcdefghij"), 1, 4, 4); 3301 test(S("abcdefghij"), 5, 4, S("abcdefghij"), 1, 8, 4); 3302 test(S("abcdefghij"), 5, 4, S("abcdefghij"), 1, 9, 4); 3303 test(S("abcdefghij"), 5, 4, S("abcdefghij"), 1, 10, 4); 3304 test(S("abcdefghij"), 5, 4, S("abcdefghij"), 5, 0, 4); 3305 test(S("abcdefghij"), 5, 4, S("abcdefghij"), 5, 1, 3); 3306 test(S("abcdefghij"), 5, 4, S("abcdefghij"), 5, 2, 2); 3307 test(S("abcdefghij"), 5, 4, S("abcdefghij"), 5, 4, 0); 3308 test(S("abcdefghij"), 5, 4, S("abcdefghij"), 5, 5, -1); 3309 test(S("abcdefghij"), 5, 4, S("abcdefghij"), 5, 6, -1); 3310 test(S("abcdefghij"), 5, 4, S("abcdefghij"), 9, 0, 4); 3311 test(S("abcdefghij"), 5, 4, S("abcdefghij"), 9, 1, -4); 3312 test(S("abcdefghij"), 5, 4, S("abcdefghij"), 9, 2, -4); 3313 test(S("abcdefghij"), 5, 4, S("abcdefghij"), 10, 0, 4); 3314 test(S("abcdefghij"), 5, 4, S("abcdefghij"), 10, 1, 4); 3315 test(S("abcdefghij"), 5, 4, S("abcdefghij"), 11, 0, 0); 3316 test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 0, 0, 4); 3317 test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 0, 1, 5); 3318 test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 0, 10, 5); 3319 test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 0, 19, 5); 3320 test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 0, 20, 5); 3321 test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 0, 21, 5); 3322 test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 1, 0, 4); 3323 test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 1, 1, 4); 3324 test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 1, 9, 4); 3325 test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 1, 18, 4); 3326 test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 1, 19, 4); 3327 test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 1, 20, 4); 3328 test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 10, 0, 4); 3329 test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 10, 1, -5); 3330 test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 10, 5, -5); 3331 test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 10, 9, -5); 3332} 3333 3334template <class S> 3335void test31() 3336{ 3337 test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 10, 10, -5); 3338 test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 10, 11, -5); 3339 test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 19, 0, 4); 3340 test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 19, 1, -14); 3341 test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 19, 2, -14); 3342 test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 20, 0, 4); 3343 test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 20, 1, 4); 3344 test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 21, 0, 0); 3345 test(S("abcdefghij"), 5, 5, S(""), 0, 0, 5); 3346 test(S("abcdefghij"), 5, 5, S(""), 0, 1, 5); 3347 test(S("abcdefghij"), 5, 5, S(""), 1, 0, 0); 3348 test(S("abcdefghij"), 5, 5, S("abcde"), 0, 0, 5); 3349 test(S("abcdefghij"), 5, 5, S("abcde"), 0, 1, 5); 3350 test(S("abcdefghij"), 5, 5, S("abcde"), 0, 2, 5); 3351 test(S("abcdefghij"), 5, 5, S("abcde"), 0, 4, 5); 3352 test(S("abcdefghij"), 5, 5, S("abcde"), 0, 5, 5); 3353 test(S("abcdefghij"), 5, 5, S("abcde"), 0, 6, 5); 3354 test(S("abcdefghij"), 5, 5, S("abcde"), 1, 0, 5); 3355 test(S("abcdefghij"), 5, 5, S("abcde"), 1, 1, 4); 3356 test(S("abcdefghij"), 5, 5, S("abcde"), 1, 2, 4); 3357 test(S("abcdefghij"), 5, 5, S("abcde"), 1, 3, 4); 3358 test(S("abcdefghij"), 5, 5, S("abcde"), 1, 4, 4); 3359 test(S("abcdefghij"), 5, 5, S("abcde"), 1, 5, 4); 3360 test(S("abcdefghij"), 5, 5, S("abcde"), 2, 0, 5); 3361 test(S("abcdefghij"), 5, 5, S("abcde"), 2, 1, 3); 3362 test(S("abcdefghij"), 5, 5, S("abcde"), 2, 2, 3); 3363 test(S("abcdefghij"), 5, 5, S("abcde"), 2, 3, 3); 3364 test(S("abcdefghij"), 5, 5, S("abcde"), 2, 4, 3); 3365 test(S("abcdefghij"), 5, 5, S("abcde"), 4, 0, 5); 3366 test(S("abcdefghij"), 5, 5, S("abcde"), 4, 1, 1); 3367 test(S("abcdefghij"), 5, 5, S("abcde"), 4, 2, 1); 3368 test(S("abcdefghij"), 5, 5, S("abcde"), 5, 0, 5); 3369 test(S("abcdefghij"), 5, 5, S("abcde"), 5, 1, 5); 3370 test(S("abcdefghij"), 5, 5, S("abcde"), 6, 0, 0); 3371 test(S("abcdefghij"), 5, 5, S("abcdefghij"), 0, 0, 5); 3372 test(S("abcdefghij"), 5, 5, S("abcdefghij"), 0, 1, 5); 3373 test(S("abcdefghij"), 5, 5, S("abcdefghij"), 0, 5, 5); 3374 test(S("abcdefghij"), 5, 5, S("abcdefghij"), 0, 9, 5); 3375 test(S("abcdefghij"), 5, 5, S("abcdefghij"), 0, 10, 5); 3376 test(S("abcdefghij"), 5, 5, S("abcdefghij"), 0, 11, 5); 3377 test(S("abcdefghij"), 5, 5, S("abcdefghij"), 1, 0, 5); 3378 test(S("abcdefghij"), 5, 5, S("abcdefghij"), 1, 1, 4); 3379 test(S("abcdefghij"), 5, 5, S("abcdefghij"), 1, 4, 4); 3380 test(S("abcdefghij"), 5, 5, S("abcdefghij"), 1, 8, 4); 3381 test(S("abcdefghij"), 5, 5, S("abcdefghij"), 1, 9, 4); 3382 test(S("abcdefghij"), 5, 5, S("abcdefghij"), 1, 10, 4); 3383 test(S("abcdefghij"), 5, 5, S("abcdefghij"), 5, 0, 5); 3384 test(S("abcdefghij"), 5, 5, S("abcdefghij"), 5, 1, 4); 3385 test(S("abcdefghij"), 5, 5, S("abcdefghij"), 5, 2, 3); 3386 test(S("abcdefghij"), 5, 5, S("abcdefghij"), 5, 4, 1); 3387 test(S("abcdefghij"), 5, 5, S("abcdefghij"), 5, 5, 0); 3388 test(S("abcdefghij"), 5, 5, S("abcdefghij"), 5, 6, 0); 3389 test(S("abcdefghij"), 5, 5, S("abcdefghij"), 9, 0, 5); 3390 test(S("abcdefghij"), 5, 5, S("abcdefghij"), 9, 1, -4); 3391 test(S("abcdefghij"), 5, 5, S("abcdefghij"), 9, 2, -4); 3392 test(S("abcdefghij"), 5, 5, S("abcdefghij"), 10, 0, 5); 3393 test(S("abcdefghij"), 5, 5, S("abcdefghij"), 10, 1, 5); 3394 test(S("abcdefghij"), 5, 5, S("abcdefghij"), 11, 0, 0); 3395 test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 0, 0, 5); 3396 test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 0, 1, 5); 3397 test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 0, 10, 5); 3398 test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 0, 19, 5); 3399 test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 0, 20, 5); 3400 test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 0, 21, 5); 3401 test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 1, 0, 5); 3402 test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 1, 1, 4); 3403 test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 1, 9, 4); 3404 test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 1, 18, 4); 3405 test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 1, 19, 4); 3406 test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 1, 20, 4); 3407 test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 10, 0, 5); 3408 test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 10, 1, -5); 3409 test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 10, 5, -5); 3410 test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 10, 9, -5); 3411 test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 10, 10, -5); 3412 test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 10, 11, -5); 3413 test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 19, 0, 5); 3414 test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 19, 1, -14); 3415 test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 19, 2, -14); 3416 test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 20, 0, 5); 3417 test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 20, 1, 5); 3418 test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 21, 0, 0); 3419 test(S("abcdefghij"), 5, 6, S(""), 0, 0, 5); 3420 test(S("abcdefghij"), 5, 6, S(""), 0, 1, 5); 3421 test(S("abcdefghij"), 5, 6, S(""), 1, 0, 0); 3422 test(S("abcdefghij"), 5, 6, S("abcde"), 0, 0, 5); 3423 test(S("abcdefghij"), 5, 6, S("abcde"), 0, 1, 5); 3424 test(S("abcdefghij"), 5, 6, S("abcde"), 0, 2, 5); 3425 test(S("abcdefghij"), 5, 6, S("abcde"), 0, 4, 5); 3426 test(S("abcdefghij"), 5, 6, S("abcde"), 0, 5, 5); 3427 test(S("abcdefghij"), 5, 6, S("abcde"), 0, 6, 5); 3428 test(S("abcdefghij"), 5, 6, S("abcde"), 1, 0, 5); 3429 test(S("abcdefghij"), 5, 6, S("abcde"), 1, 1, 4); 3430 test(S("abcdefghij"), 5, 6, S("abcde"), 1, 2, 4); 3431 test(S("abcdefghij"), 5, 6, S("abcde"), 1, 3, 4); 3432 test(S("abcdefghij"), 5, 6, S("abcde"), 1, 4, 4); 3433 test(S("abcdefghij"), 5, 6, S("abcde"), 1, 5, 4); 3434 test(S("abcdefghij"), 5, 6, S("abcde"), 2, 0, 5); 3435 test(S("abcdefghij"), 5, 6, S("abcde"), 2, 1, 3); 3436 test(S("abcdefghij"), 5, 6, S("abcde"), 2, 2, 3); 3437} 3438 3439template <class S> 3440void test32() 3441{ 3442 test(S("abcdefghij"), 5, 6, S("abcde"), 2, 3, 3); 3443 test(S("abcdefghij"), 5, 6, S("abcde"), 2, 4, 3); 3444 test(S("abcdefghij"), 5, 6, S("abcde"), 4, 0, 5); 3445 test(S("abcdefghij"), 5, 6, S("abcde"), 4, 1, 1); 3446 test(S("abcdefghij"), 5, 6, S("abcde"), 4, 2, 1); 3447 test(S("abcdefghij"), 5, 6, S("abcde"), 5, 0, 5); 3448 test(S("abcdefghij"), 5, 6, S("abcde"), 5, 1, 5); 3449 test(S("abcdefghij"), 5, 6, S("abcde"), 6, 0, 0); 3450 test(S("abcdefghij"), 5, 6, S("abcdefghij"), 0, 0, 5); 3451 test(S("abcdefghij"), 5, 6, S("abcdefghij"), 0, 1, 5); 3452 test(S("abcdefghij"), 5, 6, S("abcdefghij"), 0, 5, 5); 3453 test(S("abcdefghij"), 5, 6, S("abcdefghij"), 0, 9, 5); 3454 test(S("abcdefghij"), 5, 6, S("abcdefghij"), 0, 10, 5); 3455 test(S("abcdefghij"), 5, 6, S("abcdefghij"), 0, 11, 5); 3456 test(S("abcdefghij"), 5, 6, S("abcdefghij"), 1, 0, 5); 3457 test(S("abcdefghij"), 5, 6, S("abcdefghij"), 1, 1, 4); 3458 test(S("abcdefghij"), 5, 6, S("abcdefghij"), 1, 4, 4); 3459 test(S("abcdefghij"), 5, 6, S("abcdefghij"), 1, 8, 4); 3460 test(S("abcdefghij"), 5, 6, S("abcdefghij"), 1, 9, 4); 3461 test(S("abcdefghij"), 5, 6, S("abcdefghij"), 1, 10, 4); 3462 test(S("abcdefghij"), 5, 6, S("abcdefghij"), 5, 0, 5); 3463 test(S("abcdefghij"), 5, 6, S("abcdefghij"), 5, 1, 4); 3464 test(S("abcdefghij"), 5, 6, S("abcdefghij"), 5, 2, 3); 3465 test(S("abcdefghij"), 5, 6, S("abcdefghij"), 5, 4, 1); 3466 test(S("abcdefghij"), 5, 6, S("abcdefghij"), 5, 5, 0); 3467 test(S("abcdefghij"), 5, 6, S("abcdefghij"), 5, 6, 0); 3468 test(S("abcdefghij"), 5, 6, S("abcdefghij"), 9, 0, 5); 3469 test(S("abcdefghij"), 5, 6, S("abcdefghij"), 9, 1, -4); 3470 test(S("abcdefghij"), 5, 6, S("abcdefghij"), 9, 2, -4); 3471 test(S("abcdefghij"), 5, 6, S("abcdefghij"), 10, 0, 5); 3472 test(S("abcdefghij"), 5, 6, S("abcdefghij"), 10, 1, 5); 3473 test(S("abcdefghij"), 5, 6, S("abcdefghij"), 11, 0, 0); 3474 test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 0, 0, 5); 3475 test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 0, 1, 5); 3476 test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 0, 10, 5); 3477 test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 0, 19, 5); 3478 test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 0, 20, 5); 3479 test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 0, 21, 5); 3480 test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 1, 0, 5); 3481 test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 1, 1, 4); 3482 test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 1, 9, 4); 3483 test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 1, 18, 4); 3484 test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 1, 19, 4); 3485 test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 1, 20, 4); 3486 test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 10, 0, 5); 3487 test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 10, 1, -5); 3488 test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 10, 5, -5); 3489 test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 10, 9, -5); 3490 test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 10, 10, -5); 3491 test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 10, 11, -5); 3492 test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 19, 0, 5); 3493 test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 19, 1, -14); 3494 test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 19, 2, -14); 3495 test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 20, 0, 5); 3496 test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 20, 1, 5); 3497 test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 21, 0, 0); 3498 test(S("abcdefghij"), 9, 0, S(""), 0, 0, 0); 3499 test(S("abcdefghij"), 9, 0, S(""), 0, 1, 0); 3500 test(S("abcdefghij"), 9, 0, S(""), 1, 0, 0); 3501 test(S("abcdefghij"), 9, 0, S("abcde"), 0, 0, 0); 3502 test(S("abcdefghij"), 9, 0, S("abcde"), 0, 1, -1); 3503 test(S("abcdefghij"), 9, 0, S("abcde"), 0, 2, -2); 3504 test(S("abcdefghij"), 9, 0, S("abcde"), 0, 4, -4); 3505 test(S("abcdefghij"), 9, 0, S("abcde"), 0, 5, -5); 3506 test(S("abcdefghij"), 9, 0, S("abcde"), 0, 6, -5); 3507 test(S("abcdefghij"), 9, 0, S("abcde"), 1, 0, 0); 3508 test(S("abcdefghij"), 9, 0, S("abcde"), 1, 1, -1); 3509 test(S("abcdefghij"), 9, 0, S("abcde"), 1, 2, -2); 3510 test(S("abcdefghij"), 9, 0, S("abcde"), 1, 3, -3); 3511 test(S("abcdefghij"), 9, 0, S("abcde"), 1, 4, -4); 3512 test(S("abcdefghij"), 9, 0, S("abcde"), 1, 5, -4); 3513 test(S("abcdefghij"), 9, 0, S("abcde"), 2, 0, 0); 3514 test(S("abcdefghij"), 9, 0, S("abcde"), 2, 1, -1); 3515 test(S("abcdefghij"), 9, 0, S("abcde"), 2, 2, -2); 3516 test(S("abcdefghij"), 9, 0, S("abcde"), 2, 3, -3); 3517 test(S("abcdefghij"), 9, 0, S("abcde"), 2, 4, -3); 3518 test(S("abcdefghij"), 9, 0, S("abcde"), 4, 0, 0); 3519 test(S("abcdefghij"), 9, 0, S("abcde"), 4, 1, -1); 3520 test(S("abcdefghij"), 9, 0, S("abcde"), 4, 2, -1); 3521 test(S("abcdefghij"), 9, 0, S("abcde"), 5, 0, 0); 3522 test(S("abcdefghij"), 9, 0, S("abcde"), 5, 1, 0); 3523 test(S("abcdefghij"), 9, 0, S("abcde"), 6, 0, 0); 3524 test(S("abcdefghij"), 9, 0, S("abcdefghij"), 0, 0, 0); 3525 test(S("abcdefghij"), 9, 0, S("abcdefghij"), 0, 1, -1); 3526 test(S("abcdefghij"), 9, 0, S("abcdefghij"), 0, 5, -5); 3527 test(S("abcdefghij"), 9, 0, S("abcdefghij"), 0, 9, -9); 3528 test(S("abcdefghij"), 9, 0, S("abcdefghij"), 0, 10, -10); 3529 test(S("abcdefghij"), 9, 0, S("abcdefghij"), 0, 11, -10); 3530 test(S("abcdefghij"), 9, 0, S("abcdefghij"), 1, 0, 0); 3531 test(S("abcdefghij"), 9, 0, S("abcdefghij"), 1, 1, -1); 3532 test(S("abcdefghij"), 9, 0, S("abcdefghij"), 1, 4, -4); 3533 test(S("abcdefghij"), 9, 0, S("abcdefghij"), 1, 8, -8); 3534 test(S("abcdefghij"), 9, 0, S("abcdefghij"), 1, 9, -9); 3535 test(S("abcdefghij"), 9, 0, S("abcdefghij"), 1, 10, -9); 3536 test(S("abcdefghij"), 9, 0, S("abcdefghij"), 5, 0, 0); 3537 test(S("abcdefghij"), 9, 0, S("abcdefghij"), 5, 1, -1); 3538 test(S("abcdefghij"), 9, 0, S("abcdefghij"), 5, 2, -2); 3539 test(S("abcdefghij"), 9, 0, S("abcdefghij"), 5, 4, -4); 3540 test(S("abcdefghij"), 9, 0, S("abcdefghij"), 5, 5, -5); 3541 test(S("abcdefghij"), 9, 0, S("abcdefghij"), 5, 6, -5); 3542} 3543 3544template <class S> 3545void test33() 3546{ 3547 test(S("abcdefghij"), 9, 0, S("abcdefghij"), 9, 0, 0); 3548 test(S("abcdefghij"), 9, 0, S("abcdefghij"), 9, 1, -1); 3549 test(S("abcdefghij"), 9, 0, S("abcdefghij"), 9, 2, -1); 3550 test(S("abcdefghij"), 9, 0, S("abcdefghij"), 10, 0, 0); 3551 test(S("abcdefghij"), 9, 0, S("abcdefghij"), 10, 1, 0); 3552 test(S("abcdefghij"), 9, 0, S("abcdefghij"), 11, 0, 0); 3553 test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 0, 0, 0); 3554 test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 0, 1, -1); 3555 test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 0, 10, -10); 3556 test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 0, 19, -19); 3557 test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 0, 20, -20); 3558 test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 0, 21, -20); 3559 test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 1, 0, 0); 3560 test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 1, 1, -1); 3561 test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 1, 9, -9); 3562 test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 1, 18, -18); 3563 test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 1, 19, -19); 3564 test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 1, 20, -19); 3565 test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 10, 0, 0); 3566 test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 10, 1, -1); 3567 test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 10, 5, -5); 3568 test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 10, 9, -9); 3569 test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 10, 10, -10); 3570 test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 10, 11, -10); 3571 test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 19, 0, 0); 3572 test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 19, 1, -1); 3573 test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 19, 2, -1); 3574 test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 20, 0, 0); 3575 test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 20, 1, 0); 3576 test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 21, 0, 0); 3577 test(S("abcdefghij"), 9, 1, S(""), 0, 0, 1); 3578 test(S("abcdefghij"), 9, 1, S(""), 0, 1, 1); 3579 test(S("abcdefghij"), 9, 1, S(""), 1, 0, 0); 3580 test(S("abcdefghij"), 9, 1, S("abcde"), 0, 0, 1); 3581 test(S("abcdefghij"), 9, 1, S("abcde"), 0, 1, 9); 3582 test(S("abcdefghij"), 9, 1, S("abcde"), 0, 2, 9); 3583 test(S("abcdefghij"), 9, 1, S("abcde"), 0, 4, 9); 3584 test(S("abcdefghij"), 9, 1, S("abcde"), 0, 5, 9); 3585 test(S("abcdefghij"), 9, 1, S("abcde"), 0, 6, 9); 3586 test(S("abcdefghij"), 9, 1, S("abcde"), 1, 0, 1); 3587 test(S("abcdefghij"), 9, 1, S("abcde"), 1, 1, 8); 3588 test(S("abcdefghij"), 9, 1, S("abcde"), 1, 2, 8); 3589 test(S("abcdefghij"), 9, 1, S("abcde"), 1, 3, 8); 3590 test(S("abcdefghij"), 9, 1, S("abcde"), 1, 4, 8); 3591 test(S("abcdefghij"), 9, 1, S("abcde"), 1, 5, 8); 3592 test(S("abcdefghij"), 9, 1, S("abcde"), 2, 0, 1); 3593 test(S("abcdefghij"), 9, 1, S("abcde"), 2, 1, 7); 3594 test(S("abcdefghij"), 9, 1, S("abcde"), 2, 2, 7); 3595 test(S("abcdefghij"), 9, 1, S("abcde"), 2, 3, 7); 3596 test(S("abcdefghij"), 9, 1, S("abcde"), 2, 4, 7); 3597 test(S("abcdefghij"), 9, 1, S("abcde"), 4, 0, 1); 3598 test(S("abcdefghij"), 9, 1, S("abcde"), 4, 1, 5); 3599 test(S("abcdefghij"), 9, 1, S("abcde"), 4, 2, 5); 3600 test(S("abcdefghij"), 9, 1, S("abcde"), 5, 0, 1); 3601 test(S("abcdefghij"), 9, 1, S("abcde"), 5, 1, 1); 3602 test(S("abcdefghij"), 9, 1, S("abcde"), 6, 0, 0); 3603 test(S("abcdefghij"), 9, 1, S("abcdefghij"), 0, 0, 1); 3604 test(S("abcdefghij"), 9, 1, S("abcdefghij"), 0, 1, 9); 3605 test(S("abcdefghij"), 9, 1, S("abcdefghij"), 0, 5, 9); 3606 test(S("abcdefghij"), 9, 1, S("abcdefghij"), 0, 9, 9); 3607 test(S("abcdefghij"), 9, 1, S("abcdefghij"), 0, 10, 9); 3608 test(S("abcdefghij"), 9, 1, S("abcdefghij"), 0, 11, 9); 3609 test(S("abcdefghij"), 9, 1, S("abcdefghij"), 1, 0, 1); 3610 test(S("abcdefghij"), 9, 1, S("abcdefghij"), 1, 1, 8); 3611 test(S("abcdefghij"), 9, 1, S("abcdefghij"), 1, 4, 8); 3612 test(S("abcdefghij"), 9, 1, S("abcdefghij"), 1, 8, 8); 3613 test(S("abcdefghij"), 9, 1, S("abcdefghij"), 1, 9, 8); 3614 test(S("abcdefghij"), 9, 1, S("abcdefghij"), 1, 10, 8); 3615 test(S("abcdefghij"), 9, 1, S("abcdefghij"), 5, 0, 1); 3616 test(S("abcdefghij"), 9, 1, S("abcdefghij"), 5, 1, 4); 3617 test(S("abcdefghij"), 9, 1, S("abcdefghij"), 5, 2, 4); 3618 test(S("abcdefghij"), 9, 1, S("abcdefghij"), 5, 4, 4); 3619 test(S("abcdefghij"), 9, 1, S("abcdefghij"), 5, 5, 4); 3620 test(S("abcdefghij"), 9, 1, S("abcdefghij"), 5, 6, 4); 3621 test(S("abcdefghij"), 9, 1, S("abcdefghij"), 9, 0, 1); 3622 test(S("abcdefghij"), 9, 1, S("abcdefghij"), 9, 1, 0); 3623 test(S("abcdefghij"), 9, 1, S("abcdefghij"), 9, 2, 0); 3624 test(S("abcdefghij"), 9, 1, S("abcdefghij"), 10, 0, 1); 3625 test(S("abcdefghij"), 9, 1, S("abcdefghij"), 10, 1, 1); 3626 test(S("abcdefghij"), 9, 1, S("abcdefghij"), 11, 0, 0); 3627 test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 0, 0, 1); 3628 test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 0, 1, 9); 3629 test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 0, 10, 9); 3630 test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 0, 19, 9); 3631 test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 0, 20, 9); 3632 test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 0, 21, 9); 3633 test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 1, 0, 1); 3634 test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 1, 1, 8); 3635 test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 1, 9, 8); 3636 test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 1, 18, 8); 3637 test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 1, 19, 8); 3638 test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 1, 20, 8); 3639 test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 10, 0, 1); 3640 test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 10, 1, -1); 3641 test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 10, 5, -1); 3642 test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 10, 9, -1); 3643 test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 10, 10, -1); 3644 test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 10, 11, -1); 3645 test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 19, 0, 1); 3646 test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 19, 1, -10); 3647} 3648 3649template <class S> 3650void test34() 3651{ 3652 test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 19, 2, -10); 3653 test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 20, 0, 1); 3654 test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 20, 1, 1); 3655 test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 21, 0, 0); 3656 test(S("abcdefghij"), 9, 2, S(""), 0, 0, 1); 3657 test(S("abcdefghij"), 9, 2, S(""), 0, 1, 1); 3658 test(S("abcdefghij"), 9, 2, S(""), 1, 0, 0); 3659 test(S("abcdefghij"), 9, 2, S("abcde"), 0, 0, 1); 3660 test(S("abcdefghij"), 9, 2, S("abcde"), 0, 1, 9); 3661 test(S("abcdefghij"), 9, 2, S("abcde"), 0, 2, 9); 3662 test(S("abcdefghij"), 9, 2, S("abcde"), 0, 4, 9); 3663 test(S("abcdefghij"), 9, 2, S("abcde"), 0, 5, 9); 3664 test(S("abcdefghij"), 9, 2, S("abcde"), 0, 6, 9); 3665 test(S("abcdefghij"), 9, 2, S("abcde"), 1, 0, 1); 3666 test(S("abcdefghij"), 9, 2, S("abcde"), 1, 1, 8); 3667 test(S("abcdefghij"), 9, 2, S("abcde"), 1, 2, 8); 3668 test(S("abcdefghij"), 9, 2, S("abcde"), 1, 3, 8); 3669 test(S("abcdefghij"), 9, 2, S("abcde"), 1, 4, 8); 3670 test(S("abcdefghij"), 9, 2, S("abcde"), 1, 5, 8); 3671 test(S("abcdefghij"), 9, 2, S("abcde"), 2, 0, 1); 3672 test(S("abcdefghij"), 9, 2, S("abcde"), 2, 1, 7); 3673 test(S("abcdefghij"), 9, 2, S("abcde"), 2, 2, 7); 3674 test(S("abcdefghij"), 9, 2, S("abcde"), 2, 3, 7); 3675 test(S("abcdefghij"), 9, 2, S("abcde"), 2, 4, 7); 3676 test(S("abcdefghij"), 9, 2, S("abcde"), 4, 0, 1); 3677 test(S("abcdefghij"), 9, 2, S("abcde"), 4, 1, 5); 3678 test(S("abcdefghij"), 9, 2, S("abcde"), 4, 2, 5); 3679 test(S("abcdefghij"), 9, 2, S("abcde"), 5, 0, 1); 3680 test(S("abcdefghij"), 9, 2, S("abcde"), 5, 1, 1); 3681 test(S("abcdefghij"), 9, 2, S("abcde"), 6, 0, 0); 3682 test(S("abcdefghij"), 9, 2, S("abcdefghij"), 0, 0, 1); 3683 test(S("abcdefghij"), 9, 2, S("abcdefghij"), 0, 1, 9); 3684 test(S("abcdefghij"), 9, 2, S("abcdefghij"), 0, 5, 9); 3685 test(S("abcdefghij"), 9, 2, S("abcdefghij"), 0, 9, 9); 3686 test(S("abcdefghij"), 9, 2, S("abcdefghij"), 0, 10, 9); 3687 test(S("abcdefghij"), 9, 2, S("abcdefghij"), 0, 11, 9); 3688 test(S("abcdefghij"), 9, 2, S("abcdefghij"), 1, 0, 1); 3689 test(S("abcdefghij"), 9, 2, S("abcdefghij"), 1, 1, 8); 3690 test(S("abcdefghij"), 9, 2, S("abcdefghij"), 1, 4, 8); 3691 test(S("abcdefghij"), 9, 2, S("abcdefghij"), 1, 8, 8); 3692 test(S("abcdefghij"), 9, 2, S("abcdefghij"), 1, 9, 8); 3693 test(S("abcdefghij"), 9, 2, S("abcdefghij"), 1, 10, 8); 3694 test(S("abcdefghij"), 9, 2, S("abcdefghij"), 5, 0, 1); 3695 test(S("abcdefghij"), 9, 2, S("abcdefghij"), 5, 1, 4); 3696 test(S("abcdefghij"), 9, 2, S("abcdefghij"), 5, 2, 4); 3697 test(S("abcdefghij"), 9, 2, S("abcdefghij"), 5, 4, 4); 3698 test(S("abcdefghij"), 9, 2, S("abcdefghij"), 5, 5, 4); 3699 test(S("abcdefghij"), 9, 2, S("abcdefghij"), 5, 6, 4); 3700 test(S("abcdefghij"), 9, 2, S("abcdefghij"), 9, 0, 1); 3701 test(S("abcdefghij"), 9, 2, S("abcdefghij"), 9, 1, 0); 3702 test(S("abcdefghij"), 9, 2, S("abcdefghij"), 9, 2, 0); 3703 test(S("abcdefghij"), 9, 2, S("abcdefghij"), 10, 0, 1); 3704 test(S("abcdefghij"), 9, 2, S("abcdefghij"), 10, 1, 1); 3705 test(S("abcdefghij"), 9, 2, S("abcdefghij"), 11, 0, 0); 3706 test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 0, 0, 1); 3707 test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 0, 1, 9); 3708 test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 0, 10, 9); 3709 test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 0, 19, 9); 3710 test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 0, 20, 9); 3711 test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 0, 21, 9); 3712 test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 1, 0, 1); 3713 test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 1, 1, 8); 3714 test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 1, 9, 8); 3715 test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 1, 18, 8); 3716 test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 1, 19, 8); 3717 test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 1, 20, 8); 3718 test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 10, 0, 1); 3719 test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 10, 1, -1); 3720 test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 10, 5, -1); 3721 test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 10, 9, -1); 3722 test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 10, 10, -1); 3723 test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 10, 11, -1); 3724 test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 19, 0, 1); 3725 test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 19, 1, -10); 3726 test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 19, 2, -10); 3727 test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 20, 0, 1); 3728 test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 20, 1, 1); 3729 test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 21, 0, 0); 3730 test(S("abcdefghij"), 10, 0, S(""), 0, 0, 0); 3731 test(S("abcdefghij"), 10, 0, S(""), 0, 1, 0); 3732 test(S("abcdefghij"), 10, 0, S(""), 1, 0, 0); 3733 test(S("abcdefghij"), 10, 0, S("abcde"), 0, 0, 0); 3734 test(S("abcdefghij"), 10, 0, S("abcde"), 0, 1, -1); 3735 test(S("abcdefghij"), 10, 0, S("abcde"), 0, 2, -2); 3736 test(S("abcdefghij"), 10, 0, S("abcde"), 0, 4, -4); 3737 test(S("abcdefghij"), 10, 0, S("abcde"), 0, 5, -5); 3738 test(S("abcdefghij"), 10, 0, S("abcde"), 0, 6, -5); 3739 test(S("abcdefghij"), 10, 0, S("abcde"), 1, 0, 0); 3740 test(S("abcdefghij"), 10, 0, S("abcde"), 1, 1, -1); 3741 test(S("abcdefghij"), 10, 0, S("abcde"), 1, 2, -2); 3742 test(S("abcdefghij"), 10, 0, S("abcde"), 1, 3, -3); 3743 test(S("abcdefghij"), 10, 0, S("abcde"), 1, 4, -4); 3744 test(S("abcdefghij"), 10, 0, S("abcde"), 1, 5, -4); 3745 test(S("abcdefghij"), 10, 0, S("abcde"), 2, 0, 0); 3746 test(S("abcdefghij"), 10, 0, S("abcde"), 2, 1, -1); 3747 test(S("abcdefghij"), 10, 0, S("abcde"), 2, 2, -2); 3748 test(S("abcdefghij"), 10, 0, S("abcde"), 2, 3, -3); 3749 test(S("abcdefghij"), 10, 0, S("abcde"), 2, 4, -3); 3750 test(S("abcdefghij"), 10, 0, S("abcde"), 4, 0, 0); 3751 test(S("abcdefghij"), 10, 0, S("abcde"), 4, 1, -1); 3752} 3753 3754template <class S> 3755void test35() 3756{ 3757 test(S("abcdefghij"), 10, 0, S("abcde"), 4, 2, -1); 3758 test(S("abcdefghij"), 10, 0, S("abcde"), 5, 0, 0); 3759 test(S("abcdefghij"), 10, 0, S("abcde"), 5, 1, 0); 3760 test(S("abcdefghij"), 10, 0, S("abcde"), 6, 0, 0); 3761 test(S("abcdefghij"), 10, 0, S("abcdefghij"), 0, 0, 0); 3762 test(S("abcdefghij"), 10, 0, S("abcdefghij"), 0, 1, -1); 3763 test(S("abcdefghij"), 10, 0, S("abcdefghij"), 0, 5, -5); 3764 test(S("abcdefghij"), 10, 0, S("abcdefghij"), 0, 9, -9); 3765 test(S("abcdefghij"), 10, 0, S("abcdefghij"), 0, 10, -10); 3766 test(S("abcdefghij"), 10, 0, S("abcdefghij"), 0, 11, -10); 3767 test(S("abcdefghij"), 10, 0, S("abcdefghij"), 1, 0, 0); 3768 test(S("abcdefghij"), 10, 0, S("abcdefghij"), 1, 1, -1); 3769 test(S("abcdefghij"), 10, 0, S("abcdefghij"), 1, 4, -4); 3770 test(S("abcdefghij"), 10, 0, S("abcdefghij"), 1, 8, -8); 3771 test(S("abcdefghij"), 10, 0, S("abcdefghij"), 1, 9, -9); 3772 test(S("abcdefghij"), 10, 0, S("abcdefghij"), 1, 10, -9); 3773 test(S("abcdefghij"), 10, 0, S("abcdefghij"), 5, 0, 0); 3774 test(S("abcdefghij"), 10, 0, S("abcdefghij"), 5, 1, -1); 3775 test(S("abcdefghij"), 10, 0, S("abcdefghij"), 5, 2, -2); 3776 test(S("abcdefghij"), 10, 0, S("abcdefghij"), 5, 4, -4); 3777 test(S("abcdefghij"), 10, 0, S("abcdefghij"), 5, 5, -5); 3778 test(S("abcdefghij"), 10, 0, S("abcdefghij"), 5, 6, -5); 3779 test(S("abcdefghij"), 10, 0, S("abcdefghij"), 9, 0, 0); 3780 test(S("abcdefghij"), 10, 0, S("abcdefghij"), 9, 1, -1); 3781 test(S("abcdefghij"), 10, 0, S("abcdefghij"), 9, 2, -1); 3782 test(S("abcdefghij"), 10, 0, S("abcdefghij"), 10, 0, 0); 3783 test(S("abcdefghij"), 10, 0, S("abcdefghij"), 10, 1, 0); 3784 test(S("abcdefghij"), 10, 0, S("abcdefghij"), 11, 0, 0); 3785 test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 0, 0, 0); 3786 test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 0, 1, -1); 3787 test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 0, 10, -10); 3788 test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 0, 19, -19); 3789 test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 0, 20, -20); 3790 test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 0, 21, -20); 3791 test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 1, 0, 0); 3792 test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 1, 1, -1); 3793 test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 1, 9, -9); 3794 test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 1, 18, -18); 3795 test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 1, 19, -19); 3796 test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 1, 20, -19); 3797 test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 10, 0, 0); 3798 test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 10, 1, -1); 3799 test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 10, 5, -5); 3800 test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 10, 9, -9); 3801 test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 10, 10, -10); 3802 test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 10, 11, -10); 3803 test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 19, 0, 0); 3804 test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 19, 1, -1); 3805 test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 19, 2, -1); 3806 test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 20, 0, 0); 3807 test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 20, 1, 0); 3808 test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 21, 0, 0); 3809 test(S("abcdefghij"), 10, 1, S(""), 0, 0, 0); 3810 test(S("abcdefghij"), 10, 1, S(""), 0, 1, 0); 3811 test(S("abcdefghij"), 10, 1, S(""), 1, 0, 0); 3812 test(S("abcdefghij"), 10, 1, S("abcde"), 0, 0, 0); 3813 test(S("abcdefghij"), 10, 1, S("abcde"), 0, 1, -1); 3814 test(S("abcdefghij"), 10, 1, S("abcde"), 0, 2, -2); 3815 test(S("abcdefghij"), 10, 1, S("abcde"), 0, 4, -4); 3816 test(S("abcdefghij"), 10, 1, S("abcde"), 0, 5, -5); 3817 test(S("abcdefghij"), 10, 1, S("abcde"), 0, 6, -5); 3818 test(S("abcdefghij"), 10, 1, S("abcde"), 1, 0, 0); 3819 test(S("abcdefghij"), 10, 1, S("abcde"), 1, 1, -1); 3820 test(S("abcdefghij"), 10, 1, S("abcde"), 1, 2, -2); 3821 test(S("abcdefghij"), 10, 1, S("abcde"), 1, 3, -3); 3822 test(S("abcdefghij"), 10, 1, S("abcde"), 1, 4, -4); 3823 test(S("abcdefghij"), 10, 1, S("abcde"), 1, 5, -4); 3824 test(S("abcdefghij"), 10, 1, S("abcde"), 2, 0, 0); 3825 test(S("abcdefghij"), 10, 1, S("abcde"), 2, 1, -1); 3826 test(S("abcdefghij"), 10, 1, S("abcde"), 2, 2, -2); 3827 test(S("abcdefghij"), 10, 1, S("abcde"), 2, 3, -3); 3828 test(S("abcdefghij"), 10, 1, S("abcde"), 2, 4, -3); 3829 test(S("abcdefghij"), 10, 1, S("abcde"), 4, 0, 0); 3830 test(S("abcdefghij"), 10, 1, S("abcde"), 4, 1, -1); 3831 test(S("abcdefghij"), 10, 1, S("abcde"), 4, 2, -1); 3832 test(S("abcdefghij"), 10, 1, S("abcde"), 5, 0, 0); 3833 test(S("abcdefghij"), 10, 1, S("abcde"), 5, 1, 0); 3834 test(S("abcdefghij"), 10, 1, S("abcde"), 6, 0, 0); 3835 test(S("abcdefghij"), 10, 1, S("abcdefghij"), 0, 0, 0); 3836 test(S("abcdefghij"), 10, 1, S("abcdefghij"), 0, 1, -1); 3837 test(S("abcdefghij"), 10, 1, S("abcdefghij"), 0, 5, -5); 3838 test(S("abcdefghij"), 10, 1, S("abcdefghij"), 0, 9, -9); 3839 test(S("abcdefghij"), 10, 1, S("abcdefghij"), 0, 10, -10); 3840 test(S("abcdefghij"), 10, 1, S("abcdefghij"), 0, 11, -10); 3841 test(S("abcdefghij"), 10, 1, S("abcdefghij"), 1, 0, 0); 3842 test(S("abcdefghij"), 10, 1, S("abcdefghij"), 1, 1, -1); 3843 test(S("abcdefghij"), 10, 1, S("abcdefghij"), 1, 4, -4); 3844 test(S("abcdefghij"), 10, 1, S("abcdefghij"), 1, 8, -8); 3845 test(S("abcdefghij"), 10, 1, S("abcdefghij"), 1, 9, -9); 3846 test(S("abcdefghij"), 10, 1, S("abcdefghij"), 1, 10, -9); 3847 test(S("abcdefghij"), 10, 1, S("abcdefghij"), 5, 0, 0); 3848 test(S("abcdefghij"), 10, 1, S("abcdefghij"), 5, 1, -1); 3849 test(S("abcdefghij"), 10, 1, S("abcdefghij"), 5, 2, -2); 3850 test(S("abcdefghij"), 10, 1, S("abcdefghij"), 5, 4, -4); 3851 test(S("abcdefghij"), 10, 1, S("abcdefghij"), 5, 5, -5); 3852 test(S("abcdefghij"), 10, 1, S("abcdefghij"), 5, 6, -5); 3853 test(S("abcdefghij"), 10, 1, S("abcdefghij"), 9, 0, 0); 3854 test(S("abcdefghij"), 10, 1, S("abcdefghij"), 9, 1, -1); 3855 test(S("abcdefghij"), 10, 1, S("abcdefghij"), 9, 2, -1); 3856 test(S("abcdefghij"), 10, 1, S("abcdefghij"), 10, 0, 0); 3857} 3858 3859template <class S> 3860void test36() 3861{ 3862 test(S("abcdefghij"), 10, 1, S("abcdefghij"), 10, 1, 0); 3863 test(S("abcdefghij"), 10, 1, S("abcdefghij"), 11, 0, 0); 3864 test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 0, 0, 0); 3865 test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 0, 1, -1); 3866 test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 0, 10, -10); 3867 test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 0, 19, -19); 3868 test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 0, 20, -20); 3869 test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 0, 21, -20); 3870 test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 1, 0, 0); 3871 test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 1, 1, -1); 3872 test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 1, 9, -9); 3873 test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 1, 18, -18); 3874 test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 1, 19, -19); 3875 test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 1, 20, -19); 3876 test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 10, 0, 0); 3877 test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 10, 1, -1); 3878 test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 10, 5, -5); 3879 test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 10, 9, -9); 3880 test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 10, 10, -10); 3881 test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 10, 11, -10); 3882 test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 19, 0, 0); 3883 test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 19, 1, -1); 3884 test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 19, 2, -1); 3885 test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 20, 0, 0); 3886 test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 20, 1, 0); 3887 test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 21, 0, 0); 3888 test(S("abcdefghij"), 11, 0, S(""), 0, 0, 0); 3889 test(S("abcdefghij"), 11, 0, S(""), 0, 1, 0); 3890 test(S("abcdefghij"), 11, 0, S(""), 1, 0, 0); 3891 test(S("abcdefghij"), 11, 0, S("abcde"), 0, 0, 0); 3892 test(S("abcdefghij"), 11, 0, S("abcde"), 0, 1, 0); 3893 test(S("abcdefghij"), 11, 0, S("abcde"), 0, 2, 0); 3894 test(S("abcdefghij"), 11, 0, S("abcde"), 0, 4, 0); 3895 test(S("abcdefghij"), 11, 0, S("abcde"), 0, 5, 0); 3896 test(S("abcdefghij"), 11, 0, S("abcde"), 0, 6, 0); 3897 test(S("abcdefghij"), 11, 0, S("abcde"), 1, 0, 0); 3898 test(S("abcdefghij"), 11, 0, S("abcde"), 1, 1, 0); 3899 test(S("abcdefghij"), 11, 0, S("abcde"), 1, 2, 0); 3900 test(S("abcdefghij"), 11, 0, S("abcde"), 1, 3, 0); 3901 test(S("abcdefghij"), 11, 0, S("abcde"), 1, 4, 0); 3902 test(S("abcdefghij"), 11, 0, S("abcde"), 1, 5, 0); 3903 test(S("abcdefghij"), 11, 0, S("abcde"), 2, 0, 0); 3904 test(S("abcdefghij"), 11, 0, S("abcde"), 2, 1, 0); 3905 test(S("abcdefghij"), 11, 0, S("abcde"), 2, 2, 0); 3906 test(S("abcdefghij"), 11, 0, S("abcde"), 2, 3, 0); 3907 test(S("abcdefghij"), 11, 0, S("abcde"), 2, 4, 0); 3908 test(S("abcdefghij"), 11, 0, S("abcde"), 4, 0, 0); 3909 test(S("abcdefghij"), 11, 0, S("abcde"), 4, 1, 0); 3910 test(S("abcdefghij"), 11, 0, S("abcde"), 4, 2, 0); 3911 test(S("abcdefghij"), 11, 0, S("abcde"), 5, 0, 0); 3912 test(S("abcdefghij"), 11, 0, S("abcde"), 5, 1, 0); 3913 test(S("abcdefghij"), 11, 0, S("abcde"), 6, 0, 0); 3914 test(S("abcdefghij"), 11, 0, S("abcdefghij"), 0, 0, 0); 3915 test(S("abcdefghij"), 11, 0, S("abcdefghij"), 0, 1, 0); 3916 test(S("abcdefghij"), 11, 0, S("abcdefghij"), 0, 5, 0); 3917 test(S("abcdefghij"), 11, 0, S("abcdefghij"), 0, 9, 0); 3918 test(S("abcdefghij"), 11, 0, S("abcdefghij"), 0, 10, 0); 3919 test(S("abcdefghij"), 11, 0, S("abcdefghij"), 0, 11, 0); 3920 test(S("abcdefghij"), 11, 0, S("abcdefghij"), 1, 0, 0); 3921 test(S("abcdefghij"), 11, 0, S("abcdefghij"), 1, 1, 0); 3922 test(S("abcdefghij"), 11, 0, S("abcdefghij"), 1, 4, 0); 3923 test(S("abcdefghij"), 11, 0, S("abcdefghij"), 1, 8, 0); 3924 test(S("abcdefghij"), 11, 0, S("abcdefghij"), 1, 9, 0); 3925 test(S("abcdefghij"), 11, 0, S("abcdefghij"), 1, 10, 0); 3926 test(S("abcdefghij"), 11, 0, S("abcdefghij"), 5, 0, 0); 3927 test(S("abcdefghij"), 11, 0, S("abcdefghij"), 5, 1, 0); 3928 test(S("abcdefghij"), 11, 0, S("abcdefghij"), 5, 2, 0); 3929 test(S("abcdefghij"), 11, 0, S("abcdefghij"), 5, 4, 0); 3930 test(S("abcdefghij"), 11, 0, S("abcdefghij"), 5, 5, 0); 3931 test(S("abcdefghij"), 11, 0, S("abcdefghij"), 5, 6, 0); 3932 test(S("abcdefghij"), 11, 0, S("abcdefghij"), 9, 0, 0); 3933 test(S("abcdefghij"), 11, 0, S("abcdefghij"), 9, 1, 0); 3934 test(S("abcdefghij"), 11, 0, S("abcdefghij"), 9, 2, 0); 3935 test(S("abcdefghij"), 11, 0, S("abcdefghij"), 10, 0, 0); 3936 test(S("abcdefghij"), 11, 0, S("abcdefghij"), 10, 1, 0); 3937 test(S("abcdefghij"), 11, 0, S("abcdefghij"), 11, 0, 0); 3938 test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 0, 0, 0); 3939 test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 0, 1, 0); 3940 test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 0, 10, 0); 3941 test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 0, 19, 0); 3942 test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 0, 20, 0); 3943 test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 0, 21, 0); 3944 test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 1, 0, 0); 3945 test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 1, 1, 0); 3946 test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 1, 9, 0); 3947 test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 1, 18, 0); 3948 test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 1, 19, 0); 3949 test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 1, 20, 0); 3950 test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 10, 0, 0); 3951 test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 10, 1, 0); 3952 test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 10, 5, 0); 3953 test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 10, 9, 0); 3954 test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 10, 10, 0); 3955 test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 10, 11, 0); 3956 test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 19, 0, 0); 3957 test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 19, 1, 0); 3958 test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 19, 2, 0); 3959 test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 20, 0, 0); 3960 test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 20, 1, 0); 3961 test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 21, 0, 0); 3962} 3963 3964template <class S> 3965void test37() 3966{ 3967 test(S("abcdefghijklmnopqrst"), 0, 0, S(""), 0, 0, 0); 3968 test(S("abcdefghijklmnopqrst"), 0, 0, S(""), 0, 1, 0); 3969 test(S("abcdefghijklmnopqrst"), 0, 0, S(""), 1, 0, 0); 3970 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 0, 0, 0); 3971 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 0, 1, -1); 3972 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 0, 2, -2); 3973 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 0, 4, -4); 3974 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 0, 5, -5); 3975 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 0, 6, -5); 3976 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 1, 0, 0); 3977 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 1, 1, -1); 3978 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 1, 2, -2); 3979 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 1, 3, -3); 3980 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 1, 4, -4); 3981 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 1, 5, -4); 3982 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 2, 0, 0); 3983 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 2, 1, -1); 3984 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 2, 2, -2); 3985 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 2, 3, -3); 3986 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 2, 4, -3); 3987 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 4, 0, 0); 3988 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 4, 1, -1); 3989 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 4, 2, -1); 3990 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 5, 0, 0); 3991 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 5, 1, 0); 3992 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 6, 0, 0); 3993 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 0, 0, 0); 3994 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 0, 1, -1); 3995 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 0, 5, -5); 3996 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 0, 9, -9); 3997 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 0, 10, -10); 3998 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 0, 11, -10); 3999 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 1, 0, 0); 4000 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 1, 1, -1); 4001 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 1, 4, -4); 4002 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 1, 8, -8); 4003 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 1, 9, -9); 4004 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 1, 10, -9); 4005 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 5, 0, 0); 4006 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 5, 1, -1); 4007 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 5, 2, -2); 4008 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 5, 4, -4); 4009 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 5, 5, -5); 4010 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 5, 6, -5); 4011 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 9, 0, 0); 4012 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 9, 1, -1); 4013 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 9, 2, -1); 4014 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 10, 0, 0); 4015 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 10, 1, 0); 4016 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 11, 0, 0); 4017 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 0, 0, 0); 4018 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 0, 1, -1); 4019 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 0, 10, -10); 4020 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 0, 19, -19); 4021 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 0, 20, -20); 4022 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 0, 21, -20); 4023 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 1, 0, 0); 4024 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 1, 1, -1); 4025 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 1, 9, -9); 4026 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 1, 18, -18); 4027 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 1, 19, -19); 4028 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 1, 20, -19); 4029 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 10, 0, 0); 4030 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 10, 1, -1); 4031 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 10, 5, -5); 4032 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 10, 9, -9); 4033 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 10, 10, -10); 4034 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 10, 11, -10); 4035 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 19, 0, 0); 4036 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 19, 1, -1); 4037 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 19, 2, -1); 4038 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 20, 0, 0); 4039 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 20, 1, 0); 4040 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 21, 0, 0); 4041 test(S("abcdefghijklmnopqrst"), 0, 1, S(""), 0, 0, 1); 4042 test(S("abcdefghijklmnopqrst"), 0, 1, S(""), 0, 1, 1); 4043 test(S("abcdefghijklmnopqrst"), 0, 1, S(""), 1, 0, 0); 4044 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 0, 0, 1); 4045 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 0, 1, 0); 4046 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 0, 2, -1); 4047 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 0, 4, -3); 4048 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 0, 5, -4); 4049 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 0, 6, -4); 4050 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 1, 0, 1); 4051 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 1, 1, -1); 4052 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 1, 2, -1); 4053 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 1, 3, -1); 4054 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 1, 4, -1); 4055 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 1, 5, -1); 4056 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 2, 0, 1); 4057 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 2, 1, -2); 4058 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 2, 2, -2); 4059 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 2, 3, -2); 4060 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 2, 4, -2); 4061 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 4, 0, 1); 4062 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 4, 1, -4); 4063 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 4, 2, -4); 4064 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 5, 0, 1); 4065 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 5, 1, 1); 4066 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 6, 0, 0); 4067} 4068 4069template <class S> 4070void test38() 4071{ 4072 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 0, 0, 1); 4073 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 0, 1, 0); 4074 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 0, 5, -4); 4075 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 0, 9, -8); 4076 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 0, 10, -9); 4077 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 0, 11, -9); 4078 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 1, 0, 1); 4079 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 1, 1, -1); 4080 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 1, 4, -1); 4081 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 1, 8, -1); 4082 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 1, 9, -1); 4083 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 1, 10, -1); 4084 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 5, 0, 1); 4085 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 5, 1, -5); 4086 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 5, 2, -5); 4087 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 5, 4, -5); 4088 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 5, 5, -5); 4089 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 5, 6, -5); 4090 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 9, 0, 1); 4091 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 9, 1, -9); 4092 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 9, 2, -9); 4093 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 10, 0, 1); 4094 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 10, 1, 1); 4095 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 11, 0, 0); 4096 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 0, 0, 1); 4097 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 0, 1, 0); 4098 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 0, 10, -9); 4099 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 0, 19, -18); 4100 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 0, 20, -19); 4101 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 0, 21, -19); 4102 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 1, 0, 1); 4103 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 1, 1, -1); 4104 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 1, 9, -1); 4105 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 1, 18, -1); 4106 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 1, 19, -1); 4107 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 1, 20, -1); 4108 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 10, 0, 1); 4109 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 10, 1, -10); 4110 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 10, 5, -10); 4111 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 10, 9, -10); 4112 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 10, 10, -10); 4113 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 10, 11, -10); 4114 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 19, 0, 1); 4115 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 19, 1, -19); 4116 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 19, 2, -19); 4117 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 20, 0, 1); 4118 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 20, 1, 1); 4119 test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 21, 0, 0); 4120 test(S("abcdefghijklmnopqrst"), 0, 10, S(""), 0, 0, 10); 4121 test(S("abcdefghijklmnopqrst"), 0, 10, S(""), 0, 1, 10); 4122 test(S("abcdefghijklmnopqrst"), 0, 10, S(""), 1, 0, 0); 4123 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 0, 0, 10); 4124 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 0, 1, 9); 4125 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 0, 2, 8); 4126 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 0, 4, 6); 4127 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 0, 5, 5); 4128 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 0, 6, 5); 4129 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 1, 0, 10); 4130 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 1, 1, -1); 4131 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 1, 2, -1); 4132 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 1, 3, -1); 4133 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 1, 4, -1); 4134 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 1, 5, -1); 4135 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 2, 0, 10); 4136 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 2, 1, -2); 4137 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 2, 2, -2); 4138 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 2, 3, -2); 4139 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 2, 4, -2); 4140 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 4, 0, 10); 4141 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 4, 1, -4); 4142 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 4, 2, -4); 4143 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 5, 0, 10); 4144 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 5, 1, 10); 4145 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 6, 0, 0); 4146 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 0, 0, 10); 4147 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 0, 1, 9); 4148 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 0, 5, 5); 4149 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 0, 9, 1); 4150 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 0, 10, 0); 4151 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 0, 11, 0); 4152 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 1, 0, 10); 4153 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 1, 1, -1); 4154 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 1, 4, -1); 4155 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 1, 8, -1); 4156 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 1, 9, -1); 4157 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 1, 10, -1); 4158 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 5, 0, 10); 4159 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 5, 1, -5); 4160 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 5, 2, -5); 4161 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 5, 4, -5); 4162 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 5, 5, -5); 4163 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 5, 6, -5); 4164 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 9, 0, 10); 4165 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 9, 1, -9); 4166 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 9, 2, -9); 4167 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 10, 0, 10); 4168 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 10, 1, 10); 4169 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 11, 0, 0); 4170 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 0, 0, 10); 4171 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 0, 1, 9); 4172} 4173 4174template <class S> 4175void test39() 4176{ 4177 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 0, 10, 0); 4178 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 0, 19, -9); 4179 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 0, 20, -10); 4180 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 0, 21, -10); 4181 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 1, 0, 10); 4182 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 1, 1, -1); 4183 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 1, 9, -1); 4184 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 1, 18, -1); 4185 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 1, 19, -1); 4186 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 1, 20, -1); 4187 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 10, 0, 10); 4188 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 10, 1, -10); 4189 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 10, 5, -10); 4190 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 10, 9, -10); 4191 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 10, 10, -10); 4192 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 10, 11, -10); 4193 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 19, 0, 10); 4194 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 19, 1, -19); 4195 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 19, 2, -19); 4196 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 20, 0, 10); 4197 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 20, 1, 10); 4198 test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 21, 0, 0); 4199 test(S("abcdefghijklmnopqrst"), 0, 19, S(""), 0, 0, 19); 4200 test(S("abcdefghijklmnopqrst"), 0, 19, S(""), 0, 1, 19); 4201 test(S("abcdefghijklmnopqrst"), 0, 19, S(""), 1, 0, 0); 4202 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 0, 0, 19); 4203 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 0, 1, 18); 4204 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 0, 2, 17); 4205 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 0, 4, 15); 4206 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 0, 5, 14); 4207 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 0, 6, 14); 4208 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 1, 0, 19); 4209 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 1, 1, -1); 4210 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 1, 2, -1); 4211 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 1, 3, -1); 4212 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 1, 4, -1); 4213 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 1, 5, -1); 4214 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 2, 0, 19); 4215 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 2, 1, -2); 4216 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 2, 2, -2); 4217 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 2, 3, -2); 4218 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 2, 4, -2); 4219 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 4, 0, 19); 4220 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 4, 1, -4); 4221 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 4, 2, -4); 4222 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 5, 0, 19); 4223 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 5, 1, 19); 4224 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 6, 0, 0); 4225 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 0, 0, 19); 4226 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 0, 1, 18); 4227 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 0, 5, 14); 4228 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 0, 9, 10); 4229 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 0, 10, 9); 4230 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 0, 11, 9); 4231 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 1, 0, 19); 4232 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 1, 1, -1); 4233 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 1, 4, -1); 4234 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 1, 8, -1); 4235 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 1, 9, -1); 4236 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 1, 10, -1); 4237 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 5, 0, 19); 4238 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 5, 1, -5); 4239 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 5, 2, -5); 4240 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 5, 4, -5); 4241 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 5, 5, -5); 4242 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 5, 6, -5); 4243 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 9, 0, 19); 4244 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 9, 1, -9); 4245 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 9, 2, -9); 4246 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 10, 0, 19); 4247 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 10, 1, 19); 4248 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 11, 0, 0); 4249 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 0, 0, 19); 4250 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 0, 1, 18); 4251 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 0, 10, 9); 4252 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 0, 19, 0); 4253 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 0, 20, -1); 4254 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 0, 21, -1); 4255 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 1, 0, 19); 4256 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 1, 1, -1); 4257 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 1, 9, -1); 4258 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 1, 18, -1); 4259 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 1, 19, -1); 4260 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 1, 20, -1); 4261 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 10, 0, 19); 4262 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 10, 1, -10); 4263 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 10, 5, -10); 4264 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 10, 9, -10); 4265 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 10, 10, -10); 4266 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 10, 11, -10); 4267 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 19, 0, 19); 4268 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 19, 1, -19); 4269 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 19, 2, -19); 4270 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 20, 0, 19); 4271 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 20, 1, 19); 4272 test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 21, 0, 0); 4273 test(S("abcdefghijklmnopqrst"), 0, 20, S(""), 0, 0, 20); 4274 test(S("abcdefghijklmnopqrst"), 0, 20, S(""), 0, 1, 20); 4275 test(S("abcdefghijklmnopqrst"), 0, 20, S(""), 1, 0, 0); 4276 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 0, 0, 20); 4277} 4278 4279template <class S> 4280void test40() 4281{ 4282 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 0, 1, 19); 4283 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 0, 2, 18); 4284 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 0, 4, 16); 4285 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 0, 5, 15); 4286 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 0, 6, 15); 4287 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 1, 0, 20); 4288 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 1, 1, -1); 4289 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 1, 2, -1); 4290 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 1, 3, -1); 4291 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 1, 4, -1); 4292 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 1, 5, -1); 4293 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 2, 0, 20); 4294 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 2, 1, -2); 4295 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 2, 2, -2); 4296 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 2, 3, -2); 4297 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 2, 4, -2); 4298 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 4, 0, 20); 4299 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 4, 1, -4); 4300 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 4, 2, -4); 4301 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 5, 0, 20); 4302 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 5, 1, 20); 4303 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 6, 0, 0); 4304 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 0, 0, 20); 4305 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 0, 1, 19); 4306 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 0, 5, 15); 4307 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 0, 9, 11); 4308 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 0, 10, 10); 4309 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 0, 11, 10); 4310 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 1, 0, 20); 4311 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 1, 1, -1); 4312 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 1, 4, -1); 4313 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 1, 8, -1); 4314 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 1, 9, -1); 4315 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 1, 10, -1); 4316 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 5, 0, 20); 4317 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 5, 1, -5); 4318 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 5, 2, -5); 4319 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 5, 4, -5); 4320 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 5, 5, -5); 4321 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 5, 6, -5); 4322 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 9, 0, 20); 4323 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 9, 1, -9); 4324 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 9, 2, -9); 4325 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 10, 0, 20); 4326 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 10, 1, 20); 4327 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 11, 0, 0); 4328 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 0, 0, 20); 4329 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 0, 1, 19); 4330 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 0, 10, 10); 4331 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 0, 19, 1); 4332 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 0, 20, 0); 4333 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 0, 21, 0); 4334 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 1, 0, 20); 4335 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 1, 1, -1); 4336 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 1, 9, -1); 4337 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 1, 18, -1); 4338 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 1, 19, -1); 4339 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 1, 20, -1); 4340 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 10, 0, 20); 4341 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 10, 1, -10); 4342 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 10, 5, -10); 4343 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 10, 9, -10); 4344 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 10, 10, -10); 4345 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 10, 11, -10); 4346 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 19, 0, 20); 4347 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 19, 1, -19); 4348 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 19, 2, -19); 4349 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 20, 0, 20); 4350 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 20, 1, 20); 4351 test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 21, 0, 0); 4352 test(S("abcdefghijklmnopqrst"), 0, 21, S(""), 0, 0, 20); 4353 test(S("abcdefghijklmnopqrst"), 0, 21, S(""), 0, 1, 20); 4354 test(S("abcdefghijklmnopqrst"), 0, 21, S(""), 1, 0, 0); 4355 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 0, 0, 20); 4356 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 0, 1, 19); 4357 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 0, 2, 18); 4358 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 0, 4, 16); 4359 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 0, 5, 15); 4360 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 0, 6, 15); 4361 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 1, 0, 20); 4362 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 1, 1, -1); 4363 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 1, 2, -1); 4364 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 1, 3, -1); 4365 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 1, 4, -1); 4366 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 1, 5, -1); 4367 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 2, 0, 20); 4368 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 2, 1, -2); 4369 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 2, 2, -2); 4370 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 2, 3, -2); 4371 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 2, 4, -2); 4372 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 4, 0, 20); 4373 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 4, 1, -4); 4374 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 4, 2, -4); 4375 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 5, 0, 20); 4376 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 5, 1, 20); 4377 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 6, 0, 0); 4378 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 0, 0, 20); 4379 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 0, 1, 19); 4380 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 0, 5, 15); 4381 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 0, 9, 11); 4382} 4383 4384template <class S> 4385void test41() 4386{ 4387 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 0, 10, 10); 4388 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 0, 11, 10); 4389 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 1, 0, 20); 4390 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 1, 1, -1); 4391 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 1, 4, -1); 4392 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 1, 8, -1); 4393 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 1, 9, -1); 4394 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 1, 10, -1); 4395 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 5, 0, 20); 4396 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 5, 1, -5); 4397 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 5, 2, -5); 4398 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 5, 4, -5); 4399 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 5, 5, -5); 4400 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 5, 6, -5); 4401 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 9, 0, 20); 4402 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 9, 1, -9); 4403 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 9, 2, -9); 4404 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 10, 0, 20); 4405 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 10, 1, 20); 4406 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 11, 0, 0); 4407 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 0, 0, 20); 4408 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 0, 1, 19); 4409 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 0, 10, 10); 4410 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 0, 19, 1); 4411 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 0, 20, 0); 4412 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 0, 21, 0); 4413 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 1, 0, 20); 4414 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 1, 1, -1); 4415 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 1, 9, -1); 4416 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 1, 18, -1); 4417 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 1, 19, -1); 4418 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 1, 20, -1); 4419 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 10, 0, 20); 4420 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 10, 1, -10); 4421 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 10, 5, -10); 4422 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 10, 9, -10); 4423 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 10, 10, -10); 4424 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 10, 11, -10); 4425 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 19, 0, 20); 4426 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 19, 1, -19); 4427 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 19, 2, -19); 4428 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 20, 0, 20); 4429 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 20, 1, 20); 4430 test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 21, 0, 0); 4431 test(S("abcdefghijklmnopqrst"), 1, 0, S(""), 0, 0, 0); 4432 test(S("abcdefghijklmnopqrst"), 1, 0, S(""), 0, 1, 0); 4433 test(S("abcdefghijklmnopqrst"), 1, 0, S(""), 1, 0, 0); 4434 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 0, 0, 0); 4435 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 0, 1, -1); 4436 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 0, 2, -2); 4437 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 0, 4, -4); 4438 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 0, 5, -5); 4439 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 0, 6, -5); 4440 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 1, 0, 0); 4441 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 1, 1, -1); 4442 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 1, 2, -2); 4443 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 1, 3, -3); 4444 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 1, 4, -4); 4445 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 1, 5, -4); 4446 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 2, 0, 0); 4447 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 2, 1, -1); 4448 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 2, 2, -2); 4449 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 2, 3, -3); 4450 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 2, 4, -3); 4451 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 4, 0, 0); 4452 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 4, 1, -1); 4453 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 4, 2, -1); 4454 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 5, 0, 0); 4455 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 5, 1, 0); 4456 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 6, 0, 0); 4457 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 0, 0, 0); 4458 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 0, 1, -1); 4459 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 0, 5, -5); 4460 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 0, 9, -9); 4461 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 0, 10, -10); 4462 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 0, 11, -10); 4463 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 1, 0, 0); 4464 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 1, 1, -1); 4465 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 1, 4, -4); 4466 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 1, 8, -8); 4467 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 1, 9, -9); 4468 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 1, 10, -9); 4469 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 5, 0, 0); 4470 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 5, 1, -1); 4471 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 5, 2, -2); 4472 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 5, 4, -4); 4473 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 5, 5, -5); 4474 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 5, 6, -5); 4475 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 9, 0, 0); 4476 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 9, 1, -1); 4477 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 9, 2, -1); 4478 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 10, 0, 0); 4479 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 10, 1, 0); 4480 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 11, 0, 0); 4481 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 0, 0, 0); 4482 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 0, 1, -1); 4483 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 0, 10, -10); 4484 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 0, 19, -19); 4485 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 0, 20, -20); 4486 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 0, 21, -20); 4487} 4488 4489template <class S> 4490void test42() 4491{ 4492 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 1, 0, 0); 4493 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 1, 1, -1); 4494 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 1, 9, -9); 4495 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 1, 18, -18); 4496 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 1, 19, -19); 4497 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 1, 20, -19); 4498 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 10, 0, 0); 4499 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 10, 1, -1); 4500 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 10, 5, -5); 4501 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 10, 9, -9); 4502 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 10, 10, -10); 4503 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 10, 11, -10); 4504 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 19, 0, 0); 4505 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 19, 1, -1); 4506 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 19, 2, -1); 4507 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 20, 0, 0); 4508 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 20, 1, 0); 4509 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 21, 0, 0); 4510 test(S("abcdefghijklmnopqrst"), 1, 1, S(""), 0, 0, 1); 4511 test(S("abcdefghijklmnopqrst"), 1, 1, S(""), 0, 1, 1); 4512 test(S("abcdefghijklmnopqrst"), 1, 1, S(""), 1, 0, 0); 4513 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 0, 0, 1); 4514 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 0, 1, 1); 4515 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 0, 2, 1); 4516 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 0, 4, 1); 4517 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 0, 5, 1); 4518 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 0, 6, 1); 4519 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 1, 0, 1); 4520 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 1, 1, 0); 4521 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 1, 2, -1); 4522 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 1, 3, -2); 4523 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 1, 4, -3); 4524 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 1, 5, -3); 4525 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 2, 0, 1); 4526 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 2, 1, -1); 4527 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 2, 2, -1); 4528 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 2, 3, -1); 4529 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 2, 4, -1); 4530 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 4, 0, 1); 4531 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 4, 1, -3); 4532 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 4, 2, -3); 4533 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 5, 0, 1); 4534 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 5, 1, 1); 4535 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 6, 0, 0); 4536 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 0, 0, 1); 4537 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 0, 1, 1); 4538 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 0, 5, 1); 4539 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 0, 9, 1); 4540 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 0, 10, 1); 4541 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 0, 11, 1); 4542 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 1, 0, 1); 4543 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 1, 1, 0); 4544 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 1, 4, -3); 4545 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 1, 8, -7); 4546 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 1, 9, -8); 4547 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 1, 10, -8); 4548 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 5, 0, 1); 4549 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 5, 1, -4); 4550 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 5, 2, -4); 4551 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 5, 4, -4); 4552 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 5, 5, -4); 4553 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 5, 6, -4); 4554 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 9, 0, 1); 4555 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 9, 1, -8); 4556 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 9, 2, -8); 4557 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 10, 0, 1); 4558 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 10, 1, 1); 4559 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 11, 0, 0); 4560 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 0, 0, 1); 4561 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 0, 1, 1); 4562 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 0, 10, 1); 4563 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 0, 19, 1); 4564 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 0, 20, 1); 4565 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 0, 21, 1); 4566 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 1, 0, 1); 4567 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 1, 1, 0); 4568 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 1, 9, -8); 4569 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 1, 18, -17); 4570 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 1, 19, -18); 4571 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 1, 20, -18); 4572 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 10, 0, 1); 4573 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 10, 1, -9); 4574 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 10, 5, -9); 4575 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 10, 9, -9); 4576 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 10, 10, -9); 4577 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 10, 11, -9); 4578 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 19, 0, 1); 4579 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 19, 1, -18); 4580 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 19, 2, -18); 4581 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 20, 0, 1); 4582 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 20, 1, 1); 4583 test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 21, 0, 0); 4584 test(S("abcdefghijklmnopqrst"), 1, 9, S(""), 0, 0, 9); 4585 test(S("abcdefghijklmnopqrst"), 1, 9, S(""), 0, 1, 9); 4586 test(S("abcdefghijklmnopqrst"), 1, 9, S(""), 1, 0, 0); 4587 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 0, 0, 9); 4588 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 0, 1, 1); 4589 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 0, 2, 1); 4590 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 0, 4, 1); 4591 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 0, 5, 1); 4592} 4593 4594template <class S> 4595void test43() 4596{ 4597 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 0, 6, 1); 4598 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 1, 0, 9); 4599 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 1, 1, 8); 4600 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 1, 2, 7); 4601 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 1, 3, 6); 4602 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 1, 4, 5); 4603 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 1, 5, 5); 4604 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 2, 0, 9); 4605 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 2, 1, -1); 4606 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 2, 2, -1); 4607 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 2, 3, -1); 4608 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 2, 4, -1); 4609 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 4, 0, 9); 4610 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 4, 1, -3); 4611 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 4, 2, -3); 4612 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 5, 0, 9); 4613 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 5, 1, 9); 4614 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 6, 0, 0); 4615 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 0, 0, 9); 4616 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 0, 1, 1); 4617 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 0, 5, 1); 4618 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 0, 9, 1); 4619 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 0, 10, 1); 4620 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 0, 11, 1); 4621 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 1, 0, 9); 4622 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 1, 1, 8); 4623 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 1, 4, 5); 4624 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 1, 8, 1); 4625 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 1, 9, 0); 4626 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 1, 10, 0); 4627 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 5, 0, 9); 4628 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 5, 1, -4); 4629 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 5, 2, -4); 4630 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 5, 4, -4); 4631 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 5, 5, -4); 4632 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 5, 6, -4); 4633 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 9, 0, 9); 4634 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 9, 1, -8); 4635 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 9, 2, -8); 4636 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 10, 0, 9); 4637 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 10, 1, 9); 4638 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 11, 0, 0); 4639 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 0, 0, 9); 4640 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 0, 1, 1); 4641 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 0, 10, 1); 4642 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 0, 19, 1); 4643 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 0, 20, 1); 4644 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 0, 21, 1); 4645 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 1, 0, 9); 4646 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 1, 1, 8); 4647 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 1, 9, 0); 4648 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 1, 18, -9); 4649 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 1, 19, -10); 4650 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 1, 20, -10); 4651 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 10, 0, 9); 4652 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 10, 1, -9); 4653 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 10, 5, -9); 4654 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 10, 9, -9); 4655 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 10, 10, -9); 4656 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 10, 11, -9); 4657 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 19, 0, 9); 4658 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 19, 1, -18); 4659 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 19, 2, -18); 4660 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 20, 0, 9); 4661 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 20, 1, 9); 4662 test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 21, 0, 0); 4663 test(S("abcdefghijklmnopqrst"), 1, 18, S(""), 0, 0, 18); 4664 test(S("abcdefghijklmnopqrst"), 1, 18, S(""), 0, 1, 18); 4665 test(S("abcdefghijklmnopqrst"), 1, 18, S(""), 1, 0, 0); 4666 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 0, 0, 18); 4667 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 0, 1, 1); 4668 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 0, 2, 1); 4669 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 0, 4, 1); 4670 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 0, 5, 1); 4671 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 0, 6, 1); 4672 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 1, 0, 18); 4673 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 1, 1, 17); 4674 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 1, 2, 16); 4675 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 1, 3, 15); 4676 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 1, 4, 14); 4677 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 1, 5, 14); 4678 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 2, 0, 18); 4679 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 2, 1, -1); 4680 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 2, 2, -1); 4681 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 2, 3, -1); 4682 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 2, 4, -1); 4683 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 4, 0, 18); 4684 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 4, 1, -3); 4685 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 4, 2, -3); 4686 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 5, 0, 18); 4687 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 5, 1, 18); 4688 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 6, 0, 0); 4689 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 0, 0, 18); 4690 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 0, 1, 1); 4691 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 0, 5, 1); 4692 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 0, 9, 1); 4693 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 0, 10, 1); 4694 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 0, 11, 1); 4695 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 1, 0, 18); 4696 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 1, 1, 17); 4697} 4698 4699template <class S> 4700void test44() 4701{ 4702 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 1, 4, 14); 4703 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 1, 8, 10); 4704 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 1, 9, 9); 4705 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 1, 10, 9); 4706 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 5, 0, 18); 4707 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 5, 1, -4); 4708 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 5, 2, -4); 4709 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 5, 4, -4); 4710 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 5, 5, -4); 4711 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 5, 6, -4); 4712 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 9, 0, 18); 4713 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 9, 1, -8); 4714 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 9, 2, -8); 4715 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 10, 0, 18); 4716 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 10, 1, 18); 4717 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 11, 0, 0); 4718 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 0, 0, 18); 4719 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 0, 1, 1); 4720 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 0, 10, 1); 4721 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 0, 19, 1); 4722 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 0, 20, 1); 4723 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 0, 21, 1); 4724 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 1, 0, 18); 4725 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 1, 1, 17); 4726 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 1, 9, 9); 4727 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 1, 18, 0); 4728 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 1, 19, -1); 4729 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 1, 20, -1); 4730 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 10, 0, 18); 4731 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 10, 1, -9); 4732 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 10, 5, -9); 4733 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 10, 9, -9); 4734 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 10, 10, -9); 4735 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 10, 11, -9); 4736 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 19, 0, 18); 4737 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 19, 1, -18); 4738 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 19, 2, -18); 4739 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 20, 0, 18); 4740 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 20, 1, 18); 4741 test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 21, 0, 0); 4742 test(S("abcdefghijklmnopqrst"), 1, 19, S(""), 0, 0, 19); 4743 test(S("abcdefghijklmnopqrst"), 1, 19, S(""), 0, 1, 19); 4744 test(S("abcdefghijklmnopqrst"), 1, 19, S(""), 1, 0, 0); 4745 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 0, 0, 19); 4746 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 0, 1, 1); 4747 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 0, 2, 1); 4748 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 0, 4, 1); 4749 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 0, 5, 1); 4750 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 0, 6, 1); 4751 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 1, 0, 19); 4752 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 1, 1, 18); 4753 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 1, 2, 17); 4754 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 1, 3, 16); 4755 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 1, 4, 15); 4756 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 1, 5, 15); 4757 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 2, 0, 19); 4758 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 2, 1, -1); 4759 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 2, 2, -1); 4760 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 2, 3, -1); 4761 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 2, 4, -1); 4762 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 4, 0, 19); 4763 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 4, 1, -3); 4764 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 4, 2, -3); 4765 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 5, 0, 19); 4766 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 5, 1, 19); 4767 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 6, 0, 0); 4768 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 0, 0, 19); 4769 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 0, 1, 1); 4770 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 0, 5, 1); 4771 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 0, 9, 1); 4772 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 0, 10, 1); 4773 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 0, 11, 1); 4774 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 1, 0, 19); 4775 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 1, 1, 18); 4776 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 1, 4, 15); 4777 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 1, 8, 11); 4778 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 1, 9, 10); 4779 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 1, 10, 10); 4780 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 5, 0, 19); 4781 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 5, 1, -4); 4782 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 5, 2, -4); 4783 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 5, 4, -4); 4784 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 5, 5, -4); 4785 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 5, 6, -4); 4786 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 9, 0, 19); 4787 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 9, 1, -8); 4788 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 9, 2, -8); 4789 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 10, 0, 19); 4790 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 10, 1, 19); 4791 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 11, 0, 0); 4792 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 0, 0, 19); 4793 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 0, 1, 1); 4794 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 0, 10, 1); 4795 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 0, 19, 1); 4796 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 0, 20, 1); 4797 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 0, 21, 1); 4798 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 1, 0, 19); 4799 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 1, 1, 18); 4800 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 1, 9, 10); 4801 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 1, 18, 1); 4802} 4803 4804template <class S> 4805void test45() 4806{ 4807 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 1, 19, 0); 4808 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 1, 20, 0); 4809 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 10, 0, 19); 4810 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 10, 1, -9); 4811 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 10, 5, -9); 4812 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 10, 9, -9); 4813 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 10, 10, -9); 4814 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 10, 11, -9); 4815 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 19, 0, 19); 4816 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 19, 1, -18); 4817 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 19, 2, -18); 4818 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 20, 0, 19); 4819 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 20, 1, 19); 4820 test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 21, 0, 0); 4821 test(S("abcdefghijklmnopqrst"), 1, 20, S(""), 0, 0, 19); 4822 test(S("abcdefghijklmnopqrst"), 1, 20, S(""), 0, 1, 19); 4823 test(S("abcdefghijklmnopqrst"), 1, 20, S(""), 1, 0, 0); 4824 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 0, 0, 19); 4825 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 0, 1, 1); 4826 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 0, 2, 1); 4827 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 0, 4, 1); 4828 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 0, 5, 1); 4829 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 0, 6, 1); 4830 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 1, 0, 19); 4831 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 1, 1, 18); 4832 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 1, 2, 17); 4833 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 1, 3, 16); 4834 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 1, 4, 15); 4835 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 1, 5, 15); 4836 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 2, 0, 19); 4837 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 2, 1, -1); 4838 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 2, 2, -1); 4839 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 2, 3, -1); 4840 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 2, 4, -1); 4841 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 4, 0, 19); 4842 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 4, 1, -3); 4843 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 4, 2, -3); 4844 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 5, 0, 19); 4845 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 5, 1, 19); 4846 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 6, 0, 0); 4847 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 0, 0, 19); 4848 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 0, 1, 1); 4849 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 0, 5, 1); 4850 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 0, 9, 1); 4851 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 0, 10, 1); 4852 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 0, 11, 1); 4853 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 1, 0, 19); 4854 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 1, 1, 18); 4855 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 1, 4, 15); 4856 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 1, 8, 11); 4857 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 1, 9, 10); 4858 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 1, 10, 10); 4859 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 5, 0, 19); 4860 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 5, 1, -4); 4861 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 5, 2, -4); 4862 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 5, 4, -4); 4863 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 5, 5, -4); 4864 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 5, 6, -4); 4865 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 9, 0, 19); 4866 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 9, 1, -8); 4867 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 9, 2, -8); 4868 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 10, 0, 19); 4869 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 10, 1, 19); 4870 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 11, 0, 0); 4871 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 0, 0, 19); 4872 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 0, 1, 1); 4873 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 0, 10, 1); 4874 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 0, 19, 1); 4875 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 0, 20, 1); 4876 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 0, 21, 1); 4877 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 1, 0, 19); 4878 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 1, 1, 18); 4879 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 1, 9, 10); 4880 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 1, 18, 1); 4881 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 1, 19, 0); 4882 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 1, 20, 0); 4883 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 10, 0, 19); 4884 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 10, 1, -9); 4885 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 10, 5, -9); 4886 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 10, 9, -9); 4887 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 10, 10, -9); 4888 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 10, 11, -9); 4889 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 19, 0, 19); 4890 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 19, 1, -18); 4891 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 19, 2, -18); 4892 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 20, 0, 19); 4893 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 20, 1, 19); 4894 test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 21, 0, 0); 4895 test(S("abcdefghijklmnopqrst"), 10, 0, S(""), 0, 0, 0); 4896 test(S("abcdefghijklmnopqrst"), 10, 0, S(""), 0, 1, 0); 4897 test(S("abcdefghijklmnopqrst"), 10, 0, S(""), 1, 0, 0); 4898 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 0, 0, 0); 4899 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 0, 1, -1); 4900 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 0, 2, -2); 4901 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 0, 4, -4); 4902 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 0, 5, -5); 4903 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 0, 6, -5); 4904 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 1, 0, 0); 4905 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 1, 1, -1); 4906 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 1, 2, -2); 4907} 4908 4909template <class S> 4910void test46() 4911{ 4912 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 1, 3, -3); 4913 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 1, 4, -4); 4914 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 1, 5, -4); 4915 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 2, 0, 0); 4916 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 2, 1, -1); 4917 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 2, 2, -2); 4918 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 2, 3, -3); 4919 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 2, 4, -3); 4920 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 4, 0, 0); 4921 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 4, 1, -1); 4922 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 4, 2, -1); 4923 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 5, 0, 0); 4924 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 5, 1, 0); 4925 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 6, 0, 0); 4926 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 0, 0, 0); 4927 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 0, 1, -1); 4928 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 0, 5, -5); 4929 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 0, 9, -9); 4930 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 0, 10, -10); 4931 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 0, 11, -10); 4932 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 1, 0, 0); 4933 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 1, 1, -1); 4934 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 1, 4, -4); 4935 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 1, 8, -8); 4936 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 1, 9, -9); 4937 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 1, 10, -9); 4938 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 5, 0, 0); 4939 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 5, 1, -1); 4940 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 5, 2, -2); 4941 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 5, 4, -4); 4942 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 5, 5, -5); 4943 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 5, 6, -5); 4944 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 9, 0, 0); 4945 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 9, 1, -1); 4946 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 9, 2, -1); 4947 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 10, 0, 0); 4948 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 10, 1, 0); 4949 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 11, 0, 0); 4950 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 0, 0, 0); 4951 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 0, 1, -1); 4952 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 0, 10, -10); 4953 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 0, 19, -19); 4954 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 0, 20, -20); 4955 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 0, 21, -20); 4956 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 1, 0, 0); 4957 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 1, 1, -1); 4958 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 1, 9, -9); 4959 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 1, 18, -18); 4960 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 1, 19, -19); 4961 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 1, 20, -19); 4962 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 10, 0, 0); 4963 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 10, 1, -1); 4964 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 10, 5, -5); 4965 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 10, 9, -9); 4966 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 10, 10, -10); 4967 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 10, 11, -10); 4968 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 19, 0, 0); 4969 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 19, 1, -1); 4970 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 19, 2, -1); 4971 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 20, 0, 0); 4972 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 20, 1, 0); 4973 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 21, 0, 0); 4974 test(S("abcdefghijklmnopqrst"), 10, 1, S(""), 0, 0, 1); 4975 test(S("abcdefghijklmnopqrst"), 10, 1, S(""), 0, 1, 1); 4976 test(S("abcdefghijklmnopqrst"), 10, 1, S(""), 1, 0, 0); 4977 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 0, 0, 1); 4978 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 0, 1, 10); 4979 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 0, 2, 10); 4980 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 0, 4, 10); 4981 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 0, 5, 10); 4982 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 0, 6, 10); 4983 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 1, 0, 1); 4984 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 1, 1, 9); 4985 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 1, 2, 9); 4986 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 1, 3, 9); 4987 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 1, 4, 9); 4988 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 1, 5, 9); 4989 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 2, 0, 1); 4990 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 2, 1, 8); 4991 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 2, 2, 8); 4992 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 2, 3, 8); 4993 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 2, 4, 8); 4994 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 4, 0, 1); 4995 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 4, 1, 6); 4996 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 4, 2, 6); 4997 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 5, 0, 1); 4998 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 5, 1, 1); 4999 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 6, 0, 0); 5000 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 0, 0, 1); 5001 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 0, 1, 10); 5002 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 0, 5, 10); 5003 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 0, 9, 10); 5004 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 0, 10, 10); 5005 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 0, 11, 10); 5006 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 1, 0, 1); 5007 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 1, 1, 9); 5008 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 1, 4, 9); 5009 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 1, 8, 9); 5010 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 1, 9, 9); 5011 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 1, 10, 9); 5012} 5013 5014template <class S> 5015void test47() 5016{ 5017 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 5, 0, 1); 5018 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 5, 1, 5); 5019 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 5, 2, 5); 5020 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 5, 4, 5); 5021 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 5, 5, 5); 5022 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 5, 6, 5); 5023 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 9, 0, 1); 5024 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 9, 1, 1); 5025 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 9, 2, 1); 5026 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 10, 0, 1); 5027 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 10, 1, 1); 5028 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 11, 0, 0); 5029 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 0, 0, 1); 5030 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 0, 1, 10); 5031 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 0, 10, 10); 5032 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 0, 19, 10); 5033 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 0, 20, 10); 5034 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 0, 21, 10); 5035 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 1, 0, 1); 5036 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 1, 1, 9); 5037 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 1, 9, 9); 5038 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 1, 18, 9); 5039 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 1, 19, 9); 5040 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 1, 20, 9); 5041 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 10, 0, 1); 5042 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 10, 1, 0); 5043 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 10, 5, -4); 5044 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 10, 9, -8); 5045 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 10, 10, -9); 5046 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 10, 11, -9); 5047 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 19, 0, 1); 5048 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 19, 1, -9); 5049 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 19, 2, -9); 5050 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 20, 0, 1); 5051 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 20, 1, 1); 5052 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 21, 0, 0); 5053 test(S("abcdefghijklmnopqrst"), 10, 5, S(""), 0, 0, 5); 5054 test(S("abcdefghijklmnopqrst"), 10, 5, S(""), 0, 1, 5); 5055 test(S("abcdefghijklmnopqrst"), 10, 5, S(""), 1, 0, 0); 5056 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 0, 0, 5); 5057 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 0, 1, 10); 5058 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 0, 2, 10); 5059 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 0, 4, 10); 5060 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 0, 5, 10); 5061 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 0, 6, 10); 5062 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 1, 0, 5); 5063 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 1, 1, 9); 5064 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 1, 2, 9); 5065 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 1, 3, 9); 5066 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 1, 4, 9); 5067 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 1, 5, 9); 5068 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 2, 0, 5); 5069 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 2, 1, 8); 5070 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 2, 2, 8); 5071 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 2, 3, 8); 5072 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 2, 4, 8); 5073 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 4, 0, 5); 5074 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 4, 1, 6); 5075 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 4, 2, 6); 5076 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 5, 0, 5); 5077 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 5, 1, 5); 5078 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 6, 0, 0); 5079 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 0, 0, 5); 5080 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 0, 1, 10); 5081 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 0, 5, 10); 5082 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 0, 9, 10); 5083 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 0, 10, 10); 5084 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 0, 11, 10); 5085 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 1, 0, 5); 5086 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 1, 1, 9); 5087 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 1, 4, 9); 5088 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 1, 8, 9); 5089 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 1, 9, 9); 5090 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 1, 10, 9); 5091 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 5, 0, 5); 5092 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 5, 1, 5); 5093 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 5, 2, 5); 5094 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 5, 4, 5); 5095 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 5, 5, 5); 5096 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 5, 6, 5); 5097 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 9, 0, 5); 5098 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 9, 1, 1); 5099 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 9, 2, 1); 5100 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 10, 0, 5); 5101 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 10, 1, 5); 5102 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 11, 0, 0); 5103 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 0, 0, 5); 5104 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 0, 1, 10); 5105 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 0, 10, 10); 5106 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 0, 19, 10); 5107 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 0, 20, 10); 5108 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 0, 21, 10); 5109 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 1, 0, 5); 5110 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 1, 1, 9); 5111 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 1, 9, 9); 5112 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 1, 18, 9); 5113 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 1, 19, 9); 5114 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 1, 20, 9); 5115 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 10, 0, 5); 5116 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 10, 1, 4); 5117} 5118 5119template <class S> 5120void test48() 5121{ 5122 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 10, 5, 0); 5123 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 10, 9, -4); 5124 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 10, 10, -5); 5125 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 10, 11, -5); 5126 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 19, 0, 5); 5127 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 19, 1, -9); 5128 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 19, 2, -9); 5129 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 20, 0, 5); 5130 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 20, 1, 5); 5131 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 21, 0, 0); 5132 test(S("abcdefghijklmnopqrst"), 10, 9, S(""), 0, 0, 9); 5133 test(S("abcdefghijklmnopqrst"), 10, 9, S(""), 0, 1, 9); 5134 test(S("abcdefghijklmnopqrst"), 10, 9, S(""), 1, 0, 0); 5135 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 0, 0, 9); 5136 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 0, 1, 10); 5137 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 0, 2, 10); 5138 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 0, 4, 10); 5139 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 0, 5, 10); 5140 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 0, 6, 10); 5141 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 1, 0, 9); 5142 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 1, 1, 9); 5143 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 1, 2, 9); 5144 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 1, 3, 9); 5145 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 1, 4, 9); 5146 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 1, 5, 9); 5147 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 2, 0, 9); 5148 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 2, 1, 8); 5149 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 2, 2, 8); 5150 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 2, 3, 8); 5151 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 2, 4, 8); 5152 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 4, 0, 9); 5153 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 4, 1, 6); 5154 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 4, 2, 6); 5155 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 5, 0, 9); 5156 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 5, 1, 9); 5157 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 6, 0, 0); 5158 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 0, 0, 9); 5159 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 0, 1, 10); 5160 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 0, 5, 10); 5161 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 0, 9, 10); 5162 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 0, 10, 10); 5163 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 0, 11, 10); 5164 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 1, 0, 9); 5165 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 1, 1, 9); 5166 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 1, 4, 9); 5167 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 1, 8, 9); 5168 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 1, 9, 9); 5169 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 1, 10, 9); 5170 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 5, 0, 9); 5171 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 5, 1, 5); 5172 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 5, 2, 5); 5173 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 5, 4, 5); 5174 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 5, 5, 5); 5175 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 5, 6, 5); 5176 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 9, 0, 9); 5177 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 9, 1, 1); 5178 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 9, 2, 1); 5179 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 10, 0, 9); 5180 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 10, 1, 9); 5181 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 11, 0, 0); 5182 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 0, 0, 9); 5183 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 0, 1, 10); 5184 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 0, 10, 10); 5185 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 0, 19, 10); 5186 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 0, 20, 10); 5187 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 0, 21, 10); 5188 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 1, 0, 9); 5189 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 1, 1, 9); 5190 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 1, 9, 9); 5191 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 1, 18, 9); 5192 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 1, 19, 9); 5193 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 1, 20, 9); 5194 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 10, 0, 9); 5195 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 10, 1, 8); 5196 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 10, 5, 4); 5197 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 10, 9, 0); 5198 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 10, 10, -1); 5199 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 10, 11, -1); 5200 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 19, 0, 9); 5201 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 19, 1, -9); 5202 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 19, 2, -9); 5203 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 20, 0, 9); 5204 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 20, 1, 9); 5205 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 21, 0, 0); 5206 test(S("abcdefghijklmnopqrst"), 10, 10, S(""), 0, 0, 10); 5207 test(S("abcdefghijklmnopqrst"), 10, 10, S(""), 0, 1, 10); 5208 test(S("abcdefghijklmnopqrst"), 10, 10, S(""), 1, 0, 0); 5209 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 0, 0, 10); 5210 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 0, 1, 10); 5211 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 0, 2, 10); 5212 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 0, 4, 10); 5213 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 0, 5, 10); 5214 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 0, 6, 10); 5215 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 1, 0, 10); 5216 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 1, 1, 9); 5217 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 1, 2, 9); 5218 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 1, 3, 9); 5219 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 1, 4, 9); 5220 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 1, 5, 9); 5221 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 2, 0, 10); 5222} 5223 5224template <class S> 5225void test49() 5226{ 5227 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 2, 1, 8); 5228 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 2, 2, 8); 5229 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 2, 3, 8); 5230 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 2, 4, 8); 5231 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 4, 0, 10); 5232 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 4, 1, 6); 5233 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 4, 2, 6); 5234 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 5, 0, 10); 5235 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 5, 1, 10); 5236 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 6, 0, 0); 5237 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 0, 0, 10); 5238 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 0, 1, 10); 5239 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 0, 5, 10); 5240 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 0, 9, 10); 5241 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 0, 10, 10); 5242 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 0, 11, 10); 5243 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 1, 0, 10); 5244 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 1, 1, 9); 5245 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 1, 4, 9); 5246 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 1, 8, 9); 5247 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 1, 9, 9); 5248 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 1, 10, 9); 5249 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 5, 0, 10); 5250 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 5, 1, 5); 5251 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 5, 2, 5); 5252 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 5, 4, 5); 5253 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 5, 5, 5); 5254 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 5, 6, 5); 5255 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 9, 0, 10); 5256 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 9, 1, 1); 5257 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 9, 2, 1); 5258 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 10, 0, 10); 5259 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 10, 1, 10); 5260 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 11, 0, 0); 5261 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 0, 0, 10); 5262 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 0, 1, 10); 5263 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 0, 10, 10); 5264 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 0, 19, 10); 5265 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 0, 20, 10); 5266 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 0, 21, 10); 5267 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 1, 0, 10); 5268 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 1, 1, 9); 5269 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 1, 9, 9); 5270 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 1, 18, 9); 5271 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 1, 19, 9); 5272 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 1, 20, 9); 5273 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 10, 0, 10); 5274 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 10, 1, 9); 5275 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 10, 5, 5); 5276 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 10, 9, 1); 5277 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 10, 10, 0); 5278 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 10, 11, 0); 5279 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 19, 0, 10); 5280 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 19, 1, -9); 5281 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 19, 2, -9); 5282 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 20, 0, 10); 5283 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 20, 1, 10); 5284 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 21, 0, 0); 5285 test(S("abcdefghijklmnopqrst"), 10, 11, S(""), 0, 0, 10); 5286 test(S("abcdefghijklmnopqrst"), 10, 11, S(""), 0, 1, 10); 5287 test(S("abcdefghijklmnopqrst"), 10, 11, S(""), 1, 0, 0); 5288 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 0, 0, 10); 5289 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 0, 1, 10); 5290 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 0, 2, 10); 5291 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 0, 4, 10); 5292 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 0, 5, 10); 5293 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 0, 6, 10); 5294 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 1, 0, 10); 5295 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 1, 1, 9); 5296 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 1, 2, 9); 5297 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 1, 3, 9); 5298 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 1, 4, 9); 5299 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 1, 5, 9); 5300 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 2, 0, 10); 5301 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 2, 1, 8); 5302 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 2, 2, 8); 5303 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 2, 3, 8); 5304 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 2, 4, 8); 5305 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 4, 0, 10); 5306 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 4, 1, 6); 5307 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 4, 2, 6); 5308 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 5, 0, 10); 5309 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 5, 1, 10); 5310 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 6, 0, 0); 5311 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 0, 0, 10); 5312 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 0, 1, 10); 5313 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 0, 5, 10); 5314 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 0, 9, 10); 5315 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 0, 10, 10); 5316 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 0, 11, 10); 5317 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 1, 0, 10); 5318 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 1, 1, 9); 5319 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 1, 4, 9); 5320 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 1, 8, 9); 5321 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 1, 9, 9); 5322 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 1, 10, 9); 5323 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 5, 0, 10); 5324 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 5, 1, 5); 5325 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 5, 2, 5); 5326 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 5, 4, 5); 5327} 5328 5329template <class S> 5330void test50() 5331{ 5332 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 5, 5, 5); 5333 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 5, 6, 5); 5334 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 9, 0, 10); 5335 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 9, 1, 1); 5336 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 9, 2, 1); 5337 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 10, 0, 10); 5338 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 10, 1, 10); 5339 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 11, 0, 0); 5340 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 0, 0, 10); 5341 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 0, 1, 10); 5342 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 0, 10, 10); 5343 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 0, 19, 10); 5344 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 0, 20, 10); 5345 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 0, 21, 10); 5346 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 1, 0, 10); 5347 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 1, 1, 9); 5348 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 1, 9, 9); 5349 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 1, 18, 9); 5350 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 1, 19, 9); 5351 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 1, 20, 9); 5352 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 10, 0, 10); 5353 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 10, 1, 9); 5354 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 10, 5, 5); 5355 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 10, 9, 1); 5356 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 10, 10, 0); 5357 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 10, 11, 0); 5358 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 19, 0, 10); 5359 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 19, 1, -9); 5360 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 19, 2, -9); 5361 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 20, 0, 10); 5362 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 20, 1, 10); 5363 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 21, 0, 0); 5364 test(S("abcdefghijklmnopqrst"), 19, 0, S(""), 0, 0, 0); 5365 test(S("abcdefghijklmnopqrst"), 19, 0, S(""), 0, 1, 0); 5366 test(S("abcdefghijklmnopqrst"), 19, 0, S(""), 1, 0, 0); 5367 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 0, 0, 0); 5368 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 0, 1, -1); 5369 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 0, 2, -2); 5370 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 0, 4, -4); 5371 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 0, 5, -5); 5372 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 0, 6, -5); 5373 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 1, 0, 0); 5374 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 1, 1, -1); 5375 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 1, 2, -2); 5376 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 1, 3, -3); 5377 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 1, 4, -4); 5378 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 1, 5, -4); 5379 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 2, 0, 0); 5380 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 2, 1, -1); 5381 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 2, 2, -2); 5382 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 2, 3, -3); 5383 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 2, 4, -3); 5384 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 4, 0, 0); 5385 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 4, 1, -1); 5386 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 4, 2, -1); 5387 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 5, 0, 0); 5388 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 5, 1, 0); 5389 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 6, 0, 0); 5390 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 0, 0, 0); 5391 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 0, 1, -1); 5392 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 0, 5, -5); 5393 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 0, 9, -9); 5394 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 0, 10, -10); 5395 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 0, 11, -10); 5396 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 1, 0, 0); 5397 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 1, 1, -1); 5398 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 1, 4, -4); 5399 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 1, 8, -8); 5400 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 1, 9, -9); 5401 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 1, 10, -9); 5402 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 5, 0, 0); 5403 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 5, 1, -1); 5404 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 5, 2, -2); 5405 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 5, 4, -4); 5406 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 5, 5, -5); 5407 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 5, 6, -5); 5408 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 9, 0, 0); 5409 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 9, 1, -1); 5410 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 9, 2, -1); 5411 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 10, 0, 0); 5412 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 10, 1, 0); 5413 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 11, 0, 0); 5414 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 0, 0, 0); 5415 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 0, 1, -1); 5416 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 0, 10, -10); 5417 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 0, 19, -19); 5418 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 0, 20, -20); 5419 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 0, 21, -20); 5420 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 1, 0, 0); 5421 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 1, 1, -1); 5422 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 1, 9, -9); 5423 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 1, 18, -18); 5424 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 1, 19, -19); 5425 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 1, 20, -19); 5426 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 10, 0, 0); 5427 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 10, 1, -1); 5428 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 10, 5, -5); 5429 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 10, 9, -9); 5430 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 10, 10, -10); 5431 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 10, 11, -10); 5432} 5433 5434template <class S> 5435void test51() 5436{ 5437 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 19, 0, 0); 5438 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 19, 1, -1); 5439 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 19, 2, -1); 5440 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 20, 0, 0); 5441 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 20, 1, 0); 5442 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 21, 0, 0); 5443 test(S("abcdefghijklmnopqrst"), 19, 1, S(""), 0, 0, 1); 5444 test(S("abcdefghijklmnopqrst"), 19, 1, S(""), 0, 1, 1); 5445 test(S("abcdefghijklmnopqrst"), 19, 1, S(""), 1, 0, 0); 5446 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 0, 0, 1); 5447 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 0, 1, 19); 5448 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 0, 2, 19); 5449 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 0, 4, 19); 5450 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 0, 5, 19); 5451 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 0, 6, 19); 5452 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 1, 0, 1); 5453 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 1, 1, 18); 5454 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 1, 2, 18); 5455 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 1, 3, 18); 5456 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 1, 4, 18); 5457 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 1, 5, 18); 5458 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 2, 0, 1); 5459 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 2, 1, 17); 5460 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 2, 2, 17); 5461 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 2, 3, 17); 5462 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 2, 4, 17); 5463 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 4, 0, 1); 5464 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 4, 1, 15); 5465 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 4, 2, 15); 5466 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 5, 0, 1); 5467 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 5, 1, 1); 5468 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 6, 0, 0); 5469 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 0, 0, 1); 5470 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 0, 1, 19); 5471 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 0, 5, 19); 5472 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 0, 9, 19); 5473 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 0, 10, 19); 5474 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 0, 11, 19); 5475 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 1, 0, 1); 5476 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 1, 1, 18); 5477 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 1, 4, 18); 5478 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 1, 8, 18); 5479 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 1, 9, 18); 5480 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 1, 10, 18); 5481 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 5, 0, 1); 5482 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 5, 1, 14); 5483 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 5, 2, 14); 5484 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 5, 4, 14); 5485 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 5, 5, 14); 5486 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 5, 6, 14); 5487 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 9, 0, 1); 5488 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 9, 1, 10); 5489 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 9, 2, 10); 5490 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 10, 0, 1); 5491 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 10, 1, 1); 5492 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 11, 0, 0); 5493 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 0, 0, 1); 5494 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 0, 1, 19); 5495 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 0, 10, 19); 5496 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 0, 19, 19); 5497 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 0, 20, 19); 5498 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 0, 21, 19); 5499 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 1, 0, 1); 5500 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 1, 1, 18); 5501 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 1, 9, 18); 5502 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 1, 18, 18); 5503 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 1, 19, 18); 5504 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 1, 20, 18); 5505 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 10, 0, 1); 5506 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 10, 1, 9); 5507 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 10, 5, 9); 5508 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 10, 9, 9); 5509 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 10, 10, 9); 5510 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 10, 11, 9); 5511 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 19, 0, 1); 5512 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 19, 1, 0); 5513 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 19, 2, 0); 5514 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 20, 0, 1); 5515 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 20, 1, 1); 5516 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 21, 0, 0); 5517 test(S("abcdefghijklmnopqrst"), 19, 2, S(""), 0, 0, 1); 5518 test(S("abcdefghijklmnopqrst"), 19, 2, S(""), 0, 1, 1); 5519 test(S("abcdefghijklmnopqrst"), 19, 2, S(""), 1, 0, 0); 5520 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 0, 0, 1); 5521 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 0, 1, 19); 5522 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 0, 2, 19); 5523 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 0, 4, 19); 5524 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 0, 5, 19); 5525 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 0, 6, 19); 5526 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 1, 0, 1); 5527 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 1, 1, 18); 5528 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 1, 2, 18); 5529 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 1, 3, 18); 5530 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 1, 4, 18); 5531 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 1, 5, 18); 5532 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 2, 0, 1); 5533 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 2, 1, 17); 5534 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 2, 2, 17); 5535 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 2, 3, 17); 5536 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 2, 4, 17); 5537} 5538 5539template <class S> 5540void test52() 5541{ 5542 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 4, 0, 1); 5543 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 4, 1, 15); 5544 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 4, 2, 15); 5545 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 5, 0, 1); 5546 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 5, 1, 1); 5547 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 6, 0, 0); 5548 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 0, 0, 1); 5549 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 0, 1, 19); 5550 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 0, 5, 19); 5551 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 0, 9, 19); 5552 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 0, 10, 19); 5553 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 0, 11, 19); 5554 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 1, 0, 1); 5555 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 1, 1, 18); 5556 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 1, 4, 18); 5557 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 1, 8, 18); 5558 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 1, 9, 18); 5559 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 1, 10, 18); 5560 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 5, 0, 1); 5561 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 5, 1, 14); 5562 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 5, 2, 14); 5563 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 5, 4, 14); 5564 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 5, 5, 14); 5565 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 5, 6, 14); 5566 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 9, 0, 1); 5567 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 9, 1, 10); 5568 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 9, 2, 10); 5569 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 10, 0, 1); 5570 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 10, 1, 1); 5571 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 11, 0, 0); 5572 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 0, 0, 1); 5573 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 0, 1, 19); 5574 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 0, 10, 19); 5575 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 0, 19, 19); 5576 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 0, 20, 19); 5577 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 0, 21, 19); 5578 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 1, 0, 1); 5579 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 1, 1, 18); 5580 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 1, 9, 18); 5581 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 1, 18, 18); 5582 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 1, 19, 18); 5583 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 1, 20, 18); 5584 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 10, 0, 1); 5585 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 10, 1, 9); 5586 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 10, 5, 9); 5587 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 10, 9, 9); 5588 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 10, 10, 9); 5589 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 10, 11, 9); 5590 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 19, 0, 1); 5591 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 19, 1, 0); 5592 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 19, 2, 0); 5593 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 20, 0, 1); 5594 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 20, 1, 1); 5595 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 21, 0, 0); 5596 test(S("abcdefghijklmnopqrst"), 20, 0, S(""), 0, 0, 0); 5597 test(S("abcdefghijklmnopqrst"), 20, 0, S(""), 0, 1, 0); 5598 test(S("abcdefghijklmnopqrst"), 20, 0, S(""), 1, 0, 0); 5599 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 0, 0, 0); 5600 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 0, 1, -1); 5601 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 0, 2, -2); 5602 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 0, 4, -4); 5603 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 0, 5, -5); 5604 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 0, 6, -5); 5605 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 1, 0, 0); 5606 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 1, 1, -1); 5607 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 1, 2, -2); 5608 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 1, 3, -3); 5609 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 1, 4, -4); 5610 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 1, 5, -4); 5611 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 2, 0, 0); 5612 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 2, 1, -1); 5613 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 2, 2, -2); 5614 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 2, 3, -3); 5615 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 2, 4, -3); 5616 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 4, 0, 0); 5617 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 4, 1, -1); 5618 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 4, 2, -1); 5619 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 5, 0, 0); 5620 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 5, 1, 0); 5621 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 6, 0, 0); 5622 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 0, 0, 0); 5623 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 0, 1, -1); 5624 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 0, 5, -5); 5625 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 0, 9, -9); 5626 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 0, 10, -10); 5627 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 0, 11, -10); 5628 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 1, 0, 0); 5629 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 1, 1, -1); 5630 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 1, 4, -4); 5631 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 1, 8, -8); 5632 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 1, 9, -9); 5633 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 1, 10, -9); 5634 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 5, 0, 0); 5635 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 5, 1, -1); 5636 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 5, 2, -2); 5637 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 5, 4, -4); 5638 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 5, 5, -5); 5639 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 5, 6, -5); 5640 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 9, 0, 0); 5641 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 9, 1, -1); 5642} 5643 5644template <class S> 5645void test53() 5646{ 5647 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 9, 2, -1); 5648 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 10, 0, 0); 5649 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 10, 1, 0); 5650 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 11, 0, 0); 5651 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 0, 0, 0); 5652 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 0, 1, -1); 5653 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 0, 10, -10); 5654 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 0, 19, -19); 5655 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 0, 20, -20); 5656 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 0, 21, -20); 5657 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 1, 0, 0); 5658 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 1, 1, -1); 5659 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 1, 9, -9); 5660 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 1, 18, -18); 5661 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 1, 19, -19); 5662 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 1, 20, -19); 5663 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 10, 0, 0); 5664 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 10, 1, -1); 5665 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 10, 5, -5); 5666 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 10, 9, -9); 5667 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 10, 10, -10); 5668 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 10, 11, -10); 5669 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 19, 0, 0); 5670 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 19, 1, -1); 5671 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 19, 2, -1); 5672 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 20, 0, 0); 5673 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 20, 1, 0); 5674 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 21, 0, 0); 5675 test(S("abcdefghijklmnopqrst"), 20, 1, S(""), 0, 0, 0); 5676 test(S("abcdefghijklmnopqrst"), 20, 1, S(""), 0, 1, 0); 5677 test(S("abcdefghijklmnopqrst"), 20, 1, S(""), 1, 0, 0); 5678 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 0, 0, 0); 5679 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 0, 1, -1); 5680 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 0, 2, -2); 5681 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 0, 4, -4); 5682 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 0, 5, -5); 5683 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 0, 6, -5); 5684 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 1, 0, 0); 5685 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 1, 1, -1); 5686 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 1, 2, -2); 5687 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 1, 3, -3); 5688 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 1, 4, -4); 5689 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 1, 5, -4); 5690 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 2, 0, 0); 5691 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 2, 1, -1); 5692 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 2, 2, -2); 5693 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 2, 3, -3); 5694 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 2, 4, -3); 5695 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 4, 0, 0); 5696 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 4, 1, -1); 5697 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 4, 2, -1); 5698 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 5, 0, 0); 5699 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 5, 1, 0); 5700 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 6, 0, 0); 5701 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 0, 0, 0); 5702 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 0, 1, -1); 5703 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 0, 5, -5); 5704 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 0, 9, -9); 5705 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 0, 10, -10); 5706 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 0, 11, -10); 5707 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 1, 0, 0); 5708 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 1, 1, -1); 5709 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 1, 4, -4); 5710 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 1, 8, -8); 5711 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 1, 9, -9); 5712 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 1, 10, -9); 5713 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 5, 0, 0); 5714 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 5, 1, -1); 5715 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 5, 2, -2); 5716 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 5, 4, -4); 5717 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 5, 5, -5); 5718 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 5, 6, -5); 5719 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 9, 0, 0); 5720 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 9, 1, -1); 5721 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 9, 2, -1); 5722 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 10, 0, 0); 5723 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 10, 1, 0); 5724 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 11, 0, 0); 5725 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 0, 0, 0); 5726 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 0, 1, -1); 5727 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 0, 10, -10); 5728 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 0, 19, -19); 5729 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 0, 20, -20); 5730 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 0, 21, -20); 5731 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 1, 0, 0); 5732 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 1, 1, -1); 5733 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 1, 9, -9); 5734 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 1, 18, -18); 5735 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 1, 19, -19); 5736 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 1, 20, -19); 5737 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 10, 0, 0); 5738 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 10, 1, -1); 5739 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 10, 5, -5); 5740 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 10, 9, -9); 5741 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 10, 10, -10); 5742 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 10, 11, -10); 5743 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 19, 0, 0); 5744 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 19, 1, -1); 5745 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 19, 2, -1); 5746 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 20, 0, 0); 5747} 5748 5749template <class S> 5750void test54() 5751{ 5752 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 20, 1, 0); 5753 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 21, 0, 0); 5754 test(S("abcdefghijklmnopqrst"), 21, 0, S(""), 0, 0, 0); 5755 test(S("abcdefghijklmnopqrst"), 21, 0, S(""), 0, 1, 0); 5756 test(S("abcdefghijklmnopqrst"), 21, 0, S(""), 1, 0, 0); 5757 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 0, 0, 0); 5758 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 0, 1, 0); 5759 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 0, 2, 0); 5760 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 0, 4, 0); 5761 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 0, 5, 0); 5762 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 0, 6, 0); 5763 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 1, 0, 0); 5764 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 1, 1, 0); 5765 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 1, 2, 0); 5766 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 1, 3, 0); 5767 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 1, 4, 0); 5768 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 1, 5, 0); 5769 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 2, 0, 0); 5770 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 2, 1, 0); 5771 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 2, 2, 0); 5772 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 2, 3, 0); 5773 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 2, 4, 0); 5774 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 4, 0, 0); 5775 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 4, 1, 0); 5776 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 4, 2, 0); 5777 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 5, 0, 0); 5778 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 5, 1, 0); 5779 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 6, 0, 0); 5780 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 0, 0, 0); 5781 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 0, 1, 0); 5782 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 0, 5, 0); 5783 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 0, 9, 0); 5784 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 0, 10, 0); 5785 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 0, 11, 0); 5786 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 1, 0, 0); 5787 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 1, 1, 0); 5788 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 1, 4, 0); 5789 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 1, 8, 0); 5790 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 1, 9, 0); 5791 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 1, 10, 0); 5792 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 5, 0, 0); 5793 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 5, 1, 0); 5794 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 5, 2, 0); 5795 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 5, 4, 0); 5796 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 5, 5, 0); 5797 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 5, 6, 0); 5798 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 9, 0, 0); 5799 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 9, 1, 0); 5800 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 9, 2, 0); 5801 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 10, 0, 0); 5802 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 10, 1, 0); 5803 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 11, 0, 0); 5804 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 0, 0, 0); 5805 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 0, 1, 0); 5806 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 0, 10, 0); 5807 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 0, 19, 0); 5808 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 0, 20, 0); 5809 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 0, 21, 0); 5810 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 1, 0, 0); 5811 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 1, 1, 0); 5812 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 1, 9, 0); 5813 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 1, 18, 0); 5814 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 1, 19, 0); 5815 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 1, 20, 0); 5816 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 10, 0, 0); 5817 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 10, 1, 0); 5818 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 10, 5, 0); 5819 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 10, 9, 0); 5820 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 10, 10, 0); 5821 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 10, 11, 0); 5822 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 19, 0, 0); 5823 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 19, 1, 0); 5824 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 19, 2, 0); 5825 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 20, 0, 0); 5826 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 20, 1, 0); 5827 test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 21, 0, 0); 5828} 5829 5830template<class S> 5831void test55() 5832{ 5833 test_npos(S(""), 0, 0, S(""), 0, 0); 5834 test_npos(S(""), 0, 0, S("abcde"), 0, -5); 5835 test_npos(S("abcde"), 0, 0, S("abcdefghij"), 0, -10); 5836 test_npos(S("abcde"), 0, 0, S("abcdefghij"), 1, -9); 5837 test_npos(S("abcde"), 0, 0, S("abcdefghij"), 5, -5); 5838} 5839 5840int main() 5841{ 5842 { 5843 typedef std::string S; 5844 test0<S>(); 5845 test1<S>(); 5846 test2<S>(); 5847 test3<S>(); 5848 test4<S>(); 5849 test5<S>(); 5850 test6<S>(); 5851 test7<S>(); 5852 test8<S>(); 5853 test9<S>(); 5854 test10<S>(); 5855 test11<S>(); 5856 test12<S>(); 5857 test13<S>(); 5858 test14<S>(); 5859 test15<S>(); 5860 test16<S>(); 5861 test17<S>(); 5862 test18<S>(); 5863 test19<S>(); 5864 test20<S>(); 5865 test21<S>(); 5866 test22<S>(); 5867 test23<S>(); 5868 test24<S>(); 5869 test25<S>(); 5870 test26<S>(); 5871 test27<S>(); 5872 test28<S>(); 5873 test29<S>(); 5874 test30<S>(); 5875 test31<S>(); 5876 test32<S>(); 5877 test33<S>(); 5878 test34<S>(); 5879 test35<S>(); 5880 test36<S>(); 5881 test37<S>(); 5882 test38<S>(); 5883 test39<S>(); 5884 test40<S>(); 5885 test41<S>(); 5886 test42<S>(); 5887 test43<S>(); 5888 test44<S>(); 5889 test45<S>(); 5890 test46<S>(); 5891 test47<S>(); 5892 test48<S>(); 5893 test49<S>(); 5894 test50<S>(); 5895 test51<S>(); 5896 test52<S>(); 5897 test53<S>(); 5898 test54<S>(); 5899 test55<S>(); 5900 } 5901#if TEST_STD_VER >= 11 5902 { 5903 typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S; 5904 test0<S>(); 5905 test1<S>(); 5906 test2<S>(); 5907 test3<S>(); 5908 test4<S>(); 5909 test5<S>(); 5910 test6<S>(); 5911 test7<S>(); 5912 test8<S>(); 5913 test9<S>(); 5914 test10<S>(); 5915 test11<S>(); 5916 test12<S>(); 5917 test13<S>(); 5918 test14<S>(); 5919 test15<S>(); 5920 test16<S>(); 5921 test17<S>(); 5922 test18<S>(); 5923 test19<S>(); 5924 test20<S>(); 5925 test21<S>(); 5926 test22<S>(); 5927 test23<S>(); 5928 test24<S>(); 5929 test25<S>(); 5930 test26<S>(); 5931 test27<S>(); 5932 test28<S>(); 5933 test29<S>(); 5934 test30<S>(); 5935 test31<S>(); 5936 test32<S>(); 5937 test33<S>(); 5938 test34<S>(); 5939 test35<S>(); 5940 test36<S>(); 5941 test37<S>(); 5942 test38<S>(); 5943 test39<S>(); 5944 test40<S>(); 5945 test41<S>(); 5946 test42<S>(); 5947 test43<S>(); 5948 test44<S>(); 5949 test45<S>(); 5950 test46<S>(); 5951 test47<S>(); 5952 test48<S>(); 5953 test49<S>(); 5954 test50<S>(); 5955 test51<S>(); 5956 test52<S>(); 5957 test53<S>(); 5958 test54<S>(); 5959 test55<S>(); 5960 } 5961#endif 5962} 5963