Home | History | Annotate | Download | only in string_compare

Lines Matching defs:sv

35 template <class S, class SV>
38 SV sv, typename S::size_type pos2, typename S::size_type n2, int x)
40 static_assert((!std::is_same<S, SV>::value), "");
41 if (pos1 <= s.size() && pos2 <= sv.size())
42 assert(sign(s.compare(pos1, n1, sv, pos2, n2)) == sign(x));
48 TEST_IGNORE_NODISCARD s.compare(pos1, n1, sv, pos2, n2);
53 assert(pos1 > s.size() || pos2 > sv.size());
59 template <class S, class SV>
62 SV sv, typename S::size_type pos2, int x)
64 static_assert((!std::is_same<S, SV>::value), "");
65 if (pos1 <= s.size() && pos2 <= sv.size())
66 assert(sign(s.compare(pos1, n1, sv, pos2)) == sign(x));
72 TEST_IGNORE_NODISCARD s.compare(pos1, n1, sv, pos2);
77 assert(pos1 > s.size() || pos2 > sv.size());
83 template <class S, class SV>
86 test(S(""), 0, 0, SV(""), 0, 0, 0);
87 test(S(""), 0, 0, SV(""), 0, 1, 0);
88 test(S(""), 0, 0, SV(""), 1, 0, 0);
89 test(S(""), 0, 0, SV("abcde"), 0, 0, 0);
90 test(S(""), 0, 0, SV("abcde"), 0, 1, -1);
91 test(S(""), 0, 0, SV("abcde"), 0, 2, -2);
92 test(S(""), 0, 0, SV("abcde"), 0, 4, -4);
93 test(S(""), 0, 0, SV("abcde"), 0, 5, -5);
94 test(S(""), 0, 0, SV("abcde"), 0, 6, -5);
95 test(S(""), 0, 0, SV("abcde"), 1, 0, 0);
96 test(S(""), 0, 0, SV("abcde"), 1, 1, -1);
97 test(S(""), 0, 0, SV("abcde"), 1, 2, -2);
98 test(S(""), 0, 0, SV("abcde"), 1, 3, -3);
99 test(S(""), 0, 0, SV("abcde"), 1, 4, -4);
100 test(S(""), 0, 0, SV("abcde"), 1, 5, -4);
101 test(S(""), 0, 0, SV("abcde"), 2, 0, 0);
102 test(S(""), 0, 0, SV("abcde"), 2, 1, -1);
103 test(S(""), 0, 0, SV("abcde"), 2, 2, -2);
104 test(S(""), 0, 0, SV("abcde"), 2, 3, -3);
105 test(S(""), 0, 0, SV("abcde"), 2, 4, -3);
106 test(S(""), 0, 0, SV("abcde"), 4, 0, 0);
107 test(S(""), 0, 0, SV("abcde"), 4, 1, -1);
108 test(S(""), 0, 0, SV("abcde"), 4, 2, -1);
109 test(S(""), 0, 0, SV("abcde"), 5, 0, 0);
110 test(S(""), 0, 0, SV("abcde"), 5, 1, 0);
111 test(S(""), 0, 0, SV("abcde"), 6, 0, 0);
112 test(S(""), 0, 0, SV("abcdefghij"), 0, 0, 0);
113 test(S(""), 0, 0, SV("abcdefghij"), 0, 1, -1);
114 test(S(""), 0, 0, SV("abcdefghij"), 0, 5, -5);
115 test(S(""), 0, 0, SV("abcdefghij"), 0, 9, -9);
116 test(S(""), 0, 0, SV("abcdefghij"), 0, 10, -10);
117 test(S(""), 0, 0, SV("abcdefghij"), 0, 11, -10);
118 test(S(""), 0, 0, SV("abcdefghij"), 1, 0, 0);
119 test(S(""), 0, 0, SV("abcdefghij"), 1, 1, -1);
120 test(S(""), 0, 0, SV("abcdefghij"), 1, 4, -4);
121 test(S(""), 0, 0, SV("abcdefghij"), 1, 8, -8);
122 test(S(""), 0, 0, SV("abcdefghij"), 1, 9, -9);
123 test(S(""), 0, 0, SV("abcdefghij"), 1, 10, -9);
124 test(S(""), 0, 0, SV("abcdefghij"), 5, 0, 0);
125 test(S(""), 0, 0, SV("abcdefghij"), 5, 1, -1);
126 test(S(""), 0, 0, SV("abcdefghij"), 5, 2, -2);
127 test(S(""), 0, 0, SV("abcdefghij"), 5, 4, -4);
128 test(S(""), 0, 0, SV("abcdefghij"), 5, 5, -5);
129 test(S(""), 0, 0, SV("abcdefghij"), 5, 6, -5);
130 test(S(""), 0, 0, SV("abcdefghij"), 9, 0, 0);
131 test(S(""), 0, 0, SV("abcdefghij"), 9, 1, -1);
132 test(S(""), 0, 0, SV("abcdefghij"), 9, 2, -1);
133 test(S(""), 0, 0, SV("abcdefghij"), 10, 0, 0);
134 test(S(""), 0, 0, SV("abcdefghij"), 10, 1, 0);
135 test(S(""), 0, 0, SV("abcdefghij"), 11, 0, 0);
136 test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
137 test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
138 test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
139 test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
140 test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
141 test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
142 test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
143 test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
144 test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
145 test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
146 test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
147 test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
148 test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
149 test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
150 test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
151 test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
152 test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
153 test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
154 test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
155 test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
156 test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
157 test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
158 test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
159 test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
160 test(S(""), 0, 1, SV(""), 0, 0, 0);
161 test(S(""), 0, 1, SV(""), 0, 1, 0);
162 test(S(""), 0, 1, SV(""), 1, 0, 0);
163 test(S(""), 0, 1, SV("abcde"), 0, 0, 0);
164 test(S(""), 0, 1, SV("abcde"), 0, 1, -1);
165 test(S(""), 0, 1, SV("abcde"), 0, 2, -2);
166 test(S(""), 0, 1, SV("abcde"), 0, 4, -4);
167 test(S(""), 0, 1, SV("abcde"), 0, 5, -5);
168 test(S(""), 0, 1, SV("abcde"), 0, 6, -5);
169 test(S(""), 0, 1, SV("abcde"), 1, 0, 0);
170 test(S(""), 0, 1, SV("abcde"), 1, 1, -1);
171 test(S(""), 0, 1, SV("abcde"), 1, 2, -2);
172 test(S(""), 0, 1, SV("abcde"), 1, 3, -3);
173 test(S(""), 0, 1, SV("abcde"), 1, 4, -4);
174 test(S(""), 0, 1, SV("abcde"), 1, 5, -4);
175 test(S(""), 0, 1, SV("abcde"), 2, 0, 0);
176 test(S(""), 0, 1, SV("abcde"), 2, 1, -1);
177 test(S(""), 0, 1, SV("abcde"), 2, 2, -2);
178 test(S(""), 0, 1, SV("abcde"), 2, 3, -3);
179 test(S(""), 0, 1, SV("abcde"), 2, 4, -3);
180 test(S(""), 0, 1, SV("abcde"), 4, 0, 0);
181 test(S(""), 0, 1, SV("abcde"), 4, 1, -1);
182 test(S(""), 0, 1, SV("abcde"), 4, 2, -1);
183 test(S(""), 0, 1, SV("abcde"), 5, 0, 0);
184 test(S(""), 0, 1, SV("abcde"), 5, 1, 0);
185 test(S(""), 0, 1, SV("abcde"), 6, 0, 0);
188 template <class S, class SV>
191 test(S(""), 0, 1, SV("abcdefghij"), 0, 0, 0);
192 test(S(""), 0, 1, SV("abcdefghij"), 0, 1, -1);
193 test(S(""), 0, 1, SV("abcdefghij"), 0, 5, -5);
194 test(S(""), 0, 1, SV("abcdefghij"), 0, 9, -9);
195 test(S(""), 0, 1, SV("abcdefghij"), 0, 10, -10);
196 test(S(""), 0, 1, SV("abcdefghij"), 0, 11, -10);
197 test(S(""), 0, 1, SV("abcdefghij"), 1, 0, 0);
198 test(S(""), 0, 1, SV("abcdefghij"), 1, 1, -1);
199 test(S(""), 0, 1, SV("abcdefghij"), 1, 4, -4);
200 test(S(""), 0, 1, SV("abcdefghij"), 1, 8, -8);
201 test(S(""), 0, 1, SV("abcdefghij"), 1, 9, -9);
202 test(S(""), 0, 1, SV("abcdefghij"), 1, 10, -9);
203 test(S(""), 0, 1, SV("abcdefghij"), 5, 0, 0);
204 test(S(""), 0, 1, SV("abcdefghij"), 5, 1, -1);
205 test(S(""), 0, 1, SV("abcdefghij"), 5, 2, -2);
206 test(S(""), 0, 1, SV("abcdefghij"), 5, 4, -4);
207 test(S(""), 0, 1, SV("abcdefghij"), 5, 5, -5);
208 test(S(""), 0, 1, SV("abcdefghij"), 5, 6, -5);
209 test(S(""), 0, 1, SV("abcdefghij"), 9, 0, 0);
210 test(S(""), 0, 1, SV("abcdefghij"), 9, 1, -1);
211 test(S(""), 0, 1, SV("abcdefghij"), 9, 2, -1);
212 test(S(""), 0, 1, SV("abcdefghij"), 10, 0, 0);
213 test(S(""), 0, 1, SV("abcdefghij"), 10, 1, 0);
214 test(S(""), 0, 1, SV("abcdefghij"), 11, 0, 0);
215 test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 0, 0, 0);
216 test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 0, 1, -1);
217 test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 0, 10, -10);
218 test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 0, 19, -19);
219 test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 0, 20, -20);
220 test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 0, 21, -20);
221 test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 1, 0, 0);
222 test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 1, 1, -1);
223 test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 1, 9, -9);
224 test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 1, 18, -18);
225 test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 1, 19, -19);
226 test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 1, 20, -19);
227 test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 10, 0, 0);
228 test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 10, 1, -1);
229 test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 10, 5, -5);
230 test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 10, 9, -9);
231 test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 10, 10, -10);
232 test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 10, 11, -10);
233 test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 19, 0, 0);
234 test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 19, 1, -1);
235 test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 19, 2, -1);
236 test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 20, 0, 0);
237 test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 20, 1, 0);
238 test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
239 test(S(""), 1, 0, SV(""), 0, 0, 0);
240 test(S(""), 1, 0, SV(""), 0, 1, 0);
241 test(S(""), 1, 0, SV(""), 1, 0, 0);
242 test(S(""), 1, 0, SV("abcde"), 0, 0, 0);
243 test(S(""), 1, 0, SV("abcde"), 0, 1, 0);
244 test(S(""), 1, 0, SV("abcde"), 0, 2, 0);
245 test(S(""), 1, 0, SV("abcde"), 0, 4, 0);
246 test(S(""), 1, 0, SV("abcde"), 0, 5, 0);
247 test(S(""), 1, 0, SV("abcde"), 0, 6, 0);
248 test(S(""), 1, 0, SV("abcde"), 1, 0, 0);
249 test(S(""), 1, 0, SV("abcde"), 1, 1, 0);
250 test(S(""), 1, 0, SV("abcde"), 1, 2, 0);
251 test(S(""), 1, 0, SV("abcde"), 1, 3, 0);
252 test(S(""), 1, 0, SV("abcde"), 1, 4, 0);
253 test(S(""), 1, 0, SV("abcde"), 1, 5, 0);
254 test(S(""), 1, 0, SV("abcde"), 2, 0, 0);
255 test(S(""), 1, 0, SV("abcde"), 2, 1, 0);
256 test(S(""), 1, 0, SV("abcde"), 2, 2, 0);
257 test(S(""), 1, 0, SV("abcde"), 2, 3, 0);
258 test(S(""), 1, 0, SV("abcde"), 2, 4, 0);
259 test(S(""), 1, 0, SV("abcde"), 4, 0, 0);
260 test(S(""), 1, 0, SV("abcde"), 4, 1, 0);
261 test(S(""), 1, 0, SV("abcde"), 4, 2, 0);
262 test(S(""), 1, 0, SV("abcde"), 5, 0, 0);
263 test(S(""), 1, 0, SV("abcde"), 5, 1, 0);
264 test(S(""), 1, 0, SV("abcde"), 6, 0, 0);
265 test(S(""), 1, 0, SV("abcdefghij"), 0, 0, 0);
266 test(S(""), 1, 0, SV("abcdefghij"), 0, 1, 0);
267 test(S(""), 1, 0, SV("abcdefghij"), 0, 5, 0);
268 test(S(""), 1, 0, SV("abcdefghij"), 0, 9, 0);
269 test(S(""), 1, 0, SV("abcdefghij"), 0, 10, 0);
270 test(S(""), 1, 0, SV("abcdefghij"), 0, 11, 0);
271 test(S(""), 1, 0, SV("abcdefghij"), 1, 0, 0);
272 test(S(""), 1, 0, SV("abcdefghij"), 1, 1, 0);
273 test(S(""), 1, 0, SV("abcdefghij"), 1, 4, 0);
274 test(S(""), 1, 0, SV("abcdefghij"), 1, 8, 0);
275 test(S(""), 1, 0, SV("abcdefghij"), 1, 9, 0);
276 test(S(""), 1, 0, SV("abcdefghij"), 1, 10, 0);
277 test(S(""), 1, 0, SV("abcdefghij"), 5, 0, 0);
278 test(S(""), 1, 0, SV("abcdefghij"), 5, 1, 0);
279 test(S(""), 1, 0, SV("abcdefghij"), 5, 2, 0);
280 test(S(""), 1, 0, SV("abcdefghij"), 5, 4, 0);
281 test(S(""), 1, 0, SV("abcdefghij"), 5, 5, 0);
282 test(S(""), 1, 0, SV("abcdefghij"), 5, 6, 0);
283 test(S(""), 1, 0, SV("abcdefghij"), 9, 0, 0);
284 test(S(""), 1, 0, SV("abcdefghij"), 9, 1, 0);
285 test(S(""), 1, 0, SV("abcdefghij"), 9, 2, 0);
286 test(S(""), 1, 0, SV("abcdefghij"), 10, 0, 0);
287 test(S(""), 1, 0, SV("abcdefghij"), 10, 1, 0);
288 test(S(""), 1, 0, SV("abcdefghij"), 11, 0, 0);
289 test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
290 test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 0, 1, 0);
293 template <class S, class SV>
296 test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 0, 10, 0);
297 test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 0, 19, 0);
298 test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 0, 20, 0);
299 test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 0, 21, 0);
300 test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
301 test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 1, 1, 0);
302 test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 1, 9, 0);
303 test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 1, 18, 0);
304 test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 1, 19, 0);
305 test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 1, 20, 0);
306 test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
307 test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 10, 1, 0);
308 test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 10, 5, 0);
309 test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 10, 9, 0);
310 test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 10, 10, 0);
311 test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 10, 11, 0);
312 test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
313 test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 19, 1, 0);
314 test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 19, 2, 0);
315 test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
316 test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
317 test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
318 test(S("abcde"), 0, 0, SV(""), 0, 0, 0);
319 test(S("abcde"), 0, 0, SV(""), 0, 1, 0);
320 test(S("abcde"), 0, 0, SV(""), 1, 0, 0);
321 test(S("abcde"), 0, 0, SV("abcde"), 0, 0, 0);
322 test(S("abcde"), 0, 0, SV("abcde"), 0, 1, -1);
323 test(S("abcde"), 0, 0, SV("abcde"), 0, 2, -2);
324 test(S("abcde"), 0, 0, SV("abcde"), 0, 4, -4);
325 test(S("abcde"), 0, 0, SV("abcde"), 0, 5, -5);
326 test(S("abcde"), 0, 0, SV("abcde"), 0, 6, -5);
327 test(S("abcde"), 0, 0, SV("abcde"), 1, 0, 0);
328 test(S("abcde"), 0, 0, SV("abcde"), 1, 1, -1);
329 test(S("abcde"), 0, 0, SV("abcde"), 1, 2, -2);
330 test(S("abcde"), 0, 0, SV("abcde"), 1, 3, -3);
331 test(S("abcde"), 0, 0, SV("abcde"), 1, 4, -4);
332 test(S("abcde"), 0, 0, SV("abcde"), 1, 5, -4);
333 test(S("abcde"), 0, 0, SV("abcde"), 2, 0, 0);
334 test(S("abcde"), 0, 0, SV("abcde"), 2, 1, -1);
335 test(S("abcde"), 0, 0, SV("abcde"), 2, 2, -2);
336 test(S("abcde"), 0, 0, SV("abcde"), 2, 3, -3);
337 test(S("abcde"), 0, 0, SV("abcde"), 2, 4, -3);
338 test(S("abcde"), 0, 0, SV("abcde"), 4, 0, 0);
339 test(S("abcde"), 0, 0, SV("abcde"), 4, 1, -1);
340 test(S("abcde"), 0, 0, SV("abcde"), 4, 2, -1);
341 test(S("abcde"), 0, 0, SV("abcde"), 5, 0, 0);
342 test(S("abcde"), 0, 0, SV("abcde"), 5, 1, 0);
343 test(S("abcde"), 0, 0, SV("abcde"), 6, 0, 0);
344 test(S("abcde"), 0, 0, SV("abcdefghij"), 0, 0, 0);
345 test(S("abcde"), 0, 0, SV("abcdefghij"), 0, 1, -1);
346 test(S("abcde"), 0, 0, SV("abcdefghij"), 0, 5, -5);
347 test(S("abcde"), 0, 0, SV("abcdefghij"), 0, 9, -9);
348 test(S("abcde"), 0, 0, SV("abcdefghij"), 0, 10, -10);
349 test(S("abcde"), 0, 0, SV("abcdefghij"), 0, 11, -10);
350 test(S("abcde"), 0, 0, SV("abcdefghij"), 1, 0, 0);
351 test(S("abcde"), 0, 0, SV("abcdefghij"), 1, 1, -1);
352 test(S("abcde"), 0, 0, SV("abcdefghij"), 1, 4, -4);
353 test(S("abcde"), 0, 0, SV("abcdefghij"), 1, 8, -8);
354 test(S("abcde"), 0, 0, SV("abcdefghij"), 1, 9, -9);
355 test(S("abcde"), 0, 0, SV("abcdefghij"), 1, 10, -9);
356 test(S("abcde"), 0, 0, SV("abcdefghij"), 5, 0, 0);
357 test(S("abcde"), 0, 0, SV("abcdefghij"), 5, 1, -1);
358 test(S("abcde"), 0, 0, SV("abcdefghij"), 5, 2, -2);
359 test(S("abcde"), 0, 0, SV("abcdefghij"), 5, 4, -4);
360 test(S("abcde"), 0, 0, SV("abcdefghij"), 5, 5, -5);
361 test(S("abcde"), 0, 0, SV("abcdefghij"), 5, 6, -5);
362 test(S("abcde"), 0, 0, SV("abcdefghij"), 9, 0, 0);
363 test(S("abcde"), 0, 0, SV("abcdefghij"), 9, 1, -1);
364 test(S("abcde"), 0, 0, SV("abcdefghij"), 9, 2, -1);
365 test(S("abcde"), 0, 0, SV("abcdefghij"), 10, 0, 0);
366 test(S("abcde"), 0, 0, SV
367 test(S("abcde"), 0, 0, SV("abcdefghij"), 11, 0, 0);
368 test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
369 test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
370 test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
371 test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
372 test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
373 test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
374 test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
375 test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
376 test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
377 test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
378 test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
379 test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
380 test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
381 test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
382 test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
383 test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
384 test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
385 test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
386 test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
387 test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
388 test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
389 test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
390 test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
391 test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
392 test(S("abcde"), 0, 1, SV(""), 0, 0, 1);
393 test(S("abcde"), 0, 1, SV(""), 0, 1, 1);
394 test(S("abcde"), 0, 1, SV(""), 1, 0, 0);
395 test(S("abcde"), 0, 1, SV("abcde"), 0, 0, 1);
398 template <class S, class SV>
401 test(S("abcde"), 0, 1, SV("abcde"), 0, 1, 0);
402 test(S("abcde"), 0, 1, SV("abcde"), 0, 2, -1);
403 test(S("abcde"), 0, 1, SV("abcde"), 0, 4, -3);
404 test(S("abcde"), 0, 1, SV("abcde"), 0, 5, -4);
405 test(S("abcde"), 0, 1, SV("abcde"), 0, 6, -4);
406 test(S("abcde"), 0, 1, SV("abcde"), 1, 0, 1);
407 test(S("abcde"), 0, 1, SV("abcde"), 1, 1, -1);
408 test(S("abcde"), 0, 1, SV("abcde"), 1, 2, -1);
409 test(S("abcde"), 0, 1, SV("abcde"), 1, 3, -1);
410 test(S("abcde"), 0, 1, SV("abcde"), 1, 4, -1);
411 test(S("abcde"), 0, 1, SV("abcde"), 1, 5, -1);
412 test(S("abcde"), 0, 1, SV("abcde"), 2, 0, 1);
413 test(S("abcde"), 0, 1, SV("abcde"), 2, 1, -2);
414 test(S("abcde"), 0, 1, SV("abcde"), 2, 2, -2);
415 test(S("abcde"), 0, 1, SV("abcde"), 2, 3, -2);
416 test(S("abcde"), 0, 1, SV("abcde"), 2, 4, -2);
417 test(S("abcde"), 0, 1, SV("abcde"), 4, 0, 1);
418 test(S("abcde"), 0, 1, SV("abcde"), 4, 1, -4);
419 test(S("abcde"), 0, 1, SV("abcde"), 4, 2, -4);
420 test(S("abcde"), 0, 1, SV("abcde"), 5, 0, 1);
421 test(S("abcde"), 0, 1, SV("abcde"), 5, 1, 1);
422 test(S("abcde"), 0, 1, SV("abcde"), 6, 0, 0);
423 test(S("abcde"), 0, 1, SV("abcdefghij"), 0, 0, 1);
424 test(S("abcde"), 0, 1, SV("abcdefghij"), 0, 1, 0);
425 test(S("abcde"), 0, 1, SV("abcdefghij"), 0, 5, -4);
426 test(S("abcde"), 0, 1, SV("abcdefghij"), 0, 9, -8);
427 test(S("abcde"), 0, 1, SV("abcdefghij"), 0, 10, -9);
428 test(S("abcde"), 0, 1, SV("abcdefghij"), 0, 11, -9);
429 test(S("abcde"), 0, 1, SV("abcdefghij"), 1, 0, 1);
430 test(S("abcde"), 0, 1, SV("abcdefghij"), 1, 1, -1);
431 test(S("abcde"), 0, 1, SV("abcdefghij"), 1, 4, -1);
432 test(S("abcde"), 0, 1, SV("abcdefghij"), 1, 8, -1);
433 test(S("abcde"), 0, 1, SV("abcdefghij"), 1, 9, -1);
434 test(S("abcde"), 0, 1, SV("abcdefghij"), 1, 10, -1);
435 test(S("abcde"), 0, 1, SV("abcdefghij"), 5, 0, 1);
436 test(S("abcde"), 0, 1, SV("abcdefghij"), 5, 1, -5);
437 test(S("abcde"), 0, 1, SV("abcdefghij"), 5, 2, -5);
438 test(S("abcde"), 0, 1, SV("abcdefghij"), 5, 4, -5);
439 test(S("abcde"), 0, 1, SV("abcdefghij"), 5, 5, -5);
440 test(S("abcde"), 0, 1, SV("abcdefghij"), 5, 6, -5);
441 test(S("abcde"), 0, 1, SV("abcdefghij"), 9, 0, 1);
442 test(S("abcde"), 0, 1, SV("abcdefghij"), 9, 1, -9);
443 test(S("abcde"), 0, 1, SV("abcdefghij"), 9, 2, -9);
444 test(S("abcde"), 0, 1, SV("abcdefghij"), 10, 0, 1);
445 test(S("abcde"), 0, 1, SV("abcdefghij"), 10, 1, 1);
446 test(S("abcde"), 0, 1, SV("abcdefghij"), 11, 0, 0);
447 test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 0, 1);
448 test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 1, 0);
449 test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 10, -9);
450 test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 19, -18);
451 test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 20, -19);
452 test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 21, -19);
453 test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 0, 1);
454 test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 1, -1);
455 test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 9, -1);
456 test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 18, -1);
457 test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 19, -1);
458 test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 20, -1);
459 test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 0, 1);
460 test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 1, -10);
461 test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 5, -10);
462 test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 9, -10);
463 test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 10, -10);
464 test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 11, -10);
465 test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 19, 0, 1);
466 test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 19, 1, -19);
467 test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 19, 2, -19);
468 test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 20, 0, 1);
469 test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 20, 1, 1);
470 test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
471 test(S("abcde"), 0, 2, SV(""), 0, 0, 2);
472 test(S("abcde"), 0, 2, SV(""), 0, 1, 2);
473 test(S("abcde"), 0, 2, SV(""), 1, 0, 0);
474 test(S("abcde"), 0, 2, SV("abcde"), 0, 0, 2);
475 test(S("abcde"), 0, 2, SV("abcde"), 0, 1, 1);
476 test(S("abcde"), 0, 2, SV("abcde"), 0, 2, 0);
477 test(S("abcde"), 0, 2, SV("abcde"), 0, 4, -2);
478 test(S("abcde"), 0, 2, SV("abcde"), 0, 5, -3);
479 test(S("abcde"), 0, 2, SV("abcde"), 0, 6, -3);
480 test(S("abcde"), 0, 2, SV("abcde"), 1, 0, 2);
481 test(S("abcde"), 0, 2, SV("abcde"), 1, 1, -1);
482 test(S("abcde"), 0, 2, SV("abcde"), 1, 2, -1);
483 test(S("abcde"), 0, 2, SV("abcde"), 1, 3, -1);
484 test(S("abcde"), 0, 2, SV("abcde"), 1, 4, -1);
485 test(S("abcde"), 0, 2, SV("abcde"), 1, 5, -1);
486 test(S("abcde"), 0, 2, SV("abcde"), 2, 0, 2);
487 test(S("abcde"), 0, 2, SV("abcde"), 2, 1, -2);
488 test(S("abcde"), 0, 2, SV("abcde"), 2, 2, -2);
489 test(S("abcde"), 0, 2, SV("abcde"), 2, 3, -2);
490 test(S("abcde"), 0, 2, SV("abcde"), 2, 4, -2);
491 test(S("abcde"), 0, 2, SV("abcde"), 4, 0, 2);
492 test(S("abcde"), 0, 2, SV("abcde"), 4, 1, -4);
493 test(S("abcde"), 0, 2, SV("abcde"), 4, 2, -4);
494 test(S("abcde"), 0, 2, SV("abcde"), 5, 0, 2);
495 test(S("abcde"), 0, 2, SV("abcde"), 5, 1, 2);
496 test(S("abcde"), 0, 2, SV("abcde"), 6, 0, 0);
497 test(S("abcde"), 0, 2, SV("abcdefghij"), 0, 0, 2);
498 test(S("abcde"), 0, 2, SV("abcdefghij"), 0, 1, 1);
499 test(S("abcde"), 0, 2, SV("abcdefghij"), 0, 5, -3);
500 test(S("abcde"), 0, 2, SV("abcdefghij"), 0, 9, -7);
503 template <class S, class SV>
506 test(S("abcde"), 0, 2, SV("abcdefghij"), 0, 10, -8);
507 test(S("abcde"), 0, 2, SV("abcdefghij"), 0, 11, -8);
508 test(S("abcde"), 0, 2, SV("abcdefghij"), 1, 0, 2);
509 test(S("abcde"), 0, 2, SV("abcdefghij"), 1, 1, -1);
510 test(S("abcde"), 0, 2, SV("abcdefghij"), 1, 4, -1);
511 test(S("abcde"), 0, 2, SV("abcdefghij"), 1, 8, -1);
512 test(S("abcde"), 0, 2, SV("abcdefghij"), 1, 9, -1);
513 test(S("abcde"), 0, 2, SV("abcdefghij"), 1, 10, -1);
514 test(S("abcde"), 0, 2, SV("abcdefghij"), 5, 0, 2);
515 test(S("abcde"), 0, 2, SV("abcdefghij"), 5, 1, -5);
516 test(S("abcde"), 0, 2, SV("abcdefghij"), 5, 2, -5);
517 test(S("abcde"), 0, 2, SV("abcdefghij"), 5, 4, -5);
518 test(S("abcde"), 0, 2, SV("abcdefghij"), 5, 5, -5);
519 test(S("abcde"), 0, 2, SV("abcdefghij"), 5, 6, -5);
520 test(S("abcde"), 0, 2, SV("abcdefghij"), 9, 0, 2);
521 test(S("abcde"), 0, 2, SV("abcdefghij"), 9, 1, -9);
522 test(S("abcde"), 0, 2, SV("abcdefghij"), 9, 2, -9);
523 test(S("abcde"), 0, 2, SV("abcdefghij"), 10, 0, 2);
524 test(S("abcde"), 0, 2, SV("abcdefghij"), 10, 1, 2);
525 test(S("abcde"), 0, 2, SV("abcdefghij"), 11, 0, 0);
526 test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 0, 0, 2);
527 test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 0, 1, 1);
528 test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 0, 10, -8);
529 test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 0, 19, -17);
530 test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 0, 20, -18);
531 test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 0, 21, -18);
532 test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 1, 0, 2);
533 test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 1, 1, -1);
534 test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 1, 9, -1);
535 test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 1, 18, -1);
536 test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 1, 19, -1);
537 test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 1, 20, -1);
538 test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 10, 0, 2);
539 test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 10, 1, -10);
540 test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 10, 5, -10);
541 test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 10, 9, -10);
542 test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 10, 10, -10);
543 test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 10, 11, -10);
544 test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 19, 0, 2);
545 test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 19, 1, -19);
546 test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 19, 2, -19);
547 test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 20, 0, 2);
548 test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 20, 1, 2);
549 test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 21, 0, 0);
550 test(S("abcde"), 0, 4, SV(""), 0, 0, 4);
551 test(S("abcde"), 0, 4, SV(""), 0, 1, 4);
552 test(S("abcde"), 0, 4, SV(""), 1, 0, 0);
553 test(S("abcde"), 0, 4, SV("abcde"), 0, 0, 4);
554 test(S("abcde"), 0, 4, SV("abcde"), 0, 1, 3);
555 test(S("abcde"), 0, 4, SV("abcde"), 0, 2, 2);
556 test(S("abcde"), 0, 4, SV("abcde"), 0, 4, 0);
557 test(S("abcde"), 0, 4, SV("abcde"), 0, 5, -1);
558 test(S("abcde"), 0, 4, SV("abcde"), 0, 6, -1);
559 test(S("abcde"), 0, 4, SV("abcde"), 1, 0, 4);
560 test(S("abcde"), 0, 4, SV("abcde"), 1, 1, -1);
561 test(S("abcde"), 0, 4, SV("abcde"), 1, 2, -1);
562 test(S("abcde"), 0, 4, SV("abcde"), 1, 3, -1);
563 test(S("abcde"), 0, 4, SV("abcde"), 1, 4, -1);
564 test(S("abcde"), 0, 4, SV("abcde"), 1, 5, -1);
565 test(S("abcde"), 0, 4, SV("abcde"), 2, 0, 4);
566 test(S("abcde"), 0, 4, SV("abcde"), 2, 1, -2);
567 test(S("abcde"), 0, 4, SV("abcde"), 2, 2, -2);
568 test(S("abcde"), 0, 4, SV("abcde"), 2, 3, -2);
569 test(S("abcde"), 0, 4, SV("abcde"), 2, 4, -2);
570 test(S("abcde"), 0, 4, SV("abcde"), 4, 0, 4);
571 test(S("abcde"), 0, 4, SV("abcde"), 4, 1, -4);
572 test(S("abcde"), 0, 4, SV("abcde"), 4, 2, -4);
573 test(S("abcde"), 0, 4, SV("abcde"), 5, 0, 4);
574 test(S("abcde"), 0, 4, SV("abcde"), 5, 1, 4);
575 test(S("abcde"), 0, 4, SV("abcde"), 6, 0, 0);
576 test(S("abcde"), 0, 4, SV("abcdefghij"), 0, 0, 4);
577 test(S("abcde"), 0, 4, SV("abcdefghij"), 0, 1, 3);
578 test(S("abcde"), 0, 4, SV("abcdefghij"), 0, 5, -1);
579 test(S("abcde"), 0, 4, SV("abcdefghij"), 0, 9, -5);
580 test(S("abcde"), 0, 4, SV("abcdefghij"), 0, 10, -6);
581 test(S("abcde"), 0, 4, SV("abcdefghij"), 0, 11, -6);
582 test(S("abcde"), 0, 4, SV("abcdefghij"), 1, 0, 4);
583 test(S("abcde"), 0, 4, SV("abcdefghij"), 1, 1, -1);
584 test(S("abcde"), 0, 4, SV("abcdefghij"), 1, 4, -1);
585 test(S("abcde"), 0, 4, SV("abcdefghij"), 1, 8, -1);
586 test(S("abcde"), 0, 4, SV("abcdefghij"), 1, 9, -1);
587 test(S("abcde"), 0, 4, SV("abcdefghij"), 1, 10, -1);
588 test(S("abcde"), 0, 4, SV("abcdefghij"), 5, 0, 4);
589 test(S("abcde"), 0, 4, SV("abcdefghij"), 5, 1, -5);
590 test(S("abcde"), 0, 4, SV("abcdefghij"), 5, 2, -5);
591 test(S("abcde"), 0, 4, SV("abcdefghij"), 5, 4, -5);
592 test(S("abcde"), 0, 4, SV("abcdefghij"), 5, 5, -5);
593 test(S("abcde"), 0, 4, SV("abcdefghij"), 5, 6, -5);
594 test(S("abcde"), 0, 4, SV("abcdefghij"), 9, 0, 4);
595 test(S("abcde"), 0, 4, SV("abcdefghij"), 9, 1, -9);
596 test(S("abcde"), 0, 4, SV("abcdefghij"), 9, 2, -9);
597 test(S("abcde"), 0, 4, SV("abcdefghij"), 10, 0, 4);
598 test(S("abcde"), 0, 4, SV("abcdefghij"), 10, 1, 4);
599 test(S("abcde"), 0, 4, SV("abcdefghij"), 11, 0, 0);
600 test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 0, 0, 4);
601 test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 0, 1, 3);
602 test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 0, 10, -6);
603 test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 0, 19, -15);
604 test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 0, 20, -16);
605 test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 0, 21, -16);
608 template <class S, class SV>
611 test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 1, 0, 4);
612 test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 1, 1, -1);
613 test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 1, 9, -1);
614 test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 1, 18, -1);
615 test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 1, 19, -1);
616 test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 1, 20, -1);
617 test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 10, 0, 4);
618 test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 10, 1, -10);
619 test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 10, 5, -10);
620 test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 10, 9, -10);
621 test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 10, 10, -10);
622 test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 10, 11, -10);
623 test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 19, 0, 4);
624 test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 19, 1, -19);
625 test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 19, 2, -19);
626 test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 20, 0, 4);
627 test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 20, 1, 4);
628 test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 21, 0, 0);
629 test(S("abcde"), 0, 5, SV(""), 0, 0, 5);
630 test(S("abcde"), 0, 5, SV(""), 0, 1, 5);
631 test(S("abcde"), 0, 5, SV(""), 1, 0, 0);
632 test(S("abcde"), 0, 5, SV("abcde"), 0, 0, 5);
633 test(S("abcde"), 0, 5, SV("abcde"), 0, 1, 4);
634 test(S("abcde"), 0, 5, SV("abcde"), 0, 2, 3);
635 test(S("abcde"), 0, 5, SV("abcde"), 0, 4, 1);
636 test(S("abcde"), 0, 5, SV("abcde"), 0, 5, 0);
637 test(S("abcde"), 0, 5, SV("abcde"), 0, 6, 0);
638 test(S("abcde"), 0, 5, SV("abcde"), 1, 0, 5);
639 test(S("abcde"), 0, 5, SV("abcde"), 1, 1, -1);
640 test(S("abcde"), 0, 5, SV("abcde"), 1, 2, -1);
641 test(S("abcde"), 0, 5, SV("abcde"), 1, 3, -1);
642 test(S("abcde"), 0, 5, SV("abcde"), 1, 4, -1);
643 test(S("abcde"), 0, 5, SV("abcde"), 1, 5, -1);
644 test(S("abcde"), 0, 5, SV("abcde"), 2, 0, 5);
645 test(S("abcde"), 0, 5, SV("abcde"), 2, 1, -2);
646 test(S("abcde"), 0, 5, SV("abcde"), 2, 2, -2);
647 test(S("abcde"), 0, 5, SV("abcde"), 2, 3, -2);
648 test(S("abcde"), 0, 5, SV("abcde"), 2, 4, -2);
649 test(S("abcde"), 0, 5, SV("abcde"), 4, 0, 5);
650 test(S("abcde"), 0, 5, SV("abcde"), 4, 1, -4);
651 test(S("abcde"), 0, 5, SV("abcde"), 4, 2, -4);
652 test(S("abcde"), 0, 5, SV("abcde"), 5, 0, 5);
653 test(S("abcde"), 0, 5, SV("abcde"), 5, 1, 5);
654 test(S("abcde"), 0, 5, SV("abcde"), 6, 0, 0);
655 test(S("abcde"), 0, 5, SV("abcdefghij"), 0, 0, 5);
656 test(S("abcde"), 0, 5, SV("abcdefghij"), 0, 1, 4);
657 test(S("abcde"), 0, 5, SV("abcdefghij"), 0, 5, 0);
658 test(S("abcde"), 0, 5, SV("abcdefghij"), 0, 9, -4);
659 test(S("abcde"), 0, 5, SV("abcdefghij"), 0, 10, -5);
660 test(S("abcde"), 0, 5, SV("abcdefghij"), 0, 11, -5);
661 test(S("abcde"), 0, 5, SV("abcdefghij"), 1, 0, 5);
662 test(S("abcde"), 0, 5, SV("abcdefghij"), 1, 1, -1);
663 test(S("abcde"), 0, 5, SV("abcdefghij"), 1, 4, -1);
664 SV("abcdefghij"), 1, 8, -1);
665 test(S("abcde"), 0, 5, SV("abcdefghij"), 1, 9, -1);
666 test(S("abcde"), 0, 5, SV("abcdefghij"), 1, 10, -1);
667 test(S("abcde"), 0, 5, SV("abcdefghij"), 5, 0, 5);
668 test(S("abcde"), 0, 5, SV("abcdefghij"), 5, 1, -5);
669 test(S("abcde"), 0, 5, SV("abcdefghij"), 5, 2, -5);
670 test(S("abcde"), 0, 5, SV("abcdefghij"), 5, 4, -5);
671 test(S("abcde"), 0, 5, SV("abcdefghij"), 5, 5, -5);
672 test(S("abcde"), 0, 5, SV("abcdefghij"), 5, 6, -5);
673 test(S("abcde"), 0, 5, SV("abcdefghij"), 9, 0, 5);
674 test(S("abcde"), 0, 5, SV("abcdefghij"), 9, 1, -9);
675 test(S("abcde"), 0, 5, SV("abcdefghij"), 9, 2, -9);
676 test(S("abcde"), 0, 5, SV("abcdefghij"), 10, 0, 5);
677 test(S("abcde"), 0, 5, SV("abcdefghij"), 10, 1, 5);
678 test(S("abcde"), 0, 5, SV("abcdefghij"), 11, 0, 0);
679 test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 0, 0, 5);
680 test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 0, 1, 4);
681 test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 0, 10, -5);
682 test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 0, 19, -14);
683 test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 0, 20, -15);
684 test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 0, 21, -15);
685 test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 1, 0, 5);
686 test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 1, 1, -1);
687 test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 1, 9, -1);
688 test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 1, 18, -1);
689 test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 1, 19, -1);
690 test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 1, 20, -1);
691 test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 10, 0, 5);
692 test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 10, 1, -10);
693 test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 10, 5, -10);
694 test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 10, 9, -10);
695 test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 10, 10, -10);
696 test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 10, 11, -10);
697 test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 19, 0, 5);
698 test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 19, 1, -19);
699 test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 19, 2, -19);
700 test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 20, 0, 5);
701 test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 20, 1, 5);
702 test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 21, 0, 0);
703 test(S("abcde"), 0, 6, SV(""), 0, 0, 5);
704 test(S("abcde"), 0, 6, SV(""), 0, 1, 5);
705 test(S("abcde"), 0, 6, SV(""), 1, 0, 0);
706 test(S("abcde"), 0, 6, SV("abcde"), 0, 0, 5);
707 test(S("abcde"), 0, 6, SV("abcde"), 0, 1, 4);
708 test(S("abcde"), 0, 6, SV("abcde"), 0, 2, 3);
709 test(S("abcde"), 0, 6, SV("abcde"), 0, 4, 1);
710 test(S("abcde"), 0, 6, SV("abcde"), 0, 5, 0);
713 template <class S, class SV>
716 test(S("abcde"), 0, 6, SV("abcde"), 0, 6, 0);
717 test(S("abcde"), 0, 6, SV("abcde"), 1, 0, 5);
718 test(S("abcde"), 0, 6, SV("abcde"), 1, 1, -1);
719 test(S("abcde"), 0, 6, SV("abcde"), 1, 2, -1);
720 test(S("abcde"), 0, 6, SV("abcde"), 1, 3, -1);
721 test(S("abcde"), 0, 6, SV("abcde"), 1, 4, -1);
722 test(S("abcde"), 0, 6, SV("abcde"), 1, 5, -1);
723 test(S("abcde"), 0, 6, SV("abcde"), 2, 0, 5);
724 test(S("abcde"), 0, 6, SV("abcde"), 2, 1, -2);
725 test(S("abcde"), 0, 6, SV("abcde"), 2, 2, -2);
726 test(S("abcde"), 0, 6, SV("abcde"), 2, 3, -2);
727 test(S("abcde"), 0, 6, SV("abcde"), 2, 4, -2);
728 test(S("abcde"), 0, 6, SV("abcde"), 4, 0, 5);
729 test(S("abcde"), 0, 6, SV("abcde"), 4, 1, -4);
730 test(S("abcde"), 0, 6, SV("abcde"), 4, 2, -4);
731 test(S("abcde"), 0, 6, SV("abcde"), 5, 0, 5);
732 test(S("abcde"), 0, 6, SV("abcde"), 5, 1, 5);
733 test(S("abcde"), 0, 6, SV("abcde"), 6, 0, 0);
734 test(S("abcde"), 0, 6, SV("abcdefghij"), 0, 0, 5);
735 test(S("abcde"), 0, 6, SV("abcdefghij"), 0, 1, 4);
736 test(S("abcde"), 0, 6, SV("abcdefghij"), 0, 5, 0);
737 test(S("abcde"), 0, 6, SV("abcdefghij"), 0, 9, -4);
738 test(S("abcde"), 0, 6, SV("abcdefghij"), 0, 10, -5);
739 test(S("abcde"), 0, 6, SV("abcdefghij"), 0, 11, -5);
740 test(S("abcde"), 0, 6, SV("abcdefghij"), 1, 0, 5);
741 test(S("abcde"), 0, 6, SV("abcdefghij"), 1, 1, -1);
742 test(S("abcde"), 0, 6, SV("abcdefghij"), 1, 4, -1);
743 test(S("abcde"), 0, 6, SV("abcdefghij"), 1, 8, -1);
744 test(S("abcde"), 0, 6, SV("abcdefghij"), 1, 9, -1);
745 test(S("abcde"), 0, 6, SV("abcdefghij"), 1, 10, -1);
746 test(S("abcde"), 0, 6, SV("abcdefghij"), 5, 0, 5);
747 test(S("abcde"), 0, 6, SV("abcdefghij"), 5, 1, -5);
748 test(S("abcde"), 0, 6, SV("abcdefghij"), 5, 2, -5);
749 test(S("abcde"), 0, 6, SV("abcdefghij"), 5, 4, -5);
750 test(S("abcde"), 0, 6, SV("abcdefghij"), 5, 5, -5);
751 test(S("abcde"), 0, 6, SV("abcdefghij"), 5, 6, -5);
752 test(S("abcde"), 0, 6, SV("abcdefghij"), 9, 0, 5);
753 test(S("abcde"), 0, 6, SV("abcdefghij"), 9, 1, -9);
754 test(S("abcde"), 0, 6, SV("abcdefghij"), 9, 2, -9);
755 test(S("abcde"), 0, 6, SV("abcdefghij"), 10, 0, 5);
756 test(S("abcde"), 0, 6, SV("abcdefghij"), 10, 1, 5);
757 test(S("abcde"), 0, 6, SV("abcdefghij"), 11, 0, 0);
758 test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 0, 0, 5);
759 test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 0, 1, 4);
760 test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 0, 10, -5);
761 test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 0, 19, -14);
762 test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 0, 20, -15);
763 test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 0, 21, -15);
764 test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 1, 0, 5);
765 test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 1, 1, -1);
766 test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 1, 9, -1);
767 test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 1, 18, -1);
768 test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 1, 19, -1);
769 test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 1, 20, -1);
770 test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 10, 0, 5);
771 test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 10, 1, -10);
772 test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 10, 5, -10);
773 test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 10, 9, -10);
774 test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 10, 10, -10);
775 test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 10, 11, -10);
776 test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 19, 0, 5);
777 test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 19, 1, -19);
778 test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 19, 2, -19);
779 test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 20, 0, 5);
780 test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 20, 1, 5);
781 test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 21, 0, 0);
782 test(S("abcde"), 1, 0, SV(""), 0, 0, 0);
783 test(S("abcde"), 1, 0, SV(""), 0, 1, 0);
784 test(S("abcde"), 1, 0, SV(""), 1, 0, 0);
785 test(S("abcde"), 1, 0, SV("abcde"), 0, 0, 0);
786 test(S("abcde"), 1, 0, SV("abcde"), 0, 1, -1);
787 test(S("abcde"), 1, 0, SV("abcde"), 0, 2, -2);
788 test(S("abcde"), 1, 0, SV("abcde"), 0, 4, -4);
789 test(S("abcde"), 1, 0, SV("abcde"), 0, 5, -5);
790 test(S("abcde"), 1, 0, SV("abcde"), 0, 6, -5);
791 test(S("abcde"), 1, 0, SV("abcde"), 1, 0, 0);
792 test(S("abcde"), 1, 0, SV("abcde"), 1, 1, -1);
793 test(S("abcde"), 1, 0, SV("abcde"), 1, 2, -2);
794 test(S("abcde"), 1, 0, SV("abcde"), 1, 3, -3);
795 test(S("abcde"), 1, 0, SV("abcde"), 1, 4, -4);
796 test(S("abcde"), 1, 0, SV("abcde"), 1, 5, -4);
797 test(S("abcde"), 1, 0, SV("abcde"), 2, 0, 0);
798 test(S("abcde"), 1, 0, SV("abcde"), 2, 1, -1);
799 test(S("abcde"), 1, 0, SV("abcde"), 2, 2, -2);
800 test(S("abcde"), 1, 0, SV("abcde"), 2, 3, -3);
801 test(S("abcde"), 1, 0, SV("abcde"), 2, 4, -3);
802 test(S("abcde"), 1, 0, SV("abcde"), 4, 0, 0);
803 test(S("abcde"), 1, 0, SV("abcde"), 4, 1, -1);
804 test(S("abcde"), 1, 0, SV("abcde"), 4, 2, -1);
805 test(S("abcde"), 1, 0, SV("abcde"), 5, 0, 0);
806 test(S("abcde"), 1, 0, SV("abcde"), 5, 1, 0);
807 test(S("abcde"), 1, 0, SV("abcde"), 6, 0, 0);
808 test(S("abcde"), 1, 0, SV("abcdefghij"), 0, 0, 0);
809 test(S("abcde"), 1, 0, SV("abcdefghij"), 0, 1, -1);
810 test(S("abcde"), 1, 0, SV("abcdefghij"), 0, 5, -5);
811 test(S("abcde"), 1, 0, SV("abcdefghij"), 0, 9, -9);
812 test(S("abcde"), 1, 0, SV("abcdefghij"), 0, 10, -10);
813 test(S("abcde"), 1, 0, SV("abcdefghij"), 0, 11, -10);
814 test(S("abcde"), 1, 0, SV("abcdefghij"), 1, 0, 0);
815 test(S("abcde"), 1, 0, SV("abcdefghij"), 1, 1, -1);
818 template <class S, class SV>
821 test(S("abcde"), 1, 0, SV("abcdefghij"), 1, 4, -4);
822 test(S("abcde"), 1, 0, SV("abcdefghij"), 1, 8, -8);
823 test(S("abcde"), 1, 0, SV("abcdefghij"), 1, 9, -9);
824 test(S("abcde"), 1, 0, SV("abcdefghij"), 1, 10, -9);
825 test(S("abcde"), 1, 0, SV("abcdefghij"), 5, 0, 0);
826 test(S("abcde"), 1, 0, SV("abcdefghij"), 5, 1, -1);
827 test(S("abcde"), 1, 0, SV("abcdefghij"), 5, 2, -2);
828 test(S("abcde"), 1, 0, SV("abcdefghij"), 5, 4, -4);
829 test(S("abcde"), 1, 0, SV("abcdefghij"), 5, 5, -5);
830 test(S("abcde"), 1, 0, SV("abcdefghij"), 5, 6, -5);
831 test(S("abcde"), 1, 0, SV("abcdefghij"), 9, 0, 0);
832 test(S("abcde"), 1, 0, SV("abcdefghij"), 9, 1, -1);
833 test(S("abcde"), 1, 0, SV("abcdefghij"), 9, 2, -1);
834 test(S("abcde"), 1, 0, SV("abcdefghij"), 10, 0, 0);
835 test(S("abcde"), 1, 0, SV("abcdefghij"), 10, 1, 0);
836 test(S("abcde"), 1, 0, SV("abcdefghij"), 11, 0, 0);
837 test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
838 test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
839 test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
840 test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
841 test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
842 test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
843 test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
844 test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
845 test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
846 test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
847 test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
848 test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
849 test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
850 test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
851 test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
852 test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
853 test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
854 test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
855 test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
856 test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
857 test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
858 test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
859 test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
860 test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
861 test(S("abcde"), 1, 1, SV(""), 0, 0, 1);
862 test(S("abcde"), 1, 1, SV(""), 0, 1, 1);
863 test(S("abcde"), 1, 1, SV(""), 1, 0, 0);
864 test(S("abcde"), 1, 1, SV("abcde"), 0, 0, 1);
865 test(S("abcde"), 1, 1, SV("abcde"), 0, 1, 1);
866 test(S("abcde"), 1, 1, SV("abcde"), 0, 2, 1);
867 test(S("abcde"), 1, 1, SV("abcde"), 0, 4, 1);
868 test(S("abcde"), 1, 1, SV("abcde"), 0, 5, 1);
869 test(S("abcde"), 1, 1, SV("abcde"), 0, 6, 1);
870 test(S("abcde"), 1, 1, SV("abcde"), 1, 0, 1);
871 test(S("abcde"), 1, 1, SV("abcde"), 1, 1, 0);
872 test(S("abcde"), 1, 1, SV("abcde"), 1, 2, -1);
873 test(S("abcde"), 1, 1, SV("abcde"), 1, 3, -2);
874 test(S("abcde"), 1, 1, SV("abcde"), 1, 4, -3);
875 test(S("abcde"), 1, 1, SV("abcde"), 1, 5, -3);
876 test(S("abcde"), 1, 1, SV("abcde"), 2, 0, 1);
877 test(S("abcde"), 1, 1, SV("abcde"), 2, 1, -1);
878 test(S("abcde"), 1, 1, SV("abcde"), 2, 2, -1);
879 test(S("abcde"), 1, 1, SV("abcde"), 2, 3, -1);
880 test(S("abcde"), 1, 1, SV("abcde"), 2, 4, -1);
881 test(S("abcde"), 1, 1, SV("abcde"), 4, 0, 1);
882 test(S("abcde"), 1, 1, SV("abcde"), 4, 1, -3);
883 test(S("abcde"), 1, 1, SV("abcde"), 4, 2, -3);
884 test(S("abcde"), 1, 1, SV("abcde"), 5, 0, 1);
885 test(S("abcde"), 1, 1, SV("abcde"), 5, 1, 1);
886 test(S("abcde"), 1, 1, SV("abcde"), 6, 0, 0);
887 test(S("abcde"), 1, 1, SV("abcdefghij"), 0, 0, 1);
888 test(S("abcde"), 1, 1, SV("abcdefghij"), 0, 1, 1);
889 test(S("abcde"), 1, 1, SV("abcdefghij"), 0, 5, 1);
890 test(S("abcde"), 1, 1, SV("abcdefghij"), 0, 9, 1);
891 test(S("abcde"), 1, 1, SV("abcdefghij"), 0, 10, 1);
892 test(S("abcde"), 1, 1, SV("abcdefghij"), 0, 11, 1);
893 test(S("abcde"), 1, 1, SV("abcdefghij"), 1, 0, 1);
894 test(S("abcde"), 1, 1, SV("abcdefghij"), 1, 1, 0);
895 test(S("abcde"), 1, 1, SV("abcdefghij"), 1, 4, -3);
896 test(S("abcde"), 1, 1, SV("abcdefghij"), 1, 8, -7);
897 test(S("abcde"), 1, 1, SV("abcdefghij"), 1, 9, -8);
898 test(S("abcde"), 1, 1, SV("abcdefghij"), 1, 10, -8);
899 test(S("abcde"), 1, 1, SV("abcdefghij"), 5, 0, 1);
900 test(S("abcde"), 1, 1, SV("abcdefghij"), 5, 1, -4);
901 test(S("abcde"), 1, 1, SV("abcdefghij"), 5, 2, -4);
902 test(S("abcde"), 1, 1, SV("abcdefghij"), 5, 4, -4);
903 test(S("abcde"), 1, 1, SV("abcdefghij"), 5, 5, -4);
904 test(S("abcde"), 1, 1, SV("abcdefghij"), 5, 6, -4);
905 test(S("abcde"), 1, 1, SV("abcdefghij"), 9, 0, 1);
906 test(S("abcde"), 1, 1, SV("abcdefghij"), 9, 1, -8);
907 test(S("abcde"), 1, 1, SV("abcdefghij"), 9, 2, -8);
908 test(S("abcde"), 1, 1, SV("abcdefghij"), 10, 0, 1);
909 test(S("abcde"), 1, 1, SV("abcdefghij"), 10, 1, 1);
910 test(S("abcde"), 1, 1, SV("abcdefghij"), 11, 0, 0);
911 test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 0, 1);
912 test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 1, 1);
913 test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 10, 1);
914 test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 19, 1);
915 test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 20, 1);
916 test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 21, 1);
917 test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 0, 1);
918 test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 1, 0);
919 test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 9, -8);
920 test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 18, -17);
923 template <class S, class SV>
926 test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 19, -18);
927 test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 20, -18);
928 test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 0, 1);
929 test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 1, -9);
930 test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 5, -9);
931 test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 9, -9);
932 test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 10, -9);
933 test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 11, -9);
934 test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 19, 0, 1);
935 test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 19, 1, -18);
936 test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 19, 2, -18);
937 test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 20, 0, 1);
938 test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 20, 1, 1);
939 test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
940 test(S("abcde"), 1, 2, SV(""), 0, 0, 2);
941 test(S("abcde"), 1, 2, SV(""), 0, 1, 2);
942 test(S("abcde"), 1, 2, SV(""), 1, 0, 0);
943 test(S("abcde"), 1, 2, SV("abcde"), 0, 0, 2);
944 test(S("abcde"), 1, 2, SV("abcde"), 0, 1, 1);
945 test(S("abcde"), 1, 2, SV("abcde"), 0, 2, 1);
946 test(S("abcde"), 1, 2, SV("abcde"), 0, 4, 1);
947 test(S("abcde"), 1, 2, SV("abcde"), 0, 5, 1);
948 test(S("abcde"), 1, 2, SV("abcde"), 0, 6, 1);
949 test(S("abcde"), 1, 2, SV("abcde"), 1, 0, 2);
950 test(S("abcde"), 1, 2, SV("abcde"), 1, 1, 1);
951 test(S("abcde"), 1, 2, SV("abcde"), 1, 2, 0);
952 test(S("abcde"), 1, 2, SV("abcde"), 1, 3, -1);
953 test(S("abcde"), 1, 2, SV("abcde"), 1, 4, -2);
954 test(S("abcde"), 1, 2, SV("abcde"), 1, 5, -2);
955 test(S("abcde"), 1, 2, SV("abcde"), 2, 0, 2);
956 test(S("abcde"), 1, 2, SV("abcde"), 2, 1, -1);
957 test(S("abcde"), 1, 2, SV("abcde"), 2, 2, -1);
958 test(S("abcde"), 1, 2, SV("abcde"), 2, 3, -1);
959 test(S("abcde"), 1, 2, SV("abcde"), 2, 4, -1);
960 test(S("abcde"), 1, 2, SV("abcde"), 4, 0, 2);
961 test(S("abcde"), 1, 2, SV("abcde"), 4, 1, -3);
962 SV("abcde"), 4, 2, -3);
963 test(S("abcde"), 1, 2, SV("abcde"), 5, 0, 2);
964 test(S("abcde"), 1, 2, SV("abcde"), 5, 1, 2);
965 test(S("abcde"), 1, 2, SV("abcde"), 6, 0, 0);
966 test(S("abcde"), 1, 2, SV("abcdefghij"), 0, 0, 2);
967 test(S("abcde"), 1, 2, SV("abcdefghij"), 0, 1, 1);
968 test(S("abcde"), 1, 2, SV("abcdefghij"), 0, 5, 1);
969 test(S("abcde"), 1, 2, SV("abcdefghij"), 0, 9, 1);
970 test(S("abcde"), 1, 2, SV("abcdefghij"), 0, 10, 1);
971 test(S("abcde"), 1, 2, SV("abcdefghij"), 0, 11, 1);
972 test(S("abcde"), 1, 2, SV("abcdefghij"), 1, 0, 2);
973 test(S("abcde"), 1, 2, SV("abcdefghij"), 1, 1, 1);
974 test(S("abcde"), 1, 2, SV("abcdefghij"), 1, 4, -2);
975 test(S("abcde"), 1, 2, SV("abcdefghij"), 1, 8, -6);
976 test(S("abcde"), 1, 2, SV("abcdefghij"), 1, 9, -7);
977 test(S("abcde"), 1, 2, SV("abcdefghij"), 1, 10, -7);
978 test(S("abcde"), 1, 2, SV("abcdefghij"), 5, 0, 2);
979 test(S("abcde"), 1, 2, SV("abcdefghij"), 5, 1, -4);
980 test(S("abcde"), 1, 2, SV("abcdefghij"), 5, 2, -4);
981 test(S("abcde"), 1, 2, SV("abcdefghij"), 5, 4, -4);
982 test(S("abcde"), 1, 2, SV("abcdefghij"), 5, 5, -4);
983 test(S("abcde"), 1, 2, SV("abcdefghij"), 5, 6, -4);
984 test(S("abcde"), 1, 2, SV("abcdefghij"), 9, 0, 2);
985 test(S("abcde"), 1, 2, SV("abcdefghij"), 9, 1, -8);
986 test(S("abcde"), 1, 2, SV("abcdefghij"), 9, 2, -8);
987 test(S("abcde"), 1, 2, SV("abcdefghij"), 10, 0, 2);
988 test(S("abcde"), 1, 2, SV("abcdefghij"), 10, 1, 2);
989 test(S("abcde"), 1, 2, SV("abcdefghij"), 11, 0, 0);
990 test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 0, 0, 2);
991 test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 0, 1, 1);
992 test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 0, 10, 1);
993 test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 0, 19, 1);
994 test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 0, 20, 1);
995 test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 0, 21, 1);
996 test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 1, 0, 2);
997 test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 1, 1, 1);
998 test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 1, 9, -7);
999 test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 1, 18, -16);
1000 test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 1, 19, -17);
1001 test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 1, 20, -17);
1002 test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 10, 0, 2);
1003 test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 10, 1, -9);
1004 test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 10, 5, -9);
1005 test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 10, 9, -9);
1006 test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 10, 10, -9);
1007 test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 10, 11, -9);
1008 test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 19, 0, 2);
1009 test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 19, 1, -18);
1010 test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 19, 2, -18);
1011 test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 20, 0, 2);
1012 test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 20, 1, 2);
1013 test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 21, 0, 0);
1014 test(S("abcde"), 1, 3, SV(""), 0, 0, 3);
1015 test(S("abcde"), 1, 3, SV(""), 0, 1, 3);
1016 test(S("abcde"), 1, 3, SV(""), 1, 0, 0);
1017 test(S("abcde"), 1, 3, SV("abcde"), 0, 0, 3);
1018 test(S("abcde"), 1, 3, SV("abcde"), 0, 1, 1);
1019 test(S("abcde"), 1, 3, SV("abcde"), 0, 2, 1);
1020 test(S("abcde"), 1, 3, SV("abcde"), 0, 4, 1);
1021 test(S("abcde"), 1, 3, SV("abcde"), 0, 5, 1);
1022 test(S("abcde"), 1, 3, SV("abcde"), 0, 6, 1);
1023 test(S("abcde"), 1, 3, SV("abcde"), 1, 0, 3);
1024 test(S("abcde"), 1, 3, SV("abcde"), 1, 1, 2);
1025 test(S("abcde"), 1, 3, SV("abcde"), 1, 2, 1);
1028 template <class S, class SV>
1031 test(S("abcde"), 1, 3, SV("abcde"), 1, 3, 0);
1032 test(S("abcde"), 1, 3, SV("abcde"), 1, 4, -1);
1033 test(S("abcde"), 1, 3, SV("abcde"), 1, 5, -1);
1034 test(S("abcde"), 1, 3, SV("abcde"), 2, 0, 3);
1035 test(S("abcde"), 1, 3, SV("abcde"), 2, 1, -1);
1036 test(S("abcde"), 1, 3, SV("abcde"), 2, 2, -1);
1037 test(S("abcde"), 1, 3, SV("abcde"), 2, 3, -1);
1038 test(S("abcde"), 1, 3, SV("abcde"), 2, 4, -1);
1039 test(S("abcde"), 1, 3, SV("abcde"), 4, 0, 3);
1040 test(S("abcde"), 1, 3, SV("abcde"), 4, 1, -3);
1041 test(S("abcde"), 1, 3, SV("abcde"), 4, 2, -3);
1042 test(S("abcde"), 1, 3, SV("abcde"), 5, 0, 3);
1043 test(S("abcde"), 1, 3, SV("abcde"), 5, 1, 3);
1044 test(S("abcde"), 1, 3, SV("abcde"), 6, 0, 0);
1045 test(S("abcde"), 1, 3, SV("abcdefghij"), 0, 0, 3);
1046 test(S("abcde"), 1, 3, SV("abcdefghij"), 0, 1, 1);
1047 test(S("abcde"), 1, 3, SV("abcdefghij"), 0, 5, 1);
1048 test(S("abcde"), 1, 3, SV("abcdefghij"), 0, 9, 1);
1049 test(S("abcde"), 1, 3, SV("abcdefghij"), 0, 10, 1);
1050 test(S("abcde"), 1, 3, SV("abcdefghij"), 0, 11, 1);
1051 test(S("abcde"), 1, 3, SV("abcdefghij"), 1, 0, 3);
1052 test(S("abcde"), 1, 3, SV("abcdefghij"), 1, 1, 2);
1053 test(S("abcde"), 1, 3, SV("abcdefghij"), 1, 4, -1);
1054 test(S("abcde"), 1, 3, SV("abcdefghij"), 1, 8, -5);
1055 test(S("abcde"), 1, 3, SV("abcdefghij"), 1, 9, -6);
1056 test(S("abcde"), 1, 3, SV("abcdefghij"), 1, 10, -6);
1057 test(S("abcde"), 1, 3, SV("abcdefghij"), 5, 0, 3);
1058 test(S("abcde"), 1, 3, SV("abcdefghij"), 5, 1, -4);
1059 test(S("abcde"), 1, 3, SV("abcdefghij"), 5, 2, -4);
1060 test(S("abcde"), 1, 3, SV("abcdefghij"), 5, 4, -4);
1061 test(S("abcde"), 1, 3, SV("abcdefghij"), 5, 5, -4);
1062 test(S("abcde"), 1, 3, SV("abcdefghij"), 5, 6, -4);
1063 test(S("abcde"), 1, 3, SV("abcdefghij"), 9, 0, 3);
1064 test(S("abcde"), 1, 3, SV("abcdefghij"), 9, 1, -8);
1065 test(S("abcde"), 1, 3, SV("abcdefghij"), 9, 2, -8);
1066 test(S("abcde"), 1, 3, SV("abcdefghij"), 10, 0, 3);
1067 test(S("abcde"), 1, 3, SV("abcdefghij"), 10, 1, 3);
1068 test(S("abcde"), 1, 3, SV("abcdefghij"), 11, 0, 0);
1069 test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 0, 0, 3);
1070 test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 0, 1, 1);
1071 test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 0, 10, 1);
1072 test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 0, 19, 1);
1073 test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 0, 20, 1);
1074 test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 0, 21, 1);
1075 test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 1, 0, 3);
1076 test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 1, 1, 2);
1077 test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 1, 9, -6);
1078 test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 1, 18, -15);
1079 test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 1, 19, -16);
1080 test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 1, 20, -16);
1081 test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 10, 0, 3);
1082 test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 10, 1, -9);
1083 test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 10, 5, -9);
1084 test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 10, 9, -9);
1085 test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 10, 10, -9);
1086 test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 10, 11, -9);
1087 test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 19, 0, 3);
1088 test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 19, 1, -18);
1089 test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 19, 2, -18);
1090 test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 20, 0, 3);
1091 test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 20, 1, 3);
1092 test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 21, 0, 0);
1093 test(S("abcde"), 1, 4, SV(""), 0, 0, 4);
1094 test(S("abcde"), 1, 4, SV(""), 0, 1, 4);
1095 test(S("abcde"), 1, 4, SV(""), 1, 0, 0);
1096 test(S("abcde"), 1, 4, SV("abcde"), 0, 0, 4);
1097 test(S("abcde"), 1, 4, SV("abcde"), 0, 1, 1);
1098 test(S("abcde"), 1, 4, SV("abcde"), 0, 2, 1);
1099 test(S("abcde"), 1, 4, SV("abcde"), 0, 4, 1);
1100 test(S("abcde"), 1, 4, SV("abcde"), 0, 5, 1);
1101 test(S("abcde"), 1, 4, SV("abcde"), 0, 6, 1);
1102 test(S("abcde"), 1, 4, SV("abcde"), 1, 0, 4);
1103 test(S("abcde"), 1, 4, SV("abcde"), 1, 1, 3);
1104 test(S("abcde"), 1, 4, SV("abcde"), 1, 2, 2);
1105 test(S("abcde"), 1, 4, SV("abcde"), 1, 3, 1);
1106 test(S("abcde"), 1, 4, SV("abcde"), 1, 4, 0);
1107 test(S("abcde"), 1, 4, SV("abcde"), 1, 5, 0);
1108 test(S("abcde"), 1, 4, SV("abcde"), 2, 0, 4);
1109 test(S("abcde"), 1, 4, SV("abcde"), 2, 1, -1);
1110 test(S("abcde"), 1, 4, SV("abcde"), 2, 2, -1);
1111 test(S("abcde"), 1, 4, SV("abcde"), 2, 3, -1);
1112 test(S("abcde"), 1, 4, SV("abcde"), 2, 4, -1);
1113 test(S("abcde"), 1, 4, SV("abcde"), 4, 0, 4);
1114 test(S("abcde"), 1, 4, SV("abcde"), 4, 1, -3);
1115 test(S("abcde"), 1, 4, SV("abcde"), 4, 2, -3);
1116 test(S("abcde"), 1, 4, SV("abcde"), 5, 0, 4);
1117 test(S("abcde"), 1, 4, SV("abcde"), 5, 1, 4);
1118 test(S("abcde"), 1, 4, SV("abcde"), 6, 0, 0);
1119 test(S("abcde"), 1, 4, SV("abcdefghij"), 0, 0, 4);
1120 test(S("abcde"), 1, 4, SV("abcdefghij"), 0, 1, 1);
1121 test(S("abcde"), 1, 4, SV("abcdefghij"), 0, 5, 1);
1122 test(S("abcde"), 1, 4, SV("abcdefghij"), 0, 9, 1);
1123 test(S("abcde"), 1, 4, SV("abcdefghij"), 0, 10, 1);
1124 test(S("abcde"), 1, 4, SV("abcdefghij"), 0, 11, 1);
1125 test(S("abcde"), 1, 4, SV("abcdefghij"), 1, 0, 4);
1126 test(S("abcde"), 1, 4, SV("abcdefghij"), 1, 1, 3);
1127 test(S("abcde"), 1, 4, SV("abcdefghij"), 1, 4, 0);
1128 test(S("abcde"), 1, 4, SV("abcdefghij"), 1, 8, -4);
1129 test(S("abcde"), 1, 4, SV("abcdefghij"), 1, 9, -5);
1130 test(S("abcde"), 1, 4, SV("abcdefghij"), 1, 10, -5);
1133 template <class S, class SV>
1136 test(S("abcde"), 1, 4, SV("abcdefghij"), 5, 0, 4);
1137 test(S("abcde"), 1, 4, SV("abcdefghij"), 5, 1, -4);
1138 test(S("abcde"), 1, 4, SV("abcdefghij"), 5, 2, -4);
1139 test(S("abcde"), 1, 4, SV("abcdefghij"), 5, 4, -4);
1140 test(S("abcde"), 1, 4, SV("abcdefghij"), 5, 5, -4);
1141 test(S("abcde"), 1, 4, SV("abcdefghij"), 5, 6, -4);
1142 test(S("abcde"), 1, 4, SV("abcdefghij"), 9, 0, 4);
1143 test(S("abcde"), 1, 4, SV("abcdefghij"), 9, 1, -8);
1144 test(S("abcde"), 1, 4, SV("abcdefghij"), 9, 2, -8);
1145 test(S("abcde"), 1, 4, SV("abcdefghij"), 10, 0, 4);
1146 test(S("abcde"), 1, 4, SV("abcdefghij"), 10, 1, 4);
1147 test(S("abcde"), 1, 4, SV("abcdefghij"), 11, 0, 0);
1148 test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 0, 0, 4);
1149 test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 0, 1, 1);
1150 test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 0, 10, 1);
1151 test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 0, 19, 1);
1152 test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 0, 20, 1);
1153 test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 0, 21, 1);
1154 test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 1, 0, 4);
1155 test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 1, 1, 3);
1156 test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 1, 9, -5);
1157 test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 1, 18, -14);
1158 test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 1, 19, -15);
1159 test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 1, 20, -15);
1160 test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 10, 0, 4);
1161 test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 10, 1, -9);
1162 test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 10, 5, -9);
1163 test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 10, 9, -9);
1164 test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 10, 10, -9);
1165 test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 10, 11, -9);
1166 test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 19, 0, 4);
1167 test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 19, 1, -18);
1168 test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 19, 2, -18);
1169 test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 20, 0, 4);
1170 test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 20, 1, 4);
1171 test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 21, 0, 0);
1172 test(S("abcde"), 1, 5, SV(""), 0, 0, 4);
1173 test(S("abcde"), 1, 5, SV(""), 0, 1, 4);
1174 test(S("abcde"), 1, 5, SV(""), 1, 0, 0);
1175 test(S("abcde"), 1, 5, SV("abcde"), 0, 0, 4);
1176 test(S("abcde"), 1, 5, SV("abcde"), 0, 1, 1);
1177 test(S("abcde"), 1, 5, SV("abcde"), 0, 2, 1);
1178 test(S("abcde"), 1, 5, SV("abcde"), 0, 4, 1);
1179 test(S("abcde"), 1, 5, SV("abcde"), 0, 5, 1);
1180 test(S("abcde"), 1, 5, SV("abcde"), 0, 6, 1);
1181 test(S("abcde"), 1, 5, SV("abcde"), 1, 0, 4);
1182 test(S("abcde"), 1, 5, SV("abcde"), 1, 1, 3);
1183 test(S("abcde"), 1, 5, SV("abcde"), 1, 2, 2);
1184 test(S("abcde"), 1, 5, SV("abcde"), 1, 3, 1);
1185 test(S("abcde"), 1, 5, SV("abcde"), 1, 4, 0);
1186 test(S("abcde"), 1, 5, SV("abcde"), 1, 5, 0);
1187 test(S("abcde"), 1, 5, SV("abcde"), 2, 0, 4);
1188 test(S("abcde"), 1, 5, SV("abcde"), 2, 1, -1);
1189 test(S("abcde"), 1, 5, SV("abcde"), 2, 2, -1);
1190 test(S("abcde"), 1, 5, SV("abcde"), 2, 3, -1);
1191 test(S("abcde"), 1, 5, SV("abcde"), 2, 4, -1);
1192 test(S("abcde"), 1, 5, SV("abcde"), 4, 0, 4);
1193 test(S("abcde"), 1, 5, SV("abcde"), 4, 1, -3);
1194 test(S("abcde"), 1, 5, SV("abcde"), 4, 2, -3);
1195 test(S("abcde"), 1, 5, SV("abcde"), 5, 0, 4);
1196 test(S("abcde"), 1, 5, SV("abcde"), 5, 1, 4);
1197 test(S("abcde"), 1, 5, SV("abcde"), 6, 0, 0);
1198 test(S("abcde"), 1, 5, SV("abcdefghij"), 0, 0, 4);
1199 test(S("abcde"), 1, 5, SV("abcdefghij"), 0, 1, 1);
1200 test(S("abcde"), 1, 5, SV("abcdefghij"), 0, 5, 1);
1201 test(S("abcde"), 1, 5, SV("abcdefghij"), 0, 9, 1);
1202 test(S("abcde"), 1, 5, SV("abcdefghij"), 0, 10, 1);
1203 test(S("abcde"), 1, 5, SV("abcdefghij"), 0, 11, 1);
1204 test(S("abcde"), 1, 5, SV("abcdefghij"), 1, 0, 4);
1205 test(S("abcde"), 1, 5, SV("abcdefghij"), 1, 1, 3);
1206 test(S("abcde"), 1, 5, SV("abcdefghij"), 1, 4, 0);
1207 test(S("abcde"), 1, 5, SV("abcdefghij"), 1, 8, -4);
1208 test(S("abcde"), 1, 5, SV("abcdefghij"), 1, 9, -5);
1209 test(S("abcde"), 1, 5, SV("abcdefghij"), 1, 10, -5);
1210 test(S("abcde"), 1, 5, SV("abcdefghij"), 5, 0, 4);
1211 test(S("abcde"), 1, 5, SV("abcdefghij"), 5, 1, -4);
1212 test(S("abcde"), 1, 5, SV("abcdefghij"), 5, 2, -4);
1213 test(S("abcde"), 1, 5, SV("abcdefghij"), 5, 4, -4);
1214 test(S("abcde"), 1, 5, SV("abcdefghij"), 5, 5, -4);
1215 test(S("abcde"), 1, 5, SV("abcdefghij"), 5, 6, -4);
1216 test(S("abcde"), 1, 5, SV("abcdefghij"), 9, 0, 4);
1217 test(S("abcde"), 1, 5, SV("abcdefghij"), 9, 1, -8);
1218 test(S("abcde"), 1, 5, SV("abcdefghij"), 9, 2, -8);
1219 test(S("abcde"), 1, 5, SV("abcdefghij"), 10, 0, 4);
1220 test(S("abcde"), 1, 5, SV("abcdefghij"), 10, 1, 4);
1221 test(S("abcde"), 1, 5, SV("abcdefghij"), 11, 0, 0);
1222 test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 0, 0, 4);
1223 test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 0, 1, 1);
1224 test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 0, 10, 1);
1225 test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 0, 19, 1);
1226 test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 0, 20, 1);
1227 test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 0, 21, 1);
1228 test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 1, 0, 4);
1229 test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 1, 1, 3);
1230 test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 1, 9, -5);
1231 test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 1, 18, -14);
1232 test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 1, 19, -15);
1233 test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 1, 20, -15);
1234 test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 10, 0, 4);
1235 test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 10, 1, -9);
1238 template <class S, class SV>
1241 test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 10, 5, -9);
1242 test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 10, 9, -9);
1243 test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 10, 10, -9);
1244 test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 10, 11, -9);
1245 test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 19, 0, 4);
1246 test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 19, 1, -18);
1247 test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 19, 2, -18);
1248 test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 20, 0, 4);
1249 test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 20, 1, 4);
1250 test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 21, 0, 0);
1251 test(S("abcde"), 2, 0, SV(""), 0, 0, 0);
1252 test(S("abcde"), 2, 0, SV(""), 0, 1, 0);
1253 test(S("abcde"), 2, 0, SV(""), 1, 0, 0);
1254 test(S("abcde"), 2, 0, SV("abcde"), 0, 0, 0);
1255 test(S("abcde"), 2, 0, SV("abcde"), 0, 1, -1);
1256 test(S("abcde"), 2, 0, SV("abcde"), 0, 2, -2);
1257 test(S("abcde"), 2, 0, SV("abcde"), 0, 4, -4);
1258 test(S("abcde"), 2, 0, SV("abcde"), 0, 5, -5);
1259 test(S("abcde"), 2, 0, SV
1260 test(S("abcde"), 2, 0, SV("abcde"), 1, 0, 0);
1261 test(S("abcde"), 2, 0, SV("abcde"), 1, 1, -1);
1262 test(S("abcde"), 2, 0, SV("abcde"), 1, 2, -2);
1263 test(S("abcde"), 2, 0, SV("abcde"), 1, 3, -3);
1264 test(S("abcde"), 2, 0, SV("abcde"), 1, 4, -4);
1265 test(S("abcde"), 2, 0, SV("abcde"), 1, 5, -4);
1266 test(S("abcde"), 2, 0, SV("abcde"), 2, 0, 0);
1267 test(S("abcde"), 2, 0, SV("abcde"), 2, 1, -1);
1268 test(S("abcde"), 2, 0, SV("abcde"), 2, 2, -2);
1269 test(S("abcde"), 2, 0, SV("abcde"), 2, 3, -3);
1270 test(S("abcde"), 2, 0, SV("abcde"), 2, 4, -3);
1271 test(S("abcde"), 2, 0, SV("abcde"), 4, 0, 0);
1272 test(S("abcde"), 2, 0, SV("abcde"), 4, 1, -1);
1273 test(S("abcde"), 2, 0, SV("abcde"), 4, 2, -1);
1274 test(S("abcde"), 2, 0, SV("abcde"), 5, 0, 0);
1275 test(S("abcde"), 2, 0, SV("abcde"), 5, 1, 0);
1276 test(S("abcde"), 2, 0, SV("abcde"), 6, 0, 0);
1277 test(S("abcde"), 2, 0, SV("abcdefghij"), 0, 0, 0);
1278 test(S("abcde"), 2, 0, SV("abcdefghij"), 0, 1, -1);
1279 test(S("abcde"), 2, 0, SV("abcdefghij"), 0, 5, -5);
1280 test(S("abcde"), 2, 0, SV("abcdefghij"), 0, 9, -9);
1281 test(S("abcde"), 2, 0, SV("abcdefghij"), 0, 10, -10);
1282 test(S("abcde"), 2, 0, SV("abcdefghij"), 0, 11, -10);
1283 test(S("abcde"), 2, 0, SV("abcdefghij"), 1, 0, 0);
1284 test(S("abcde"), 2, 0, SV("abcdefghij"), 1, 1, -1);
1285 test(S("abcde"), 2, 0, SV("abcdefghij"), 1, 4, -4);
1286 test(S("abcde"), 2, 0, SV("abcdefghij"), 1, 8, -8);
1287 test(S("abcde"), 2, 0, SV("abcdefghij"), 1, 9, -9);
1288 test(S("abcde"), 2, 0, SV("abcdefghij"), 1, 10, -9);
1289 test(S("abcde"), 2, 0, SV("abcdefghij"), 5, 0, 0);
1290 test(S("abcde"), 2, 0, SV("abcdefghij"), 5, 1, -1);
1291 test(S("abcde"), 2, 0, SV("abcdefghij"), 5, 2, -2);
1292 test(S("abcde"), 2, 0, SV("abcdefghij"), 5, 4, -4);
1293 test(S("abcde"), 2, 0, SV("abcdefghij"), 5, 5, -5);
1294 test(S("abcde"), 2, 0, SV("abcdefghij"), 5, 6, -5);
1295 test(S("abcde"), 2, 0, SV("abcdefghij"), 9, 0, 0);
1296 test(S("abcde"), 2, 0, SV("abcdefghij"), 9, 1, -1);
1297 test(S("abcde"), 2, 0, SV("abcdefghij"), 9, 2, -1);
1298 test(S("abcde"), 2, 0, SV("abcdefghij"), 10, 0, 0);
1299 test(S("abcde"), 2, 0, SV("abcdefghij"), 10, 1, 0);
1300 test(S("abcde"), 2, 0, SV("abcdefghij"), 11, 0, 0);
1301 test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
1302 test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
1303 test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
1304 test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
1305 test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
1306 test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
1307 test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
1308 test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
1309 test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
1310 test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
1311 test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
1312 test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
1313 test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
1314 test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
1315 test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
1316 test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
1317 test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
1318 test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
1319 test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
1320 test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
1321 test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
1322 test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
1323 test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
1324 test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
1325 test(S("abcde"), 2, 1, SV(""), 0, 0, 1);
1326 test(S("abcde"), 2, 1, SV(""), 0, 1, 1);
1327 test(S("abcde"), 2, 1, SV(""), 1, 0, 0);
1328 test(S("abcde"), 2, 1, SV("abcde"), 0, 0, 1);
1329 test(S("abcde"), 2, 1, SV("abcde"), 0, 1, 2);
1330 test(S("abcde"), 2, 1, SV("abcde"), 0, 2, 2);
1331 test(S("abcde"), 2, 1, SV("abcde"), 0, 4, 2);
1332 test(S("abcde"), 2, 1, SV("abcde"), 0, 5, 2);
1333 test(S("abcde"), 2, 1, SV("abcde"), 0, 6, 2);
1334 test(S("abcde"), 2, 1, SV("abcde"), 1, 0, 1);
1335 test(S("abcde"), 2, 1, SV("abcde"), 1, 1, 1);
1336 test(S("abcde"), 2, 1, SV("abcde"), 1, 2, 1);
1337 test(S("abcde"), 2, 1, SV("abcde"), 1, 3, 1);
1338 test(S("abcde"), 2, 1, SV("abcde"), 1, 4, 1);
1339 test(S("abcde"), 2, 1, SV("abcde"), 1, 5, 1);
1340 test(S("abcde"), 2, 1, SV("abcde"), 2, 0, 1);
1343 template <class S, class SV>
1346 test(S("abcde"), 2, 1, SV("abcde"), 2, 1, 0);
1347 test(S("abcde"), 2, 1, SV("abcde"), 2, 2, -1);
1348 test(S("abcde"), 2, 1, SV("abcde"), 2, 3, -2);
1349 test(S("abcde"), 2, 1, SV("abcde"), 2, 4, -2);
1350 test(S("abcde"), 2, 1, SV("abcde"), 4, 0, 1);
1351 test(S("abcde"), 2, 1, SV("abcde"), 4, 1, -2);
1352 test(S("abcde"), 2, 1, SV("abcde"), 4, 2, -2);
1353 test(S("abcde"), 2, 1, SV("abcde"), 5, 0, 1);
1354 test(S("abcde"), 2, 1, SV("abcde"), 5, 1, 1);
1355 test(S("abcde"), 2, 1, SV("abcde"), 6, 0, 0);
1356 test(S("abcde"), 2, 1, SV("abcdefghij"), 0, 0, 1);
1357 test(S("abcde"), 2, 1, SV("abcdefghij"), 0, 1, 2);
1358 test(S("abcde"), 2, 1, SV("abcdefghij"), 0, 5, 2);
1359 test(S("abcde"), 2, 1, SV("abcdefghij"), 0, 9, 2);
1360 test(S("abcde"), 2, 1, SV("abcdefghij"), 0, 10, 2);
1361 test(S("abcde"), 2, 1, SV("abcdefghij"), 0, 11, 2);
1362 test(S("abcde"), 2, 1, SV("abcdefghij"), 1, 0, 1);
1363 test(S("abcde"), 2, 1, SV("abcdefghij"), 1, 1, 1);
1364 test(S("abcde"), 2, 1, SV("abcdefghij"), 1, 4, 1);
1365 test(S("abcde"), 2, 1, SV("abcdefghij"), 1, 8, 1);
1366 test(S("abcde"), 2, 1, SV("abcdefghij"), 1, 9, 1);
1367 test(S("abcde"), 2, 1, SV("abcdefghij"), 1, 10, 1);
1368 test(S("abcde"), 2, 1, SV("abcdefghij"), 5, 0, 1);
1369 test(S("abcde"), 2, 1, SV("abcdefghij"), 5, 1, -3);
1370 test(S("abcde"), 2, 1, SV("abcdefghij"), 5, 2, -3);
1371 test(S("abcde"), 2, 1, SV("abcdefghij"), 5, 4, -3);
1372 test(S("abcde"), 2, 1, SV("abcdefghij"), 5, 5, -3);
1373 test(S("abcde"), 2, 1, SV("abcdefghij"), 5, 6, -3);
1374 test(S("abcde"), 2, 1, SV("abcdefghij"), 9, 0, 1);
1375 test(S("abcde"), 2, 1, SV("abcdefghij"), 9, 1, -7);
1376 test(S("abcde"), 2, 1, SV("abcdefghij"), 9, 2, -7);
1377 test(S("abcde"), 2, 1, SV("abcdefghij"), 10, 0, 1);
1378 test(S("abcde"), 2, 1, SV("abcdefghij"), 10, 1, 1);
1379 test(S("abcde"), 2, 1, SV("abcdefghij"), 11, 0, 0);
1380 test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 0, 0, 1);
1381 test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 0, 1, 2);
1382 test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 0, 10, 2);
1383 test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 0, 19, 2);
1384 test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 0, 20, 2);
1385 test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 0, 21, 2);
1386 test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 1, 0, 1);
1387 test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 1, 1, 1);
1388 test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 1, 9, 1);
1389 test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 1, 18, 1);
1390 test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 1, 19, 1);
1391 test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 1, 20, 1);
1392 test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 10, 0, 1);
1393 test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 10, 1, -8);
1394 test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 10, 5, -8);
1395 test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 10, 9, -8);
1396 test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 10, 10, -8);
1397 test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 10, 11, -8);
1398 test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 19, 0, 1);
1399 test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 19, 1, -17);
1400 test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 19, 2, -17);
1401 test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 20, 0, 1);
1402 test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 20, 1, 1);
1403 test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
1404 test(S("abcde"), 2, 2, SV(""), 0, 0, 2);
1405 test(S("abcde"), 2, 2, SV(""), 0, 1, 2);
1406 test(S("abcde"), 2, 2, SV(""), 1, 0, 0);
1407 test(S("abcde"), 2, 2, SV("abcde"), 0, 0, 2);
1408 test(S("abcde"), 2, 2, SV("abcde"), 0, 1, 2);
1409 test(S("abcde"), 2, 2, SV("abcde"), 0, 2, 2);
1410 test(S("abcde"), 2, 2, SV("abcde"), 0, 4, 2);
1411 test(S("abcde"), 2, 2, SV("abcde"), 0, 5, 2);
1412 test(S("abcde"), 2, 2, SV("abcde"), 0, 6, 2);
1413 test(S("abcde"), 2, 2, SV("abcde"), 1, 0, 2);
1414 test(S("abcde"), 2, 2, SV("abcde"), 1, 1, 1);
1415 test(S("abcde"), 2, 2, SV("abcde"), 1, 2, 1);
1416 test(S("abcde"), 2, 2, SV("abcde"), 1, 3, 1);
1417 test(S("abcde"), 2, 2, SV("abcde"), 1, 4, 1);
1418 test(S("abcde"), 2, 2, SV("abcde"), 1, 5, 1);
1419 test(S("abcde"), 2, 2, SV("abcde"), 2, 0, 2);
1420 test(S("abcde"), 2, 2, SV("abcde"), 2, 1, 1);
1421 test(S("abcde"), 2, 2, SV("abcde"), 2, 2, 0);
1422 test(S("abcde"), 2, 2, SV("abcde"), 2, 3, -1);
1423 test(S("abcde"), 2, 2, SV("abcde"), 2, 4, -1);
1424 test(S("abcde"), 2, 2, SV("abcde"), 4, 0, 2);
1425 test(S("abcde"), 2, 2, SV("abcde"), 4, 1, -2);
1426 test(S("abcde"), 2, 2, SV("abcde"), 4, 2, -2);
1427 test(S("abcde"), 2, 2, SV("abcde"), 5, 0, 2);
1428 test(S("abcde"), 2, 2, SV("abcde"), 5, 1, 2);
1429 test(S("abcde"), 2, 2, SV("abcde"), 6, 0, 0);
1430 test(S("abcde"), 2, 2, SV("abcdefghij"), 0, 0, 2);
1431 test(S("abcde"), 2, 2, SV("abcdefghij"), 0, 1, 2);
1432 test(S("abcde"), 2, 2, SV("abcdefghij"), 0, 5, 2);
1433 test(S("abcde"), 2, 2, SV("abcdefghij"), 0, 9, 2);
1434 test(S("abcde"), 2, 2, SV("abcdefghij"), 0, 10, 2);
1435 test(S("abcde"), 2, 2, SV("abcdefghij"), 0, 11, 2);
1436 test(S("abcde"), 2, 2, SV("abcdefghij"), 1, 0, 2);
1437 test(S("abcde"), 2, 2, SV("abcdefghij"), 1, 1, 1);
1438 test(S("abcde"), 2, 2, SV("abcdefghij"), 1, 4, 1);
1439 test(S("abcde"), 2, 2, SV("abcdefghij"), 1, 8, 1);
1440 test(S("abcde"), 2, 2, SV("abcdefghij"), 1, 9, 1);
1441 test(S("abcde"), 2, 2, SV("abcdefghij"), 1, 10, 1);
1442 test(S("abcde"), 2, 2, SV("abcdefghij"), 5, 0, 2);
1443 test(S("abcde"), 2, 2, SV("abcdefghij"), 5, 1, -3);
1444 test(S("abcde"), 2, 2, SV("abcdefghij"), 5, 2, -3);
1445 test(S("abcde"), 2, 2, SV("abcdefghij"), 5, 4, -3);
1448 template <class S, class SV>
1451 test(S("abcde"), 2, 2, SV("abcdefghij"), 5, 5, -3);
1452 test(S("abcde"), 2, 2, SV("abcdefghij"), 5, 6, -3);
1453 test(S("abcde"), 2, 2, SV("abcdefghij"), 9, 0, 2);
1454 test(S("abcde"), 2, 2, SV("abcdefghij"), 9, 1, -7);
1455 test(S("abcde"), 2, 2, SV("abcdefghij"), 9, 2, -7);
1456 test(S("abcde"), 2, 2, SV("abcdefghij"), 10, 0, 2);
1457 test(S("abcde"), 2, 2, SV("abcdefghij"), 10, 1, 2);
1458 test(S("abcde"), 2, 2, SV("abcdefghij"), 11, 0, 0);
1459 test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 0, 0, 2);
1460 test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 0, 1, 2);
1461 test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 0, 10, 2);
1462 test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 0, 19, 2);
1463 test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 0, 20, 2);
1464 test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 0, 21, 2);
1465 test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 1, 0, 2);
1466 test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 1, 1, 1);
1467 test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 1, 9, 1);
1468 test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 1, 18, 1);
1469 test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 1, 19, 1);
1470 test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 1, 20, 1);
1471 test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 10, 0, 2);
1472 test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 10, 1, -8);
1473 test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 10, 5, -8);
1474 test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 10, 9, -8);
1475 test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 10, 10, -8);
1476 test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 10, 11, -8);
1477 test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 19, 0, 2);
1478 test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 19, 1, -17);
1479 test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 19, 2, -17);
1480 test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 20, 0, 2);
1481 test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 20, 1, 2);
1482 test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 21, 0, 0);
1483 test(S("abcde"), 2, 3, SV(""), 0, 0, 3);
1484 test(S("abcde"), 2, 3, SV(""), 0, 1, 3);
1485 test(S("abcde"), 2, 3, SV(""), 1, 0, 0);
1486 test(S("abcde"), 2, 3, SV("abcde"), 0, 0, 3);
1487 test(S("abcde"), 2, 3, SV("abcde"), 0, 1, 2);
1488 test(S("abcde"), 2, 3, SV("abcde"), 0, 2, 2);
1489 test(S("abcde"), 2, 3, SV("abcde"), 0, 4, 2);
1490 test(S("abcde"), 2, 3, SV("abcde"), 0, 5, 2);
1491 test(S("abcde"), 2, 3, SV("abcde"), 0, 6, 2);
1492 test(S("abcde"), 2, 3, SV("abcde"), 1, 0, 3);
1493 test(S("abcde"), 2, 3, SV("abcde"), 1, 1, 1);
1494 test(S("abcde"), 2, 3, SV("abcde"), 1, 2, 1);
1495 test(S("abcde"), 2, 3, SV("abcde"), 1, 3, 1);
1496 test(S("abcde"), 2, 3, SV("abcde"), 1, 4, 1);
1497 test(S("abcde"), 2, 3, SV("abcde"), 1, 5, 1);
1498 test(S("abcde"), 2, 3, SV("abcde"), 2, 0, 3);
1499 test(S("abcde"), 2, 3, SV("abcde"), 2, 1, 2);
1500 test(S("abcde"), 2, 3, SV("abcde"), 2, 2, 1);
1501 test(S("abcde"), 2, 3, SV("abcde"), 2, 3, 0);
1502 test(S("abcde"), 2, 3, SV("abcde"), 2, 4, 0);
1503 test(S("abcde"), 2, 3, SV("abcde"), 4, 0, 3);
1504 test(S("abcde"), 2, 3, SV("abcde"), 4, 1, -2);
1505 test(S("abcde"), 2, 3, SV("abcde"), 4, 2, -2);
1506 test(S("abcde"), 2, 3, SV("abcde"), 5, 0, 3);
1507 test(S("abcde"), 2, 3, SV("abcde"), 5, 1, 3);
1508 test(S("abcde"), 2, 3, SV("abcde"), 6, 0, 0);
1509 test(S("abcde"), 2, 3, SV("abcdefghij"), 0, 0, 3);
1510 test(S("abcde"), 2, 3, SV("abcdefghij"), 0, 1, 2);
1511 test(S("abcde"), 2, 3, SV("abcdefghij"), 0, 5, 2);
1512 test(S("abcde"), 2, 3, SV("abcdefghij"), 0, 9, 2);
1513 test(S("abcde"), 2, 3, SV("abcdefghij"), 0, 10, 2);
1514 test(S("abcde"), 2, 3, SV("abcdefghij"), 0, 11, 2);
1515 test(S("abcde"), 2, 3, SV("abcdefghij"), 1, 0, 3);
1516 test(S("abcde"), 2, 3, SV("abcdefghij"), 1, 1, 1);
1517 test(S("abcde"), 2, 3, SV("abcdefghij"), 1, 4, 1);
1518 test(S("abcde"), 2, 3, SV("abcdefghij"), 1, 8, 1);
1519 test(S("abcde"), 2, 3, SV("abcdefghij"), 1, 9, 1);
1520 test(S("abcde"), 2, 3, SV("abcdefghij"), 1, 10, 1);
1521 test(S("abcde"), 2, 3, SV("abcdefghij"), 5, 0, 3);
1522 test(S("abcde"), 2, 3, SV("abcdefghij"), 5, 1, -3);
1523 test(S("abcde"), 2, 3, SV("abcdefghij"), 5, 2, -3);
1524 test(S("abcde"), 2, 3, SV("abcdefghij"), 5, 4, -3);
1525 test(S("abcde"), 2, 3, SV("abcdefghij"), 5, 5, -3);
1526 test(S("abcde"), 2, 3, SV("abcdefghij"), 5, 6, -3);
1527 test(S("abcde"), 2, 3, SV("abcdefghij"), 9, 0, 3);
1528 test(S("abcde"), 2, 3, SV("abcdefghij"), 9, 1, -7);
1529 test(S("abcde"), 2, 3, SV("abcdefghij"), 9, 2, -7);
1530 test(S("abcde"), 2, 3, SV("abcdefghij"), 10, 0, 3);
1531 test(S("abcde"), 2, 3, SV("abcdefghij"), 10, 1, 3);
1532 test(S("abcde"), 2, 3, SV("abcdefghij"), 11, 0, 0);
1533 test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 0, 0, 3);
1534 test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 0, 1, 2);
1535 test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 0, 10, 2);
1536 test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 0, 19, 2);
1537 test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 0, 20, 2);
1538 test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 0, 21, 2);
1539 test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 1, 0, 3);
1540 test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 1, 1, 1);
1541 test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 1, 9, 1);
1542 test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 1, 18, 1);
1543 test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 1, 19, 1);
1544 test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 1, 20, 1);
1545 test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 10, 0, 3);
1546 test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 10, 1, -8);
1547 test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 10, 5, -8);
1548 test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 10, 9, -8);
1549 test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 10, 10, -8);
1550 test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 10, 11, -8);
1553 template <class S, class SV>
1556 test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 19, 0, 3);
1557 test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 19, 1, -17);
1558 test(S("abcde"), 2, 3, SV
1559 test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 20, 0, 3);
1560 test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 20, 1, 3);
1561 test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 21, 0, 0);
1562 test(S("abcde"), 2, 4, SV(""), 0, 0, 3);
1563 test(S("abcde"), 2, 4, SV(""), 0, 1, 3);
1564 test(S("abcde"), 2, 4, SV(""), 1, 0, 0);
1565 test(S("abcde"), 2, 4, SV("abcde"), 0, 0, 3);
1566 test(S("abcde"), 2, 4, SV("abcde"), 0, 1, 2);
1567 test(S("abcde"), 2, 4, SV("abcde"), 0, 2, 2);
1568 test(S("abcde"), 2, 4, SV("abcde"), 0, 4, 2);
1569 test(S("abcde"), 2, 4, SV("abcde"), 0, 5, 2);
1570 test(S("abcde"), 2, 4, SV("abcde"), 0, 6, 2);
1571 test(S("abcde"), 2, 4, SV("abcde"), 1, 0, 3);
1572 test(S("abcde"), 2, 4, SV("abcde"), 1, 1, 1);
1573 test(S("abcde"), 2, 4, SV("abcde"), 1, 2, 1);
1574 test(S("abcde"), 2, 4, SV("abcde"), 1, 3, 1);
1575 test(S("abcde"), 2, 4, SV("abcde"), 1, 4, 1);
1576 test(S("abcde"), 2, 4, SV("abcde"), 1, 5, 1);
1577 test(S("abcde"), 2, 4, SV("abcde"), 2, 0, 3);
1578 test(S("abcde"), 2, 4, SV("abcde"), 2, 1, 2);
1579 test(S("abcde"), 2, 4, SV("abcde"), 2, 2, 1);
1580 test(S("abcde"), 2, 4, SV("abcde"), 2, 3, 0);
1581 test(S("abcde"), 2, 4, SV("abcde"), 2, 4, 0);
1582 test(S("abcde"), 2, 4, SV("abcde"), 4, 0, 3);
1583 test(S("abcde"), 2, 4, SV("abcde"), 4, 1, -2);
1584 test(S("abcde"), 2, 4, SV("abcde"), 4, 2, -2);
1585 test(S("abcde"), 2, 4, SV("abcde"), 5, 0, 3);
1586 test(S("abcde"), 2, 4, SV("abcde"), 5, 1, 3);
1587 test(S("abcde"), 2, 4, SV("abcde"), 6, 0, 0);
1588 test(S("abcde"), 2, 4, SV("abcdefghij"), 0, 0, 3);
1589 test(S("abcde"), 2, 4, SV("abcdefghij"), 0, 1, 2);
1590 test(S("abcde"), 2, 4, SV("abcdefghij"), 0, 5, 2);
1591 test(S("abcde"), 2, 4, SV("abcdefghij"), 0, 9, 2);
1592 test(S("abcde"), 2, 4, SV("abcdefghij"), 0, 10, 2);
1593 test(S("abcde"), 2, 4, SV("abcdefghij"), 0, 11, 2);
1594 test(S("abcde"), 2, 4, SV("abcdefghij"), 1, 0, 3);
1595 test(S("abcde"), 2, 4, SV("abcdefghij"), 1, 1, 1);
1596 test(S("abcde"), 2, 4, SV("abcdefghij"), 1, 4, 1);
1597 test(S("abcde"), 2, 4, SV("abcdefghij"), 1, 8, 1);
1598 test(S("abcde"), 2, 4, SV("abcdefghij"), 1, 9, 1);
1599 test(S("abcde"), 2, 4, SV("abcdefghij"), 1, 10, 1);
1600 test(S("abcde"), 2, 4, SV("abcdefghij"), 5, 0, 3);
1601 test(S("abcde"), 2, 4, SV("abcdefghij"), 5, 1, -3);
1602 test(S("abcde"), 2, 4, SV("abcdefghij"), 5, 2, -3);
1603 test(S("abcde"), 2, 4, SV("abcdefghij"), 5, 4, -3);
1604 test(S("abcde"), 2, 4, SV("abcdefghij"), 5, 5, -3);
1605 test(S("abcde"), 2, 4, SV("abcdefghij"), 5, 6, -3);
1606 test(S("abcde"), 2, 4, SV("abcdefghij"), 9, 0, 3);
1607 test(S("abcde"), 2, 4, SV("abcdefghij"), 9, 1, -7);
1608 test(S("abcde"), 2, 4, SV("abcdefghij"), 9, 2, -7);
1609 test(S("abcde"), 2, 4, SV("abcdefghij"), 10, 0, 3);
1610 test(S("abcde"), 2, 4, SV("abcdefghij"), 10, 1, 3);
1611 test(S("abcde"), 2, 4, SV("abcdefghij"), 11, 0, 0);
1612 test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 0, 0, 3);
1613 test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 0, 1, 2);
1614 test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 0, 10, 2);
1615 test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 0, 19, 2);
1616 test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 0, 20, 2);
1617 test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 0, 21, 2);
1618 test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 1, 0, 3);
1619 test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 1, 1, 1);
1620 test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 1, 9, 1);
1621 test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 1, 18, 1);
1622 test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 1, 19, 1);
1623 test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 1, 20, 1);
1624 test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 10, 0, 3);
1625 test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 10, 1, -8);
1626 test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 10, 5, -8);
1627 test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 10, 9, -8);
1628 test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 10, 10, -8);
1629 test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 10, 11, -8);
1630 test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 19, 0, 3);
1631 test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 19, 1, -17);
1632 test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 19, 2, -17);
1633 test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 20, 0, 3);
1634 test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 20, 1, 3);
1635 test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 21, 0, 0);
1636 test(S("abcde"), 4, 0, SV(""), 0, 0, 0);
1637 test(S("abcde"), 4, 0, SV(""), 0, 1, 0);
1638 test(S("abcde"), 4, 0, SV(""), 1, 0, 0);
1639 test(S("abcde"), 4, 0, SV("abcde"), 0, 0, 0);
1640 test(S("abcde"), 4, 0, SV("abcde"), 0, 1, -1);
1641 test(S("abcde"), 4, 0, SV("abcde"), 0, 2, -2);
1642 test(S("abcde"), 4, 0, SV("abcde"), 0, 4, -4);
1643 test(S("abcde"), 4, 0, SV("abcde"), 0, 5, -5);
1644 test(S("abcde"), 4, 0, SV("abcde"), 0, 6, -5);
1645 test(S("abcde"), 4, 0, SV("abcde"), 1, 0, 0);
1646 test(S("abcde"), 4, 0, SV("abcde"), 1, 1, -1);
1647 test(S("abcde"), 4, 0, SV("abcde"), 1, 2, -2);
1648 test(S("abcde"), 4, 0, SV("abcde"), 1, 3, -3);
1649 test(S("abcde"), 4, 0, SV("abcde"), 1, 4, -4);
1650 test(S("abcde"), 4, 0, SV("abcde"), 1, 5, -4);
1651 test(S("abcde"), 4, 0, SV("abcde"), 2, 0, 0);
1652 test(S("abcde"), 4, 0, SV("abcde"), 2, 1, -1);
1653 test(S("abcde"), 4, 0, SV("abcde"), 2, 2, -2);
1654 test(S("abcde"), 4, 0, SV("abcde"), 2, 3, -3);
1655 test(S("abcde"), 4, 0, SV("abcde"), 2, 4, -3);
1658 template <class S, class SV>
1661 test(S("abcde"), 4, 0, SV("abcde"), 4, 0, 0);
1662 test(S("abcde"), 4, 0, SV("abcde"), 4, 1, -1);
1663 test(S("abcde"), 4, 0, SV("abcde"), 4, 2, -1);
1664 test(S("abcde"), 4, 0, SV("abcde"), 5, 0, 0);
1665 test(S("abcde"), 4, 0, SV("abcde"), 5, 1, 0);
1666 test(S("abcde"), 4, 0, SV("abcde"), 6, 0, 0);
1667 test(S("abcde"), 4, 0, SV("abcdefghij"), 0, 0, 0);
1668 test(S("abcde"), 4, 0, SV("abcdefghij"), 0, 1, -1);
1669 test(S("abcde"), 4, 0, SV("abcdefghij"), 0, 5, -5);
1670 test(S("abcde"), 4, 0, SV("abcdefghij"), 0, 9, -9);
1671 test(S("abcde"), 4, 0, SV("abcdefghij"), 0, 10, -10);
1672 test(S("abcde"), 4, 0, SV("abcdefghij"), 0, 11, -10);
1673 test(S("abcde"), 4, 0, SV("abcdefghij"), 1, 0, 0);
1674 test(S("abcde"), 4, 0, SV("abcdefghij"), 1, 1, -1);
1675 test(S("abcde"), 4, 0, SV("abcdefghij"), 1, 4, -4);
1676 test(S("abcde"), 4, 0, SV("abcdefghij"), 1, 8, -8);
1677 test(S("abcde"), 4, 0, SV("abcdefghij"), 1, 9, -9);
1678 test(S("abcde"), 4, 0, SV("abcdefghij"), 1, 10, -9);
1679 test(S("abcde"), 4, 0, SV("abcdefghij"), 5, 0, 0);
1680 test(S("abcde"), 4, 0, SV("abcdefghij"), 5, 1, -1);
1681 test(S("abcde"), 4, 0, SV("abcdefghij"), 5, 2, -2);
1682 test(S("abcde"), 4, 0, SV("abcdefghij"), 5, 4, -4);
1683 test(S("abcde"), 4, 0, SV("abcdefghij"), 5, 5, -5);
1684 test(S("abcde"), 4, 0, SV("abcdefghij"), 5, 6, -5);
1685 test(S("abcde"), 4, 0, SV("abcdefghij"), 9, 0, 0);
1686 test(S("abcde"), 4, 0, SV("abcdefghij"), 9, 1, -1);
1687 test(S("abcde"), 4, 0, SV("abcdefghij"), 9, 2, -1);
1688 test(S("abcde"), 4, 0, SV("abcdefghij"), 10, 0, 0);
1689 test(S("abcde"), 4, 0, SV("abcdefghij"), 10, 1, 0);
1690 test(S("abcde"), 4, 0, SV("abcdefghij"), 11, 0, 0);
1691 test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
1692 test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
1693 test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
1694 test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
1695 test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
1696 test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
1697 test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
1698 test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
1699 test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
1700 test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
1701 test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
1702 test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
1703 test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
1704 test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
1705 test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
1706 test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
1707 test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
1708 test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
1709 test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
1710 test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
1711 test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
1712 test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
1713 test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
1714 test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
1715 test(S("abcde"), 4, 1, SV(""), 0, 0, 1);
1716 test(S("abcde"), 4, 1, SV(""), 0, 1, 1);
1717 test(S("abcde"), 4, 1, SV(""), 1, 0, 0);
1718 test(S("abcde"), 4, 1, SV("abcde"), 0, 0, 1);
1719 test(S("abcde"), 4, 1, SV("abcde"), 0, 1, 4);
1720 test(S("abcde"), 4, 1, SV("abcde"), 0, 2, 4);
1721 test(S("abcde"), 4, 1, SV("abcde"), 0, 4, 4);
1722 test(S("abcde"), 4, 1, SV("abcde"), 0, 5, 4);
1723 test(S("abcde"), 4, 1, SV("abcde"), 0, 6, 4);
1724 test(S("abcde"), 4, 1, SV("abcde"), 1, 0, 1);
1725 test(S("abcde"), 4, 1, SV("abcde"), 1, 1, 3);
1726 test(S("abcde"), 4, 1, SV("abcde"), 1, 2, 3);
1727 test(S("abcde"), 4, 1, SV("abcde"), 1, 3, 3);
1728 test(S("abcde"), 4, 1, SV("abcde"), 1, 4, 3);
1729 test(S("abcde"), 4, 1, SV("abcde"), 1, 5, 3);
1730 test(S("abcde"), 4, 1, SV("abcde"), 2, 0, 1);
1731 test(S("abcde"), 4, 1, SV("abcde"), 2, 1, 2);
1732 test(S("abcde"), 4, 1, SV("abcde"), 2, 2, 2);
1733 test(S("abcde"), 4, 1, SV("abcde"), 2, 3, 2);
1734 test(S("abcde"), 4, 1, SV("abcde"), 2, 4, 2);
1735 test(S("abcde"), 4, 1, SV("abcde"), 4, 0, 1);
1736 test(S("abcde"), 4, 1, SV("abcde"), 4, 1, 0);
1737 test(S("abcde"), 4, 1, SV("abcde"), 4, 2, 0);
1738 test(S("abcde"), 4, 1, SV("abcde"), 5, 0, 1);
1739 test(S("abcde"), 4, 1, SV("abcde"), 5, 1, 1);
1740 test(S("abcde"), 4, 1, SV("abcde"), 6, 0, 0);
1741 test(S("abcde"), 4, 1, SV("abcdefghij"), 0, 0, 1);
1742 test(S("abcde"), 4, 1, SV("abcdefghij"), 0, 1, 4);
1743 test(S("abcde"), 4, 1, SV("abcdefghij"), 0, 5, 4);
1744 test(S("abcde"), 4, 1, SV("abcdefghij"), 0, 9, 4);
1745 test(S("abcde"), 4, 1, SV("abcdefghij"), 0, 10, 4);
1746 test(S("abcde"), 4, 1, SV("abcdefghij"), 0, 11, 4);
1747 test(S("abcde"), 4, 1, SV("abcdefghij"), 1, 0, 1);
1748 test(S("abcde"), 4, 1, SV("abcdefghij"), 1, 1, 3);
1749 test(S("abcde"), 4, 1, SV("abcdefghij"), 1, 4, 3);
1750 test(S("abcde"), 4, 1, SV("abcdefghij"), 1, 8, 3);
1751 test(S("abcde"), 4, 1, SV("abcdefghij"), 1, 9, 3);
1752 test(S("abcde"), 4, 1, SV("abcdefghij"), 1, 10, 3);
1753 test(S("abcde"), 4, 1, SV("abcdefghij"), 5, 0, 1);
1754 test(S("abcde"), 4, 1, SV("abcdefghij"), 5, 1, -1);
1755 test(S("abcde"), 4, 1, SV("abcdefghij"), 5, 2, -1);
1756 test(S("abcde"), 4, 1, SV("abcdefghij"), 5, 4, -1);
1757 test(S("abcde"), 4, 1, SV("abcdefghij"), 5, 5, -1);
1758 test(S("abcde"), 4, 1, SV("abcdefghij"), 5, 6, -1);
1759 test(S("abcde"), 4, 1, SV("abcdefghij"), 9, 0, 1);
1760 test(S("abcde"), 4, 1, SV("abcdefghij"), 9, 1, -5);
1763 template <class S, class SV>
1766 test(S("abcde"), 4, 1, SV("abcdefghij"), 9, 2, -5);
1767 test(S("abcde"), 4, 1, SV("abcdefghij"), 10, 0, 1);
1768 test(S("abcde"), 4, 1, SV("abcdefghij"), 10, 1, 1);
1769 test(S("abcde"), 4, 1, SV("abcdefghij"), 11, 0, 0);
1770 test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 0, 0, 1);
1771 test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 0, 1, 4);
1772 test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 0, 10, 4);
1773 test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 0, 19, 4);
1774 test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 0, 20, 4);
1775 test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 0, 21, 4);
1776 test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 1, 0, 1);
1777 test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 1, 1, 3);
1778 test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 1, 9, 3);
1779 test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 1, 18, 3);
1780 test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 1, 19, 3);
1781 test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 1, 20, 3);
1782 test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 10, 0, 1);
1783 test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 10, 1, -6);
1784 test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 10, 5, -6);
1785 test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 10, 9, -6);
1786 test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 10, 10, -6);
1787 test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 10, 11, -6);
1788 test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 19, 0, 1);
1789 test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 19, 1, -15);
1790 test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 19, 2, -15);
1791 test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 20, 0, 1);
1792 test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 20, 1, 1);
1793 test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
1794 test(S("abcde"), 4, 2, SV(""), 0, 0, 1);
1795 test(S("abcde"), 4, 2, SV(""), 0, 1, 1);
1796 test(S("abcde"), 4, 2, SV(""), 1, 0, 0);
1797 test(S("abcde"), 4, 2, SV("abcde"), 0, 0, 1);
1798 test(S("abcde"), 4, 2, SV("abcde"), 0, 1, 4);
1799 test(S("abcde"), 4, 2, SV("abcde"), 0, 2, 4);
1800 test(S("abcde"), 4, 2, SV("abcde"), 0, 4, 4);
1801 test(S("abcde"), 4, 2, SV("abcde"), 0, 5, 4);
1802 test(S("abcde"), 4, 2, SV("abcde"), 0, 6, 4);
1803 test(S("abcde"), 4, 2, SV("abcde"), 1, 0, 1);
1804 test(S("abcde"), 4, 2, SV("abcde"), 1, 1, 3);
1805 test(S("abcde"), 4, 2, SV("abcde"), 1, 2, 3);
1806 test(S("abcde"), 4, 2, SV("abcde"), 1, 3, 3);
1807 test(S("abcde"), 4, 2, SV("abcde"), 1, 4, 3);
1808 test(S("abcde"), 4, 2, SV("abcde"), 1, 5, 3);
1809 test(S("abcde"), 4, 2, SV("abcde"), 2, 0, 1);
1810 test(S("abcde"), 4, 2, SV("abcde"), 2, 1, 2);
1811 test(S("abcde"), 4, 2, SV("abcde"), 2, 2, 2);
1812 test(S("abcde"), 4, 2, SV("abcde"), 2, 3, 2);
1813 test(S("abcde"), 4, 2, SV("abcde"), 2, 4, 2);
1814 test(S("abcde"), 4, 2, SV("abcde"), 4, 0, 1);
1815 test(S("abcde"), 4, 2, SV("abcde"), 4, 1, 0);
1816 test(S("abcde"), 4, 2, SV("abcde"), 4, 2, 0);
1817 test(S("abcde"), 4, 2, SV("abcde"), 5, 0, 1);
1818 test(S("abcde"), 4, 2, SV("abcde"), 5, 1, 1);
1819 test(S("abcde"), 4, 2, SV("abcde"), 6, 0, 0);
1820 test(S("abcde"), 4, 2, SV("abcdefghij"), 0, 0, 1);
1821 test(S("abcde"), 4, 2, SV("abcdefghij"), 0, 1, 4);
1822 test(S("abcde"), 4, 2, SV("abcdefghij"), 0, 5, 4);
1823 test(S("abcde"), 4, 2, SV("abcdefghij"), 0, 9, 4);
1824 test(S("abcde"), 4, 2, SV("abcdefghij"), 0, 10, 4);
1825 test(S("abcde"), 4, 2, SV("abcdefghij"), 0, 11, 4);
1826 test(S("abcde"), 4, 2, SV("abcdefghij"), 1, 0, 1);
1827 test(S("abcde"), 4, 2, SV("abcdefghij"), 1, 1, 3);
1828 test(S("abcde"), 4, 2, SV("abcdefghij"), 1, 4, 3);
1829 test(S("abcde"), 4, 2, SV("abcdefghij"), 1, 8, 3);
1830 test(S("abcde"), 4, 2, SV("abcdefghij"), 1, 9, 3);
1831 test(S("abcde"), 4, 2, SV("abcdefghij"), 1, 10, 3);
1832 test(S("abcde"), 4, 2, SV("abcdefghij"), 5, 0, 1);
1833 test(S("abcde"), 4, 2, SV("abcdefghij"), 5, 1, -1);
1834 test(S("abcde"), 4, 2, SV("abcdefghij"), 5, 2, -1);
1835 test(S("abcde"), 4, 2, SV("abcdefghij"), 5, 4, -1);
1836 test(S("abcde"), 4, 2, SV("abcdefghij"), 5, 5, -1);
1837 test(S("abcde"), 4, 2, SV("abcdefghij"), 5, 6, -1);
1838 test(S("abcde"), 4, 2, SV("abcdefghij"), 9, 0, 1);
1839 test(S("abcde"), 4, 2, SV("abcdefghij"), 9, 1, -5);
1840 test(S("abcde"), 4, 2, SV("abcdefghij"), 9, 2, -5);
1841 test(S("abcde"), 4, 2, SV("abcdefghij"), 10, 0, 1);
1842 test(S("abcde"), 4, 2, SV("abcdefghij"), 10, 1, 1);
1843 test(S("abcde"), 4, 2, SV("abcdefghij"), 11, 0, 0);
1844 test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 0, 0, 1);
1845 test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 0, 1, 4);
1846 test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 0, 10, 4);
1847 test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 0, 19, 4);
1848 test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 0, 20, 4);
1849 test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 0, 21, 4);
1850 test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 1, 0, 1);
1851 test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 1, 1, 3);
1852 test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 1, 9, 3);
1853 test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 1, 18, 3);
1854 test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 1, 19, 3);
1855 test(S("abcde"), 4, 2, SV
1856 test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 10, 0, 1);
1857 test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 10, 1, -6);
1858 test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 10, 5, -6);
1859 test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 10, 9, -6);
1860 test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 10, 10, -6);
1861 test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 10, 11, -6);
1862 test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 19, 0, 1);
1863 test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 19, 1, -15);
1864 test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 19, 2, -15);
1865 test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 20, 0, 1);
1868 template <class S, class SV>
1871 test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 20, 1, 1);
1872 test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 21, 0, 0);
1873 test(S("abcde"), 5, 0, SV(""), 0, 0, 0);
1874 test(S("abcde"), 5, 0, SV(""), 0, 1, 0);
1875 test(S("abcde"), 5, 0, SV(""), 1, 0, 0);
1876 test(S("abcde"), 5, 0, SV("abcde"), 0, 0, 0);
1877 test(S("abcde"), 5, 0, SV("abcde"), 0, 1, -1);
1878 test(S("abcde"), 5, 0, SV("abcde"), 0, 2, -2);
1879 test(S("abcde"), 5, 0, SV("abcde"), 0, 4, -4);
1880 test(S("abcde"), 5, 0, SV("abcde"), 0, 5, -5);
1881 test(S("abcde"), 5, 0, SV("abcde"), 0, 6, -5);
1882 test(S("abcde"), 5, 0, SV("abcde"), 1, 0, 0);
1883 test(S("abcde"), 5, 0, SV("abcde"), 1, 1, -1);
1884 test(S("abcde"), 5, 0, SV("abcde"), 1, 2, -2);
1885 test(S("abcde"), 5, 0, SV("abcde"), 1, 3, -3);
1886 test(S("abcde"), 5, 0, SV("abcde"), 1, 4, -4);
1887 test(S("abcde"), 5, 0, SV("abcde"), 1, 5, -4);
1888 test(S("abcde"), 5, 0, SV("abcde"), 2, 0, 0);
1889 test(S("abcde"), 5, 0, SV("abcde"), 2, 1, -1);
1890 test(S("abcde"), 5, 0, SV("abcde"), 2, 2, -2);
1891 test(S("abcde"), 5, 0, SV("abcde"), 2, 3, -3);
1892 test(S("abcde"), 5, 0, SV("abcde"), 2, 4, -3);
1893 test(S("abcde"), 5, 0, SV("abcde"), 4, 0, 0);
1894 test(S("abcde"), 5, 0, SV("abcde"), 4, 1, -1);
1895 test(S("abcde"), 5, 0, SV("abcde"), 4, 2, -1);
1896 test(S("abcde"), 5, 0, SV("abcde"), 5, 0, 0);
1897 test(S("abcde"), 5, 0, SV("abcde"), 5, 1, 0);
1898 test(S("abcde"), 5, 0, SV("abcde"), 6, 0, 0);
1899 test(S("abcde"), 5, 0, SV("abcdefghij"), 0, 0, 0);
1900 test(S("abcde"), 5, 0, SV("abcdefghij"), 0, 1, -1);
1901 test(S("abcde"), 5, 0, SV("abcdefghij"), 0, 5, -5);
1902 test(S("abcde"), 5, 0, SV("abcdefghij"), 0, 9, -9);
1903 test(S("abcde"), 5, 0, SV("abcdefghij"), 0, 10, -10);
1904 test(S("abcde"), 5, 0, SV("abcdefghij"), 0, 11, -10);
1905 test(S("abcde"), 5, 0, SV("abcdefghij"), 1, 0, 0);
1906 test(S("abcde"), 5, 0, SV("abcdefghij"), 1, 1, -1);
1907 test(S("abcde"), 5, 0, SV("abcdefghij"), 1, 4, -4);
1908 test(S("abcde"), 5, 0, SV("abcdefghij"), 1, 8, -8);
1909 test(S("abcde"), 5, 0, SV("abcdefghij"), 1, 9, -9);
1910 test(S("abcde"), 5, 0, SV("abcdefghij"), 1, 10, -9);
1911 test(S("abcde"), 5, 0, SV("abcdefghij"), 5, 0, 0);
1912 test(S("abcde"), 5, 0, SV("abcdefghij"), 5, 1, -1);
1913 test(S("abcde"), 5, 0, SV("abcdefghij"), 5, 2, -2);
1914 test(S("abcde"), 5, 0, SV("abcdefghij"), 5, 4, -4);
1915 test(S("abcde"), 5, 0, SV("abcdefghij"), 5, 5, -5);
1916 test(S("abcde"), 5, 0, SV("abcdefghij"), 5, 6, -5);
1917 test(S("abcde"), 5, 0, SV("abcdefghij"), 9, 0, 0);
1918 test(S("abcde"), 5, 0, SV("abcdefghij"), 9, 1, -1);
1919 test(S("abcde"), 5, 0, SV("abcdefghij"), 9, 2, -1);
1920 test(S("abcde"), 5, 0, SV("abcdefghij"), 10, 0, 0);
1921 test(S("abcde"), 5, 0, SV("abcdefghij"), 10, 1, 0);
1922 test(S("abcde"), 5, 0, SV("abcdefghij"), 11, 0, 0);
1923 test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
1924 test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
1925 test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
1926 test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
1927 test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
1928 test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
1929 test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
1930 test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
1931 test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
1932 test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
1933 test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
1934 test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
1935 test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
1936 test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
1937 test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
1938 test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
1939 test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
1940 test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
1941 test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
1942 test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
1943 test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
1944 test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
1945 test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
1946 test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
1947 test(S("abcde"), 5, 1, SV(""), 0, 0, 0);
1948 test(S("abcde"), 5, 1, SV(""), 0, 1, 0);
1949 test(S("abcde"), 5, 1, SV(""), 1, 0, 0);
1950 test(S("abcde"), 5, 1, SV("abcde"), 0, 0, 0);
1951 test(S("abcde"), 5, 1, SV("abcde"), 0, 1, -1);
1952 test(S("abcde"), 5, 1, SV("abcde"), 0, 2, -2);
1953 test(S("abcde"), 5, 1, SV("abcde"), 0, 4, -4);
1954 test(S("abcde"), 5, 1, SV("abcde"), 0, 5, -5);
1955 test(S("abcde"), 5, 1, SV("abcde"), 0, 6, -5);
1956 test(S("abcde"), 5, 1, SV("abcde"), 1, 0, 0);
1957 test(S("abcde"), 5, 1, SV("abcde"), 1, 1, -1);
1958 test(S("abcde"), 5, 1, SV("abcde"), 1, 2, -2);
1959 test(S("abcde"), 5, 1, SV("abcde"), 1, 3, -3);
1960 test(S("abcde"), 5, 1, SV("abcde"), 1, 4, -4);
1961 test(S("abcde"), 5, 1, SV("abcde"), 1, 5, -4);
1962 test(S("abcde"), 5, 1, SV("abcde"), 2, 0, 0);
1963 test(S("abcde"), 5, 1, SV("abcde"), 2, 1, -1);
1964 test(S("abcde"), 5, 1, SV("abcde"), 2, 2, -2);
1965 test(S("abcde"), 5, 1, SV("abcde"), 2, 3, -3);
1966 test(S("abcde"), 5, 1, SV("abcde"), 2, 4, -3);
1967 test(S("abcde"), 5, 1, SV("abcde"), 4, 0, 0);
1968 test(S("abcde"), 5, 1, SV("abcde"), 4, 1, -1);
1969 test(S("abcde"), 5, 1, SV("abcde"), 4, 2, -1);
1970 test(S("abcde"), 5, 1, SV("abcde"), 5, 0, 0);
1973 template <class S, class SV>
1976 test(S("abcde"), 5, 1, SV("abcde"), 5, 1, 0);
1977 test(S("abcde"), 5, 1, SV("abcde"), 6, 0, 0);
1978 test(S("abcde"), 5, 1, SV("abcdefghij"), 0, 0, 0);
1979 test(S("abcde"), 5, 1, SV("abcdefghij"), 0, 1, -1);
1980 test(S("abcde"), 5, 1, SV("abcdefghij"), 0, 5, -5);
1981 test(S("abcde"), 5, 1, SV("abcdefghij"), 0, 9, -9);
1982 test(S("abcde"), 5, 1, SV("abcdefghij"), 0, 10, -10);
1983 test(S("abcde"), 5, 1, SV("abcdefghij"), 0, 11, -10);
1984 test(S("abcde"), 5, 1, SV("abcdefghij"), 1, 0, 0);
1985 test(S("abcde"), 5, 1, SV("abcdefghij"), 1, 1, -1);
1986 test(S("abcde"), 5, 1, SV("abcdefghij"), 1, 4, -4);
1987 test(S("abcde"), 5, 1, SV("abcdefghij"), 1, 8, -8);
1988 test(S("abcde"), 5, 1, SV("abcdefghij"), 1, 9, -9);
1989 test(S("abcde"), 5, 1, SV("abcdefghij"), 1, 10, -9);
1990 test(S("abcde"), 5, 1, SV("abcdefghij"), 5, 0, 0);
1991 test(S("abcde"), 5, 1, SV("abcdefghij"), 5, 1, -1);
1992 test(S("abcde"), 5, 1, SV("abcdefghij"), 5, 2, -2);
1993 test(S("abcde"), 5, 1, SV("abcdefghij"), 5, 4, -4);
1994 test(S("abcde"), 5, 1, SV("abcdefghij"), 5, 5, -5);
1995 test(S("abcde"), 5, 1, SV("abcdefghij"), 5, 6, -5);
1996 test(S("abcde"), 5, 1, SV("abcdefghij"), 9, 0, 0);
1997 test(S("abcde"), 5, 1, SV("abcdefghij"), 9, 1, -1);
1998 test(S("abcde"), 5, 1, SV("abcdefghij"), 9, 2, -1);
1999 test(S("abcde"), 5, 1, SV("abcdefghij"), 10, 0, 0);
2000 test(S("abcde"), 5, 1, SV("abcdefghij"), 10, 1, 0);
2001 test(S("abcde"), 5, 1, SV("abcdefghij"), 11, 0, 0);
2002 test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 0, 0, 0);
2003 test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 0, 1, -1);
2004 test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 0, 10, -10);
2005 test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 0, 19, -19);
2006 test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 0, 20, -20);
2007 test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 0, 21, -20);
2008 test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 1, 0, 0);
2009 test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 1, 1, -1);
2010 test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 1, 9, -9);
2011 test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 1, 18, -18);
2012 test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 1, 19, -19);
2013 test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 1, 20, -19);
2014 test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 10, 0, 0);
2015 test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 10, 1, -1);
2016 test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 10, 5, -5);
2017 test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 10, 9, -9);
2018 test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 10, 10, -10);
2019 test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 10, 11, -10);
2020 test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 19, 0, 0);
2021 test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 19, 1, -1);
2022 test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 19, 2, -1);
2023 test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 20, 0, 0);
2024 test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 20, 1, 0);
2025 test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
2026 test(S("abcde"), 6, 0, SV(""), 0, 0, 0);
2027 test(S("abcde"), 6, 0, SV(""), 0, 1, 0);
2028 test(S("abcde"), 6, 0, SV(""), 1, 0, 0);
2029 test(S("abcde"), 6, 0, SV("abcde"), 0, 0, 0);
2030 test(S("abcde"), 6, 0, SV("abcde"), 0, 1, 0);
2031 test(S("abcde"), 6, 0, SV("abcde"), 0, 2, 0);
2032 test(S("abcde"), 6, 0, SV("abcde"), 0, 4, 0);
2033 test(S("abcde"), 6, 0, SV("abcde"), 0, 5, 0);
2034 test(S("abcde"), 6, 0, SV("abcde"), 0, 6, 0);
2035 test(S("abcde"), 6, 0, SV("abcde"), 1, 0, 0);
2036 test(S("abcde"), 6, 0, SV("abcde"), 1, 1, 0);
2037 test(S("abcde"), 6, 0, SV("abcde"), 1, 2, 0);
2038 test(S("abcde"), 6, 0, SV("abcde"), 1, 3, 0);
2039 test(S("abcde"), 6, 0, SV("abcde"), 1, 4, 0);
2040 test(S("abcde"), 6, 0, SV("abcde"), 1, 5, 0);
2041 test(S("abcde"), 6, 0, SV("abcde"), 2, 0, 0);
2042 test(S("abcde"), 6, 0, SV("abcde"), 2, 1, 0);
2043 test(S("abcde"), 6, 0, SV("abcde"), 2, 2, 0);
2044 test(S("abcde"), 6, 0, SV("abcde"), 2, 3, 0);
2045 test(S("abcde"), 6, 0, SV("abcde"), 2, 4, 0);
2046 test(S("abcde"), 6, 0, SV("abcde"), 4, 0, 0);
2047 test(S("abcde"), 6, 0, SV("abcde"), 4, 1, 0);
2048 test(S("abcde"), 6, 0, SV("abcde"), 4, 2, 0);
2049 test(S("abcde"), 6, 0, SV("abcde"), 5, 0, 0);
2050 test(S("abcde"), 6, 0, SV("abcde"), 5, 1, 0);
2051 test(S("abcde"), 6, 0, SV("abcde"), 6, 0, 0);
2052 test(S("abcde"), 6, 0, SV("abcdefghij"), 0, 0, 0);
2053 test(S("abcde"), 6, 0, SV("abcdefghij"), 0, 1, 0);
2054 test(S("abcde"), 6, 0, SV("abcdefghij"), 0, 5, 0);
2055 test(S("abcde"), 6, 0, SV("abcdefghij"), 0, 9, 0);
2056 test(S("abcde"), 6, 0, SV("abcdefghij"), 0, 10, 0);
2057 test(S("abcde"), 6, 0, SV("abcdefghij"), 0, 11, 0);
2058 test(S("abcde"), 6, 0, SV("abcdefghij"), 1, 0, 0);
2059 test(S("abcde"), 6, 0, SV("abcdefghij"), 1, 1, 0);
2060 test(S("abcde"), 6, 0, SV("abcdefghij"), 1, 4, 0);
2061 test(S("abcde"), 6, 0, SV("abcdefghij"), 1, 8, 0);
2062 test(S("abcde"), 6, 0, SV("abcdefghij"), 1, 9, 0);
2063 test(S("abcde"), 6, 0, SV("abcdefghij"), 1, 10, 0);
2064 test(S("abcde"), 6, 0, SV("abcdefghij"), 5, 0, 0);
2065 test(S("abcde"), 6, 0, SV("abcdefghij"), 5, 1, 0);
2066 test(S("abcde"), 6, 0, SV("abcdefghij"), 5, 2, 0);
2067 test(S("abcde"), 6, 0, SV("abcdefghij"), 5, 4, 0);
2068 test(S("abcde"), 6, 0, SV("abcdefghij"), 5, 5, 0);
2069 test(S("abcde"), 6, 0, SV("abcdefghij"), 5, 6, 0);
2070 test(S("abcde"), 6, 0, SV("abcdefghij"), 9, 0, 0);
2071 test(S("abcde"), 6, 0, SV("abcdefghij"), 9, 1, 0);
2072 test(S("abcde"), 6, 0, SV("abcdefghij"), 9, 2, 0);
2073 test(S("abcde"), 6, 0, SV("abcdefghij"), 10, 0, 0);
2074 test(S("abcde"), 6, 0, SV("abcdefghij"), 10, 1, 0);
2075 test(S("abcde"), 6, 0, SV("abcdefghij"), 11, 0, 0);
2078 template <class S, class SV>
2081 test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
2082 test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 0, 1, 0);
2083 test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 0, 10, 0);
2084 test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 0, 19, 0);
2085 test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 0, 20, 0);
2086 test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 0, 21, 0);
2087 test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
2088 test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 1, 1, 0);
2089 test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 1, 9, 0);
2090 test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 1, 18, 0);
2091 test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 1, 19, 0);
2092 test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 1, 20, 0);
2093 test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
2094 test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 10, 1, 0);
2095 test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 10, 5, 0);
2096 test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 10, 9, 0);
2097 test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 10, 10, 0);
2098 test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 10, 11, 0);
2099 test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
2100 test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 19, 1, 0);
2101 test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 19, 2, 0);
2102 test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
2103 test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
2104 test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
2105 test(S("abcdefghij"), 0, 0, SV(""), 0, 0, 0);
2106 test(S("abcdefghij"), 0, 0, SV(""), 0, 1, 0);
2107 test(S("abcdefghij"), 0, 0, SV(""), 1, 0, 0);
2108 test(S("abcdefghij"), 0, 0, SV("abcde"), 0, 0, 0);
2109 test(S("abcdefghij"), 0, 0, SV("abcde"), 0, 1, -1);
2110 test(S("abcdefghij"), 0, 0, SV("abcde"), 0, 2, -2);
2111 test(S("abcdefghij"), 0, 0, SV("abcde"), 0, 4, -4);
2112 test(S("abcdefghij"), 0, 0, SV("abcde"), 0, 5, -5);
2113 test(S("abcdefghij"), 0, 0, SV("abcde"), 0, 6, -5);
2114 test(S("abcdefghij"), 0, 0, SV("abcde"), 1, 0, 0);
2115 test(S("abcdefghij"), 0, 0, SV("abcde"), 1, 1, -1);
2116 test(S("abcdefghij"), 0, 0, SV("abcde"), 1, 2, -2);
2117 test(S("abcdefghij"), 0, 0, SV("abcde"), 1, 3, -3);
2118 test(S("abcdefghij"), 0, 0, SV("abcde"), 1, 4, -4);
2119 test(S("abcdefghij"), 0, 0, SV("abcde"), 1, 5, -4);
2120 test(S("abcdefghij"), 0, 0, SV("abcde"), 2, 0, 0);
2121 test(S("abcdefghij"), 0, 0, SV("abcde"), 2, 1, -1);
2122 test(S("abcdefghij"), 0, 0, SV("abcde"), 2, 2, -2);
2123 test(S("abcdefghij"), 0, 0, SV("abcde"), 2, 3, -3);
2124 test(S("abcdefghij"), 0, 0, SV("abcde"), 2, 4, -3);
2125 test(S("abcdefghij"), 0, 0, SV("abcde"), 4, 0, 0);
2126 test(S("abcdefghij"), 0, 0, SV("abcde"), 4, 1, -1);
2127 test(S("abcdefghij"), 0, 0, SV("abcde"), 4, 2, -1);
2128 test(S("abcdefghij"), 0, 0, SV("abcde"), 5, 0, 0);
2129 test(S("abcdefghij"), 0, 0, SV("abcde"), 5, 1, 0);
2130 test(S("abcdefghij"), 0, 0, SV("abcde"), 6, 0, 0);
2131 test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 0, 0, 0);
2132 test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 0, 1, -1);
2133 test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 0, 5, -5);
2134 test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 0, 9, -9);
2135 test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 0, 10, -10);
2136 test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 0, 11, -10);
2137 test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 1, 0, 0);
2138 test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 1, 1, -1);
2139 test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 1, 4, -4);
2140 test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 1, 8, -8);
2141 test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 1, 9, -9);
2142 test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 1, 10, -9);
2143 test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 5, 0, 0);
2144 test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 5, 1, -1);
2145 test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 5, 2, -2);
2146 test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 5, 4, -4);
2147 test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 5, 5, -5);
2148 test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 5, 6, -5);
2149 test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 9, 0, 0);
2150 test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 9, 1, -1);
2151 test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 9, 2, -1);
2152 SV("abcdefghij"), 10, 0, 0);
2153 test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 10, 1, 0);
2154 test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 11, 0, 0);
2155 test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
2156 test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
2157 test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
2158 test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
2159 test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
2160 test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
2161 test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
2162 test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
2163 test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
2164 test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
2165 test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
2166 test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
2167 test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
2168 test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
2169 test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
2170 test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
2171 test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
2172 test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
2173 test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
2174 test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
2175 test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
2176 test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
2177 test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
2178 test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
2179 test(S("abcdefghij"), 0, 1, SV(""), 0, 0, 1);
2180 test(S("abcdefghij"), 0, 1, SV(""), 0, 1, 1);
2183 template <class S, class SV>
2186 test(S("abcdefghij"), 0, 1, SV(""), 1, 0, 0);
2187 test(S("abcdefghij"), 0, 1, SV("abcde"), 0, 0, 1);
2188 test(S("abcdefghij"), 0, 1, SV("abcde"), 0, 1, 0);
2189 test(S("abcdefghij"), 0, 1, SV("abcde"), 0, 2, -1);
2190 test(S("abcdefghij"), 0, 1, SV("abcde"), 0, 4, -3);
2191 test(S("abcdefghij"), 0, 1, SV("abcde"), 0, 5, -4);
2192 test(S("abcdefghij"), 0, 1, SV("abcde"), 0, 6, -4);
2193 test(S("abcdefghij"), 0, 1, SV("abcde"), 1, 0, 1);
2194 test(S("abcdefghij"), 0, 1, SV("abcde"), 1, 1, -1);
2195 test(S("abcdefghij"), 0, 1, SV("abcde"), 1, 2, -1);
2196 test(S("abcdefghij"), 0, 1, SV("abcde"), 1, 3, -1);
2197 test(S("abcdefghij"), 0, 1, SV("abcde"), 1, 4, -1);
2198 test(S("abcdefghij"), 0, 1, SV("abcde"), 1, 5, -1);
2199 test(S("abcdefghij"), 0, 1, SV("abcde"), 2, 0, 1);
2200 test(S("abcdefghij"), 0, 1, SV("abcde"), 2, 1, -2);
2201 test(S("abcdefghij"), 0, 1, SV("abcde"), 2, 2, -2);
2202 test(S("abcdefghij"), 0, 1, SV("abcde"), 2, 3, -2);
2203 test(S("abcdefghij"), 0, 1, SV("abcde"), 2, 4, -2);
2204 test(S("abcdefghij"), 0, 1, SV("abcde"), 4, 0, 1);
2205 test(S("abcdefghij"), 0, 1, SV("abcde"), 4, 1, -4);
2206 test(S("abcdefghij"), 0, 1, SV("abcde"), 4, 2, -4);
2207 test(S("abcdefghij"), 0, 1, SV("abcde"), 5, 0, 1);
2208 test(S("abcdefghij"), 0, 1, SV("abcde"), 5, 1, 1);
2209 test(S("abcdefghij"), 0, 1, SV("abcde"), 6, 0, 0);
2210 test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 0, 0, 1);
2211 test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 0, 1, 0);
2212 test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 0, 5, -4);
2213 test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 0, 9, -8);
2214 test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 0, 10, -9);
2215 test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 0, 11, -9);
2216 test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 1, 0, 1);
2217 test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 1, 1, -1);
2218 test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 1, 4, -1);
2219 test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 1, 8, -1);
2220 test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 1, 9, -1);
2221 test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 1, 10, -1);
2222 test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 5, 0, 1);
2223 test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 5, 1, -5);
2224 test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 5, 2, -5);
2225 test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 5, 4, -5);
2226 test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 5, 5, -5);
2227 test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 5, 6, -5);
2228 test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 9, 0, 1);
2229 test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 9, 1, -9);
2230 test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 9, 2, -9);
2231 test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 10, 0, 1);
2232 test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 10, 1, 1);
2233 test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 11, 0, 0);
2234 test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 0, 1);
2235 test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 1, 0);
2236 test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 10, -9);
2237 test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 19, -18);
2238 test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 20, -19);
2239 test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 21, -19);
2240 test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 0, 1);
2241 test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 1, -1);
2242 test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 9, -1);
2243 test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 18, -1);
2244 test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 19, -1);
2245 test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 20, -1);
2246 test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 0, 1);
2247 test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 1, -10);
2248 test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 5, -10);
2249 test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 9, -10);
2250 test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 10, -10);
2251 test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 11, -10);
2252 test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 19, 0, 1);
2253 test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 19, 1, -19);
2254 test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 19, 2, -19);
2255 test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 20, 0, 1);
2256 test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 20, 1, 1);
2257 test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
2258 test(S("abcdefghij"), 0, 5, SV(""), 0, 0, 5);
2259 test(S("abcdefghij"), 0, 5, SV(""), 0, 1, 5);
2260 test(S("abcdefghij"), 0, 5, SV(""), 1, 0, 0);
2261 test(S("abcdefghij"), 0, 5, SV("abcde"), 0, 0, 5);
2262 test(S("abcdefghij"), 0, 5, SV("abcde"), 0, 1, 4);
2263 test(S("abcdefghij"), 0, 5, SV("abcde"), 0, 2, 3);
2264 test(S("abcdefghij"), 0, 5, SV("abcde"), 0, 4, 1);
2265 test(S("abcdefghij"), 0, 5, SV("abcde"), 0, 5, 0);
2266 test(S("abcdefghij"), 0, 5, SV("abcde"), 0, 6, 0);
2267 test(S("abcdefghij"), 0, 5, SV("abcde"), 1, 0, 5);
2268 test(S("abcdefghij"), 0, 5, SV("abcde"), 1, 1, -1);
2269 test(S("abcdefghij"), 0, 5, SV("abcde"), 1, 2, -1);
2270 test(S("abcdefghij"), 0, 5, SV("abcde"), 1, 3, -1);
2271 test(S("abcdefghij"), 0, 5, SV("abcde"), 1, 4, -1);
2272 test(S("abcdefghij"), 0, 5, SV("abcde"), 1, 5, -1);
2273 test(S("abcdefghij"), 0, 5, SV("abcde"), 2, 0, 5);
2274 test(S("abcdefghij"), 0, 5, SV("abcde"), 2, 1, -2);
2275 test(S("abcdefghij"), 0, 5, SV("abcde"), 2, 2, -2);
2276 test(S("abcdefghij"), 0, 5, SV("abcde"), 2, 3, -2);
2277 test(S("abcdefghij"), 0, 5, SV("abcde"), 2, 4, -2);
2278 test(S("abcdefghij"), 0, 5, SV("abcde"), 4, 0, 5);
2279 test(S("abcdefghij"), 0, 5, SV("abcde"), 4, 1, -4);
2280 test(S("abcdefghij"), 0, 5, SV("abcde"), 4, 2, -4);
2281 test(S("abcdefghij"), 0, 5, SV("abcde"), 5, 0, 5);
2282 test(S("abcdefghij"), 0, 5, SV("abcde"), 5, 1, 5);
2283 test(S("abcdefghij"), 0, 5, SV("abcde"), 6, 0, 0);
2284 test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 0, 0, 5);
2285 test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 0, 1, 4);
2288 template <class S, class SV>
2291 test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 0, 5, 0);
2292 test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 0, 9, -4);
2293 test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 0, 10, -5);
2294 test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 0, 11, -5);
2295 test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 1, 0, 5);
2296 test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 1, 1, -1);
2297 test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 1, 4, -1);
2298 test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 1, 8, -1);
2299 test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 1, 9, -1);
2300 test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 1, 10, -1);
2301 test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 5, 0, 5);
2302 test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 5, 1, -5);
2303 test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 5, 2, -5);
2304 test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 5, 4, -5);
2305 test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 5, 5, -5);
2306 test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 5, 6, -5);
2307 test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 9, 0, 5);
2308 test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 9, 1, -9);
2309 test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 9, 2, -9);
2310 test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 10, 0, 5);
2311 test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 10, 1, 5);
2312 test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 11, 0, 0);
2313 test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 0, 0, 5);
2314 test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 0, 1, 4);
2315 test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 0, 10, -5);
2316 test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 0, 19, -14);
2317 test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 0, 20, -15);
2318 test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 0, 21, -15);
2319 test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 1, 0, 5);
2320 test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 1, 1, -1);
2321 test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 1, 9, -1);
2322 test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 1, 18, -1);
2323 test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 1, 19, -1);
2324 test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 1, 20, -1);
2325 test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 10, 0, 5);
2326 test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 10, 1, -10);
2327 test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 10, 5, -10);
2328 test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 10, 9, -10);
2329 test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 10, 10, -10);
2330 test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 10, 11, -10);
2331 test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 19, 0, 5);
2332 test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 19, 1, -19);
2333 test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 19, 2, -19);
2334 test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 20, 0, 5);
2335 test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 20, 1, 5);
2336 test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 21, 0, 0);
2337 test(S("abcdefghij"), 0, 9, SV(""), 0, 0, 9);
2338 test(S("abcdefghij"), 0, 9, SV(""), 0, 1, 9);
2339 test(S("abcdefghij"), 0, 9, SV(""), 1, 0, 0);
2340 test(S("abcdefghij"), 0, 9, SV("abcde"), 0, 0, 9);
2341 test(S("abcdefghij"), 0, 9, SV("abcde"), 0, 1, 8);
2342 test(S("abcdefghij"), 0, 9, SV("abcde"), 0, 2, 7);
2343 test(S("abcdefghij"), 0, 9, SV("abcde"), 0, 4, 5);
2344 test(S("abcdefghij"), 0, 9, SV("abcde"), 0, 5, 4);
2345 test(S("abcdefghij"), 0, 9, SV("abcde"), 0, 6, 4);
2346 test(S("abcdefghij"), 0, 9, SV("abcde"), 1, 0, 9);
2347 test(S("abcdefghij"), 0, 9, SV("abcde"), 1, 1, -1);
2348 test(S("abcdefghij"), 0, 9, SV("abcde"), 1, 2, -1);
2349 test(S("abcdefghij"), 0, 9, SV("abcde"), 1, 3, -1);
2350 test(S("abcdefghij"), 0, 9, SV("abcde"), 1, 4, -1);
2351 test(S("abcdefghij"), 0, 9, SV("abcde"), 1, 5, -1);
2352 test(S("abcdefghij"), 0, 9, SV("abcde"), 2, 0, 9);
2353 test(S("abcdefghij"), 0, 9, SV("abcde"), 2, 1, -2);
2354 test(S("abcdefghij"), 0, 9, SV("abcde"), 2, 2, -2);
2355 test(S("abcdefghij"), 0, 9, SV("abcde"), 2, 3, -2);
2356 test(S("abcdefghij"), 0, 9, SV("abcde"), 2, 4, -2);
2357 test(S("abcdefghij"), 0, 9, SV("abcde"), 4, 0, 9);
2358 test(S("abcdefghij"), 0, 9, SV("abcde"), 4, 1, -4);
2359 test(S("abcdefghij"), 0, 9, SV("abcde"), 4, 2, -4);
2360 test(S("abcdefghij"), 0, 9, SV("abcde"), 5, 0, 9);
2361 test(S("abcdefghij"), 0, 9, SV("abcde"), 5, 1, 9);
2362 test(S("abcdefghij"), 0, 9, SV("abcde"), 6, 0, 0);
2363 test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 0, 0, 9);
2364 test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 0, 1, 8);
2365 test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 0, 5, 4);
2366 test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 0, 9, 0);
2367 test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 0, 10, -1);
2368 test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 0, 11, -1);
2369 test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 1, 0, 9);
2370 test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 1, 1, -1);
2371 test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 1, 4, -1);
2372 test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 1, 8, -1);
2373 test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 1, 9, -1);
2374 test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 1, 10, -1);
2375 test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 5, 0, 9);
2376 test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 5, 1, -5);
2377 test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 5, 2, -5);
2378 test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 5, 4, -5);
2379 test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 5, 5, -5);
2380 test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 5, 6, -5);
2381 test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 9, 0, 9);
2382 test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 9, 1, -9);
2383 test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 9, 2, -9);
2384 test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 10, 0, 9);
2385 test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 10, 1, 9);
2386 test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 11, 0, 0);
2387 test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 0, 0, 9);
2388 test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 0, 1, 8);
2389 test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 0, 10, -1);
2390 test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 0, 19, -10);
2393 template <class S, class SV>
2396 test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 0, 20, -11);
2397 test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 0, 21, -11);
2398 test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 1, 0, 9);
2399 test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 1, 1, -1);
2400 test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 1, 9, -1);
2401 test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 1, 18, -1);
2402 test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 1, 19, -1);
2403 test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 1, 20, -1);
2404 test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 10, 0, 9);
2405 test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 10, 1, -10);
2406 test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 10, 5, -10);
2407 test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 10, 9, -10);
2408 test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 10, 10, -10);
2409 test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 10, 11, -10);
2410 test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 19, 0, 9);
2411 test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 19, 1, -19);
2412 test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 19, 2, -19);
2413 test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 20, 0, 9);
2414 test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 20, 1, 9);
2415 test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 21, 0, 0);
2416 test(S("abcdefghij"), 0, 10, SV(""), 0, 0, 10);
2417 test(S("abcdefghij"), 0, 10, SV(""), 0, 1, 10);
2418 test(S("abcdefghij"), 0, 10, SV(""), 1, 0, 0);
2419 test(S("abcdefghij"), 0, 10, SV("abcde"), 0, 0, 10);
2420 test(S("abcdefghij"), 0, 10, SV("abcde"), 0, 1, 9);
2421 test(S("abcdefghij"), 0, 10, SV("abcde"), 0, 2, 8);
2422 test(S("abcdefghij"), 0, 10, SV("abcde"), 0, 4, 6);
2423 test(S("abcdefghij"), 0, 10, SV("abcde"), 0, 5, 5);
2424 test(S("abcdefghij"), 0, 10, SV("abcde"), 0, 6, 5);
2425 SV("abcde"), 1, 0, 10);
2426 test(S("abcdefghij"), 0, 10, SV("abcde"), 1, 1, -1);
2427 test(S("abcdefghij"), 0, 10, SV("abcde"), 1, 2, -1);
2428 test(S("abcdefghij"), 0, 10, SV("abcde"), 1, 3, -1);
2429 test(S("abcdefghij"), 0, 10, SV("abcde"), 1, 4, -1);
2430 test(S("abcdefghij"), 0, 10, SV("abcde"), 1, 5, -1);
2431 test(S("abcdefghij"), 0, 10, SV("abcde"), 2, 0, 10);
2432 test(S("abcdefghij"), 0, 10, SV("abcde"), 2, 1, -2);
2433 test(S("abcdefghij"), 0, 10, SV("abcde"), 2, 2, -2);
2434 test(S("abcdefghij"), 0, 10, SV("abcde"), 2, 3, -2);
2435 test(S("abcdefghij"), 0, 10, SV("abcde"), 2, 4, -2);
2436 test(S("abcdefghij"), 0, 10, SV("abcde"), 4, 0, 10);
2437 test(S("abcdefghij"), 0, 10, SV("abcde"), 4, 1, -4);
2438 test(S("abcdefghij"), 0, 10, SV("abcde"), 4, 2, -4);
2439 test(S("abcdefghij"), 0, 10, SV("abcde"), 5, 0, 10);
2440 test(S("abcdefghij"), 0, 10, SV("abcde"), 5, 1, 10);
2441 test(S("abcdefghij"), 0, 10, SV("abcde"), 6, 0, 0);
2442 test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 0, 0, 10);
2443 test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 0, 1, 9);
2444 test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 0, 5, 5);
2445 test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 0, 9, 1);
2446 test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 0, 10, 0);
2447 test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 0, 11, 0);
2448 test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 1, 0, 10);
2449 test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 1, 1, -1);
2450 test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 1, 4, -1);
2451 test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 1, 8, -1);
2452 test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 1, 9, -1);
2453 test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 1, 10, -1);
2454 test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 5, 0, 10);
2455 test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 5, 1, -5);
2456 test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 5, 2, -5);
2457 test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 5, 4, -5);
2458 test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 5, 5, -5);
2459 test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 5, 6, -5);
2460 test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 9, 0, 10);
2461 test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 9, 1, -9);
2462 test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 9, 2, -9);
2463 test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 10, 0, 10);
2464 test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 10, 1, 10);
2465 test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 11, 0, 0);
2466 test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 0, 0, 10);
2467 test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 0, 1, 9);
2468 test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 0, 10, 0);
2469 test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 0, 19, -9);
2470 test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 0, 20, -10);
2471 test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 0, 21, -10);
2472 test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 1, 0, 10);
2473 test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 1, 1, -1);
2474 test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 1, 9, -1);
2475 test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 1, 18, -1);
2476 test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 1, 19, -1);
2477 test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 1, 20, -1);
2478 test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 10, 0, 10);
2479 test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 10, 1, -10);
2480 test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 10, 5, -10);
2481 test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 10, 9, -10);
2482 test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 10, 10, -10);
2483 test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 10, 11, -10);
2484 test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 19, 0, 10);
2485 test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 19, 1, -19);
2486 test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 19, 2, -19);
2487 test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 20, 0, 10);
2488 test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 20, 1, 10);
2489 test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 21, 0, 0);
2490 test(S("abcdefghij"), 0, 11, SV(""), 0, 0, 10);
2491 test(S("abcdefghij"), 0, 11, SV(""), 0, 1, 10);
2492 test(S("abcdefghij"), 0, 11, SV(""), 1, 0, 0);
2493 test(S("abcdefghij"), 0, 11, SV("abcde"), 0, 0, 10);
2494 test(S("abcdefghij"), 0, 11, SV("abcde"), 0, 1, 9);
2495 test(S("abcdefghij"), 0, 11, SV("abcde"), 0, 2, 8);
2498 template <class S, class SV>
2501 test(S("abcdefghij"), 0, 11, SV("abcde"), 0, 4, 6);
2502 test(S("abcdefghij"), 0, 11, SV("abcde"), 0, 5, 5);
2503 test(S("abcdefghij"), 0, 11, SV("abcde"), 0, 6, 5);
2504 test(S("abcdefghij"), 0, 11, SV("abcde"), 1, 0, 10);
2505 test(S("abcdefghij"), 0, 11, SV("abcde"), 1, 1, -1);
2506 test(S("abcdefghij"), 0, 11, SV("abcde"), 1, 2, -1);
2507 test(S("abcdefghij"), 0, 11, SV("abcde"), 1, 3, -1);
2508 test(S("abcdefghij"), 0, 11, SV("abcde"), 1, 4, -1);
2509 test(S("abcdefghij"), 0, 11, SV("abcde"), 1, 5, -1);
2510 test(S("abcdefghij"), 0, 11, SV("abcde"), 2, 0, 10);
2511 test(S("abcdefghij"), 0, 11, SV("abcde"), 2, 1, -2);
2512 test(S("abcdefghij"), 0, 11, SV("abcde"), 2, 2, -2);
2513 test(S("abcdefghij"), 0, 11, SV("abcde"), 2, 3, -2);
2514 test(S("abcdefghij"), 0, 11, SV("abcde"), 2, 4, -2);
2515 test(S("abcdefghij"), 0, 11, SV("abcde"), 4, 0, 10);
2516 test(S("abcdefghij"), 0, 11, SV("abcde"), 4, 1, -4);
2517 test(S("abcdefghij"), 0, 11, SV("abcde"), 4, 2, -4);
2518 test(S("abcdefghij"), 0, 11, SV("abcde"), 5, 0, 10);
2519 test(S("abcdefghij"), 0, 11, SV("abcde"), 5, 1, 10);
2520 test(S("abcdefghij"), 0, 11, SV("abcde"), 6, 0, 0);
2521 test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 0, 0, 10);
2522 test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 0, 1, 9);
2523 test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 0, 5, 5);
2524 test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 0, 9, 1);
2525 test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 0, 10, 0);
2526 test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 0, 11, 0);
2527 test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 1, 0, 10);
2528 test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 1, 1, -1);
2529 test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 1, 4, -1);
2530 test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 1, 8, -1);
2531 test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 1, 9, -1);
2532 test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 1, 10, -1);
2533 test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 5, 0, 10);
2534 test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 5, 1, -5);
2535 test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 5, 2, -5);
2536 test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 5, 4, -5);
2537 test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 5, 5, -5);
2538 test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 5, 6, -5);
2539 test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 9, 0, 10);
2540 test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 9, 1, -9);
2541 test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 9, 2, -9);
2542 test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 10, 0, 10);
2543 test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 10, 1, 10);
2544 test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 11, 0, 0);
2545 test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 0, 0, 10);
2546 test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 0, 1, 9);
2547 test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 0, 10, 0);
2548 test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 0, 19, -9);
2549 test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 0, 20, -10);
2550 test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 0, 21, -10);
2551 test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 1, 0, 10);
2552 test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 1, 1, -1);
2553 test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 1, 9, -1);
2554 test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 1, 18, -1);
2555 test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 1, 19, -1);
2556 test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 1, 20, -1);
2557 test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 10, 0, 10);
2558 test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 10, 1, -10);
2559 test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 10, 5, -10);
2560 test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 10, 9, -10);
2561 test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 10, 10, -10);
2562 test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 10, 11, -10);
2563 test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 19, 0, 10);
2564 test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 19, 1, -19);
2565 test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 19, 2, -19);
2566 test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 20, 0, 10);
2567 test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 20, 1, 10);
2568 test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 21, 0, 0);
2569 test(S("abcdefghij"), 1, 0, SV(""), 0, 0, 0);
2570 test(S("abcdefghij"), 1, 0, SV(""), 0, 1, 0);
2571 test(S("abcdefghij"), 1, 0, SV(""), 1, 0, 0);
2572 test(S("abcdefghij"), 1, 0, SV("abcde"), 0, 0, 0);
2573 test(S("abcdefghij"), 1, 0, SV("abcde"), 0, 1, -1);
2574 test(S("abcdefghij"), 1, 0, SV("abcde"), 0, 2, -2);
2575 test(S("abcdefghij"), 1, 0, SV("abcde"), 0, 4, -4);
2576 test(S("abcdefghij"), 1, 0, SV("abcde"), 0, 5, -5);
2577 test(S("abcdefghij"), 1, 0, SV("abcde"), 0, 6, -5);
2578 test(S("abcdefghij"), 1, 0, SV("abcde"), 1, 0, 0);
2579 test(S("abcdefghij"), 1, 0, SV("abcde"), 1, 1, -1);
2580 test(S("abcdefghij"), 1, 0, SV("abcde"), 1, 2, -2);
2581 test(S("abcdefghij"), 1, 0, SV("abcde"), 1, 3, -3);
2582 test(S("abcdefghij"), 1, 0, SV("abcde"), 1, 4, -4);
2583 test(S("abcdefghij"), 1, 0, SV("abcde"), 1, 5, -4);
2584 test(S("abcdefghij"), 1, 0, SV("abcde"), 2, 0, 0);
2585 test(S("abcdefghij"), 1, 0, SV("abcde"), 2, 1, -1);
2586 test(S("abcdefghij"), 1, 0, SV("abcde"), 2, 2, -2);
2587 test(S("abcdefghij"), 1, 0, SV("abcde"), 2, 3, -3);
2588 test(S("abcdefghij"), 1, 0, SV("abcde"), 2, 4, -3);
2589 test(S("abcdefghij"), 1, 0, SV("abcde"), 4, 0, 0);
2590 test(S("abcdefghij"), 1, 0, SV("abcde"), 4, 1, -1);
2591 test(S("abcdefghij"), 1, 0, SV("abcde"), 4, 2, -1);
2592 test(S("abcdefghij"), 1, 0, SV("abcde"), 5, 0, 0);
2593 test(S("abcdefghij"), 1, 0, SV("abcde"), 5, 1, 0);
2594 test(S("abcdefghij"), 1, 0, SV("abcde"), 6, 0, 0);
2595 test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 0, 0, 0);
2596 test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 0, 1, -1);
2597 test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 0, 5, -5);
2598 test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 0, 9, -9);
2599 test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 0, 10, -10);
2600 test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 0, 11, -10);
2603 template <class S, class SV>
2606 test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 1, 0, 0);
2607 test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 1, 1, -1);
2608 test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 1, 4, -4);
2609 test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 1, 8, -8);
2610 test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 1, 9, -9);
2611 test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 1, 10, -9);
2612 test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 5, 0, 0);
2613 test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 5, 1, -1);
2614 test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 5, 2, -2);
2615 test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 5, 4, -4);
2616 test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 5, 5, -5);
2617 test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 5, 6, -5);
2618 test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 9, 0, 0);
2619 test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 9, 1, -1);
2620 test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 9, 2, -1);
2621 test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 10, 0, 0);
2622 test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 10, 1, 0);
2623 test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 11, 0, 0);
2624 test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
2625 test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
2626 test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
2627 test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
2628 test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
2629 test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
2630 test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
2631 test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
2632 test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
2633 test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
2634 test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
2635 test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
2636 test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
2637 test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
2638 test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
2639 test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
2640 test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
2641 test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
2642 test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
2643 test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
2644 test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
2645 test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
2646 test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
2647 test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
2648 test(S("abcdefghij"), 1, 1, SV(""), 0, 0, 1);
2649 test(S("abcdefghij"), 1, 1, SV(""), 0, 1, 1);
2650 test(S("abcdefghij"), 1, 1, SV(""), 1, 0, 0);
2651 test(S("abcdefghij"), 1, 1, SV("abcde"), 0, 0, 1);
2652 test(S("abcdefghij"), 1, 1, SV("abcde"), 0, 1, 1);
2653 test(S("abcdefghij"), 1, 1, SV("abcde"), 0, 2, 1);
2654 test(S("abcdefghij"), 1, 1, SV("abcde"), 0, 4, 1);
2655 test(S("abcdefghij"), 1, 1, SV("abcde"), 0, 5, 1);
2656 test(S("abcdefghij"), 1, 1, SV("abcde"), 0, 6, 1);
2657 test(S("abcdefghij"), 1, 1, SV("abcde"), 1, 0, 1);
2658 test(S("abcdefghij"), 1, 1, SV("abcde"), 1, 1, 0);
2659 test(S("abcdefghij"), 1, 1, SV("abcde"), 1, 2, -1);
2660 test(S("abcdefghij"), 1, 1, SV("abcde"), 1, 3, -2);
2661 test(S("abcdefghij"), 1, 1, SV("abcde"), 1, 4, -3);
2662 test(S("abcdefghij"), 1, 1, SV("abcde"), 1, 5, -3);
2663 test(S("abcdefghij"), 1, 1, SV("abcde"), 2, 0, 1);
2664 test(S("abcdefghij"), 1, 1, SV("abcde"), 2, 1, -1);
2665 test(S("abcdefghij"), 1, 1, SV("abcde"), 2, 2, -1);
2666 test(S("abcdefghij"), 1, 1, SV("abcde"), 2, 3, -1);
2667 test(S("abcdefghij"), 1, 1, SV("abcde"), 2, 4, -1);
2668 test(S("abcdefghij"), 1, 1, SV("abcde"), 4, 0, 1);
2669 test(S("abcdefghij"), 1, 1, SV("abcde"), 4, 1, -3);
2670 test(S("abcdefghij"), 1, 1, SV("abcde"), 4, 2, -3);
2671 test(S("abcdefghij"), 1, 1, SV("abcde"), 5, 0, 1);
2672 test(S("abcdefghij"), 1, 1, SV("abcde"), 5, 1, 1);
2673 test(S("abcdefghij"), 1, 1, SV("abcde"), 6, 0, 0);
2674 test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 0, 0, 1);
2675 test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 0, 1, 1);
2676 test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 0, 5, 1);
2677 test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 0, 9, 1);
2678 test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 0, 10, 1);
2679 test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 0, 11, 1);
2680 test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 1, 0, 1);
2681 test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 1, 1, 0);
2682 test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 1, 4, -3);
2683 test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 1, 8, -7);
2684 test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 1, 9, -8);
2685 test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 1, 10, -8);
2686 test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 5, 0, 1);
2687 test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 5, 1, -4);
2688 test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 5, 2, -4);
2689 test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 5, 4, -4);
2690 test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 5, 5, -4);
2691 test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 5, 6, -4);
2692 test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 9, 0, 1);
2693 test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 9, 1, -8);
2694 test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 9, 2, -8);
2695 test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 10, 0, 1);
2696 SV("abcdefghij"), 10, 1, 1);
2697 test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 11, 0, 0);
2698 test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 0, 1);
2699 test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 1, 1);
2700 test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 10, 1);
2701 test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 19, 1);
2702 test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 20, 1);
2703 test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 21, 1);
2704 test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 0, 1);
2705 test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 1, 0);
2708 template <class S, class SV>
2711 test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 9, -8);
2712 test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 18, -17);
2713 test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 19, -18);
2714 test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 20, -18);
2715 test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 0, 1);
2716 test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 1, -9);
2717 test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 5, -9);
2718 test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 9, -9);
2719 test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 10, -9);
2720 test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 11, -9);
2721 test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 19, 0, 1);
2722 test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 19, 1, -18);
2723 test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 19, 2, -18);
2724 test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 20, 0, 1);
2725 test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 20, 1, 1);
2726 test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
2727 test(S("abcdefghij"), 1, 4, SV(""), 0, 0, 4);
2728 test(S("abcdefghij"), 1, 4, SV(""), 0, 1, 4);
2729 test(S("abcdefghij"), 1, 4, SV(""), 1, 0, 0);
2730 test(S("abcdefghij"), 1, 4, SV("abcde"), 0, 0, 4);
2731 test(S("abcdefghij"), 1, 4, SV("abcde"), 0, 1, 1);
2732 test(S("abcdefghij"), 1, 4, SV("abcde"), 0, 2, 1);
2733 test(S("abcdefghij"), 1, 4, SV("abcde"), 0, 4, 1);
2734 test(S("abcdefghij"), 1, 4, SV("abcde"), 0, 5, 1);
2735 test(S("abcdefghij"), 1, 4, SV("abcde"), 0, 6, 1);
2736 test(S("abcdefghij"), 1, 4, SV("abcde"), 1, 0, 4);
2737 test(S("abcdefghij"), 1, 4, SV("abcde"), 1, 1, 3);
2738 test(S("abcdefghij"), 1, 4, SV("abcde"), 1, 2, 2);
2739 test(S("abcdefghij"), 1, 4, SV("abcde"), 1, 3, 1);
2740 test(S("abcdefghij"), 1, 4, SV("abcde"), 1, 4, 0);
2741 test(S("abcdefghij"), 1, 4, SV("abcde"), 1, 5, 0);
2742 test(S("abcdefghij"), 1, 4, SV("abcde"), 2, 0, 4);
2743 test(S("abcdefghij"), 1, 4, SV("abcde"), 2, 1, -1);
2744 test(S("abcdefghij"), 1, 4, SV("abcde"), 2, 2, -1);
2745 test(S("abcdefghij"), 1, 4, SV("abcde"), 2, 3, -1);
2746 test(S("abcdefghij"), 1, 4, SV("abcde"), 2, 4, -1);
2747 test(S("abcdefghij"), 1, 4, SV("abcde"), 4, 0, 4);
2748 test(S("abcdefghij"), 1, 4, SV("abcde"), 4, 1, -3);
2749 test(S("abcdefghij"), 1, 4, SV("abcde"), 4, 2, -3);
2750 test(S("abcdefghij"), 1, 4, SV("abcde"), 5, 0, 4);
2751 test(S("abcdefghij"), 1, 4, SV("abcde"), 5, 1, 4);
2752 test(S("abcdefghij"), 1, 4, SV("abcde"), 6, 0, 0);
2753 test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 0, 0, 4);
2754 test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 0, 1, 1);
2755 test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 0, 5, 1);
2756 test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 0, 9, 1);
2757 test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 0, 10, 1);
2758 test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 0, 11, 1);
2759 test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 1, 0, 4);
2760 test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 1, 1, 3);
2761 test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 1, 4, 0);
2762 test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 1, 8, -4);
2763 test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 1, 9, -5);
2764 test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 1, 10, -5);
2765 test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 5, 0, 4);
2766 test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 5, 1, -4);
2767 test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 5, 2, -4);
2768 test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 5, 4, -4);
2769 test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 5, 5, -4);
2770 test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 5, 6, -4);
2771 test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 9, 0, 4);
2772 test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 9, 1, -8);
2773 test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 9, 2, -8);
2774 test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 10, 0, 4);
2775 test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 10, 1, 4);
2776 test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 11, 0, 0);
2777 test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 0, 0, 4);
2778 test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 0, 1, 1);
2779 test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 0, 10, 1);
2780 test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 0, 19, 1);
2781 test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 0, 20, 1);
2782 test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 0, 21, 1);
2783 test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 1, 0, 4);
2784 test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 1, 1, 3);
2785 test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 1, 9, -5);
2786 test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 1, 18, -14);
2787 test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 1, 19, -15);
2788 test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 1, 20, -15);
2789 test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 10, 0, 4);
2790 test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 10, 1, -9);
2791 test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 10, 5, -9);
2792 test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 10, 9, -9);
2793 test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 10, 10, -9);
2794 test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 10, 11, -9);
2795 test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 19, 0, 4);
2796 test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 19, 1, -18);
2797 test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 19, 2, -18);
2798 test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 20, 0, 4);
2799 test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 20, 1, 4);
2800 test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 21, 0, 0);
2801 test(S("abcdefghij"), 1, 8, SV(""), 0, 0, 8);
2802 test(S("abcdefghij"), 1, 8, SV(""), 0, 1, 8);
2803 test(S("abcdefghij"), 1, 8, SV(""), 1, 0, 0);
2804 test(S("abcdefghij"), 1, 8, SV("abcde"), 0, 0, 8);
2805 test(S("abcdefghij"), 1, 8, SV("abcde"), 0, 1, 1);
2806 test(S("abcdefghij"), 1, 8, SV("abcde"), 0, 2, 1);
2807 test(S("abcdefghij"), 1, 8, SV("abcde"), 0, 4, 1);
2808 test(S("abcdefghij"), 1, 8, SV("abcde"), 0, 5, 1);
2809 test(S("abcdefghij"), 1, 8, SV("abcde"), 0, 6, 1);
2810 test(S("abcdefghij"), 1, 8, SV("abcde"), 1, 0, 8);
2813 template <class S, class SV>
2816 test(S("abcdefghij"), 1, 8, SV("abcde"), 1, 1, 7);
2817 test(S("abcdefghij"), 1, 8, SV("abcde"), 1, 2, 6);
2818 test(S("abcdefghij"), 1, 8, SV("abcde"), 1, 3, 5);
2819 test(S("abcdefghij"), 1, 8, SV("abcde"), 1, 4, 4);
2820 test(S("abcdefghij"), 1, 8, SV("abcde"), 1, 5, 4);
2821 test(S("abcdefghij"), 1, 8, SV("abcde"), 2, 0, 8);
2822 test(S("abcdefghij"), 1, 8, SV("abcde"), 2, 1, -1);
2823 test(S("abcdefghij"), 1, 8, SV("abcde"), 2, 2, -1);
2824 test(S("abcdefghij"), 1, 8, SV("abcde"), 2, 3, -1);
2825 test(S("abcdefghij"), 1, 8, SV("abcde"), 2, 4, -1);
2826 test(S("abcdefghij"), 1, 8, SV("abcde"), 4, 0, 8);
2827 test(S("abcdefghij"), 1, 8, SV("abcde"), 4, 1, -3);
2828 test(S("abcdefghij"), 1, 8, SV("abcde"), 4, 2, -3);
2829 test(S("abcdefghij"), 1, 8, SV("abcde"), 5, 0, 8);
2830 test(S("abcdefghij"), 1, 8, SV("abcde"), 5, 1, 8);
2831 test(S("abcdefghij"), 1, 8, SV("abcde"), 6, 0, 0);
2832 test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 0, 0, 8);
2833 test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 0, 1, 1);
2834 test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 0, 5, 1);
2835 test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 0, 9, 1);
2836 test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 0, 10, 1);
2837 test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 0, 11, 1);
2838 test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 1, 0, 8);
2839 test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 1, 1, 7);
2840 test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 1, 4, 4);
2841 test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 1, 8, 0);
2842 test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 1, 9, -1);
2843 test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 1, 10, -1);
2844 test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 5, 0, 8);
2845 test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 5, 1, -4);
2846 test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 5, 2, -4);
2847 test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 5, 4, -4);
2848 test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 5, 5, -4);
2849 test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 5, 6, -4);
2850 test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 9, 0, 8);
2851 test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 9, 1, -8);
2852 test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 9, 2, -8);
2853 test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 10, 0, 8);
2854 test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 10, 1, 8);
2855 test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 11, 0, 0);
2856 test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 0, 0, 8);
2857 test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 0, 1, 1);
2858 test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 0, 10, 1);
2859 test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 0, 19, 1);
2860 test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 0, 20, 1);
2861 test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 0, 21, 1);
2862 test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 1, 0, 8);
2863 test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 1, 1, 7);
2864 test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 1, 9, -1);
2865 test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 1, 18, -10);
2866 test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 1, 19, -11);
2867 test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 1, 20, -11);
2868 test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 10, 0, 8);
2869 test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 10, 1, -9);
2870 test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 10, 5, -9);
2871 test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 10, 9, -9);
2872 test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 10, 10, -9);
2873 test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 10, 11, -9);
2874 test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 19, 0, 8);
2875 test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 19, 1, -18);
2876 test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 19, 2, -18);
2877 test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 20, 0, 8);
2878 test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 20, 1, 8);
2879 test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 21, 0, 0);
2880 test(S("abcdefghij"), 1, 9, SV(""), 0, 0, 9);
2881 test(S("abcdefghij"), 1, 9, SV(""), 0, 1, 9);
2882 test(S("abcdefghij"), 1, 9, SV(""), 1, 0, 0);
2883 test(S("abcdefghij"), 1, 9, SV("abcde"), 0, 0, 9);
2884 test(S("abcdefghij"), 1, 9, SV("abcde"), 0, 1, 1);
2885 test(S("abcdefghij"), 1, 9, SV("abcde"), 0, 2, 1);
2886 test(S("abcdefghij"), 1, 9, SV("abcde"), 0, 4, 1);
2887 test(S("abcdefghij"), 1, 9, SV("abcde"), 0, 5, 1);
2888 test(S("abcdefghij"), 1, 9, SV("abcde"), 0, 6, 1);
2889 test(S("abcdefghij"), 1, 9, SV("abcde"), 1, 0, 9);
2890 test(S("abcdefghij"), 1, 9, SV("abcde"), 1, 1, 8);
2891 test(S("abcdefghij"), 1, 9, SV("abcde"), 1, 2, 7);
2892 test(S("abcdefghij"), 1, 9, SV("abcde"), 1, 3, 6);
2893 test(S("abcdefghij"), 1, 9, SV("abcde"), 1, 4, 5);
2894 test(S("abcdefghij"), 1, 9, SV("abcde"), 1, 5, 5);
2895 test(S("abcdefghij"), 1, 9, SV("abcde"), 2, 0, 9);
2896 test(S("abcdefghij"), 1, 9, SV("abcde"), 2, 1, -1);
2897 test(S("abcdefghij"), 1, 9, SV("abcde"), 2, 2, -1);
2898 test(S("abcdefghij"), 1, 9, SV("abcde"), 2, 3, -1);
2899 test(S("abcdefghij"), 1, 9, SV("abcde"), 2, 4, -1);
2900 test(S("abcdefghij"), 1, 9, SV("abcde"), 4, 0, 9);
2901 test(S("abcdefghij"), 1, 9, SV("abcde"), 4, 1, -3);
2902 test(S("abcdefghij"), 1, 9, SV("abcde"), 4, 2, -3);
2903 test(S("abcdefghij"), 1, 9, SV("abcde"), 5, 0, 9);
2904 test(S("abcdefghij"), 1, 9, SV("abcde"), 5, 1, 9);
2905 test(S("abcdefghij"), 1, 9, SV("abcde"), 6, 0, 0);
2906 test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 0, 0, 9);
2907 test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 0, 1, 1);
2908 test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 0, 5, 1);
2909 test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 0, 9, 1);
2910 test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 0, 10, 1);
2911 test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 0, 11, 1);
2912 test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 1, 0, 9);
2913 test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 1, 1, 8);
2914 test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 1, 4, 5);
2915 test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 1, 8, 1);
2918 template <class S, class SV>
2921 test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 1, 9, 0);
2922 test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 1, 10, 0);
2923 test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 5, 0, 9);
2924 test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 5, 1, -4);
2925 test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 5, 2, -4);
2926 test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 5, 4, -4);
2927 test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 5, 5, -4);
2928 test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 5, 6, -4);
2929 test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 9, 0, 9);
2930 test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 9, 1, -8);
2931 test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 9, 2, -8);
2932 test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 10, 0, 9);
2933 test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 10, 1, 9);
2934 test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 11, 0, 0);
2935 test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 0, 0, 9);
2936 test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 0, 1, 1);
2937 test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 0, 10, 1);
2938 test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 0, 19, 1);
2939 test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 0, 20, 1);
2940 test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 0, 21, 1);
2941 test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 1, 0, 9);
2942 test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 1, 1, 8);
2943 test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 1, 9, 0);
2944 test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 1, 18, -9);
2945 test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 1, 19, -10);
2946 test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 1, 20, -10);
2947 test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 10, 0, 9);
2948 test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 10, 1, -9);
2949 test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 10, 5, -9);
2950 test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 10, 9, -9);
2951 test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 10, 10, -9);
2952 test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 10, 11, -9);
2953 test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 19, 0, 9);
2954 test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 19, 1, -18);
2955 test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 19, 2, -18);
2956 test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 20, 0, 9);
2957 test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 20, 1, 9);
2958 test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 21, 0, 0);
2959 test(S("abcdefghij"), 1, 10, SV(""), 0, 0, 9);
2960 test(S("abcdefghij"), 1, 10, SV(""), 0, 1, 9);
2961 test(S("abcdefghij"), 1, 10, SV(""), 1, 0, 0);
2962 test(S("abcdefghij"), 1, 10, SV("abcde"), 0, 0, 9);
2963 test(S("abcdefghij"), 1, 10, SV("abcde"), 0, 1, 1);
2964 test(S("abcdefghij"), 1, 10, SV("abcde"), 0, 2, 1);
2965 test(S("abcdefghij"), 1, 10, SV("abcde"), 0, 4, 1);
2966 test(S("abcdefghij"), 1, 10, SV("abcde"), 0, 5, 1);
2967 test(S("abcdefghij"), 1, 10, SV("abcde"), 0, 6, 1);
2968 test(S("abcdefghij"), 1, 10, SV("abcde"), 1, 0, 9);
2969 test(S("abcdefghij"), 1, 10, SV("abcde"), 1, 1, 8);
2970 SV("abcde"), 1, 2, 7);
2971 test(S("abcdefghij"), 1, 10, SV("abcde"), 1, 3, 6);
2972 test(S("abcdefghij"), 1, 10, SV("abcde"), 1, 4, 5);
2973 test(S("abcdefghij"), 1, 10, SV("abcde"), 1, 5, 5);
2974 test(S("abcdefghij"), 1, 10, SV("abcde"), 2, 0, 9);
2975 test(S("abcdefghij"), 1, 10, SV("abcde"), 2, 1, -1);
2976 test(S("abcdefghij"), 1, 10, SV("abcde"), 2, 2, -1);
2977 test(S("abcdefghij"), 1, 10, SV("abcde"), 2, 3, -1);
2978 test(S("abcdefghij"), 1, 10, SV("abcde"), 2, 4, -1);
2979 test(S("abcdefghij"), 1, 10, SV("abcde"), 4, 0, 9);
2980 test(S("abcdefghij"), 1, 10, SV("abcde"), 4, 1, -3);
2981 test(S("abcdefghij"), 1, 10, SV("abcde"), 4, 2, -3);
2982 test(S("abcdefghij"), 1, 10, SV("abcde"), 5, 0, 9);
2983 test(S("abcdefghij"), 1, 10, SV("abcde"), 5, 1, 9);
2984 test(S("abcdefghij"), 1, 10, SV("abcde"), 6, 0, 0);
2985 test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 0, 0, 9);
2986 test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 0, 1, 1);
2987 test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 0, 5, 1);
2988 test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 0, 9, 1);
2989 test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 0, 10, 1);
2990 test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 0, 11, 1);
2991 test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 1, 0, 9);
2992 test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 1, 1, 8);
2993 test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 1, 4, 5);
2994 test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 1, 8, 1);
2995 test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 1, 9, 0);
2996 test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 1, 10, 0);
2997 test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 5, 0, 9);
2998 test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 5, 1, -4);
2999 test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 5, 2, -4);
3000 test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 5, 4, -4);
3001 test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 5, 5, -4);
3002 test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 5, 6, -4);
3003 test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 9, 0, 9);
3004 test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 9, 1, -8);
3005 test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 9, 2, -8);
3006 test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 10, 0, 9);
3007 test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 10, 1, 9);
3008 test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 11, 0, 0);
3009 test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 0, 0, 9);
3010 test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 0, 1, 1);
3011 test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 0, 10, 1);
3012 test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 0, 19, 1);
3013 test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 0, 20, 1);
3014 test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 0, 21, 1);
3015 test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 1, 0, 9);
3016 test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 1, 1, 8);
3017 test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 1, 9, 0);
3018 test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 1, 18, -9);
3019 test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 1, 19, -10);
3020 test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 1, 20, -10);
3023 template <class S, class SV>
3026 test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 10, 0, 9);
3027 test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 10, 1, -9);
3028 test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 10, 5, -9);
3029 test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 10, 9, -9);
3030 test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 10, 10, -9);
3031 test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 10, 11, -9);
3032 test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 19, 0, 9);
3033 test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 19, 1, -18);
3034 test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 19, 2, -18);
3035 test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 20, 0, 9);
3036 test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 20, 1, 9);
3037 test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 21, 0, 0);
3038 test(S("abcdefghij"), 5, 0, SV(""), 0, 0, 0);
3039 test(S("abcdefghij"), 5, 0, SV(""), 0, 1, 0);
3040 test(S("abcdefghij"), 5, 0, SV(""), 1, 0, 0);
3041 test(S("abcdefghij"), 5, 0, SV("abcde"), 0, 0, 0);
3042 test(S("abcdefghij"), 5, 0, SV("abcde"), 0, 1, -1);
3043 test(S("abcdefghij"), 5, 0, SV("abcde"), 0, 2, -2);
3044 test(S("abcdefghij"), 5, 0, SV("abcde"), 0, 4, -4);
3045 test(S("abcdefghij"), 5, 0, SV("abcde"), 0, 5, -5);
3046 test(S("abcdefghij"), 5, 0, SV("abcde"), 0, 6, -5);
3047 test(S("abcdefghij"), 5, 0, SV("abcde"), 1, 0, 0);
3048 test(S("abcdefghij"), 5, 0, SV("abcde"), 1, 1, -1);
3049 test(S("abcdefghij"), 5, 0, SV("abcde"), 1, 2, -2);
3050 test(S("abcdefghij"), 5, 0, SV("abcde"), 1, 3, -3);
3051 test(S("abcdefghij"), 5, 0, SV("abcde"), 1, 4, -4);
3052 test(S("abcdefghij"), 5, 0, SV("abcde"), 1, 5, -4);
3053 test(S("abcdefghij"), 5, 0, SV("abcde"), 2, 0, 0);
3054 test(S("abcdefghij"), 5, 0, SV("abcde"), 2, 1, -1);
3055 test(S("abcdefghij"), 5, 0, SV("abcde"), 2, 2, -2);
3056 test(S("abcdefghij"), 5, 0, SV("abcde"), 2, 3, -3);
3057 test(S("abcdefghij"), 5, 0, SV("abcde"), 2, 4, -3);
3058 test(S("abcdefghij"), 5, 0, SV("abcde"), 4, 0, 0);
3059 test(S("abcdefghij"), 5, 0, SV("abcde"), 4, 1, -1);
3060 test(S("abcdefghij"), 5, 0, SV("abcde"), 4, 2, -1);
3061 test(S("abcdefghij"), 5, 0, SV("abcde"), 5, 0, 0);
3062 test(S("abcdefghij"), 5, 0, SV("abcde"), 5, 1, 0);
3063 test(S("abcdefghij"), 5, 0, SV("abcde"), 6, 0, 0);
3064 test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 0, 0, 0);
3065 test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 0, 1, -1);
3066 test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 0, 5, -5);
3067 test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 0, 9, -9);
3068 test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 0, 10, -10);
3069 test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 0, 11, -10);
3070 test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 1, 0, 0);
3071 test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 1, 1, -1);
3072 test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 1, 4, -4);
3073 test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 1, 8, -8);
3074 test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 1, 9, -9);
3075 test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 1, 10, -9);
3076 test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 5, 0, 0);
3077 test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 5, 1, -1);
3078 test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 5, 2, -2);
3079 test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 5, 4, -4);
3080 test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 5, 5, -5);
3081 test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 5, 6, -5);
3082 test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 9, 0, 0);
3083 test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 9, 1, -1);
3084 test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 9, 2, -1);
3085 test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 10, 0, 0);
3086 test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 10, 1, 0);
3087 test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 11, 0, 0);
3088 test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
3089 test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
3090 test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
3091 test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
3092 test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
3093 test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
3094 test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
3095 test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
3096 test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
3097 test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
3098 test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
3099 test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
3100 test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
3101 test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
3102 test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
3103 test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
3104 test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
3105 test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
3106 test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
3107 test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
3108 test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
3109 test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
3110 test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
3111 test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
3112 test(S("abcdefghij"), 5, 1, SV(""), 0, 0, 1);
3113 test(S("abcdefghij"), 5, 1, SV(""), 0, 1, 1);
3114 test(S("abcdefghij"), 5, 1, SV(""), 1, 0, 0);
3115 test(S("abcdefghij"), 5, 1, SV("abcde"), 0, 0, 1);
3116 test(S("abcdefghij"), 5, 1, SV("abcde"), 0, 1, 5);
3117 test(S("abcdefghij"), 5, 1, SV("abcde"), 0, 2, 5);
3118 test(S("abcdefghij"), 5, 1, SV("abcde"), 0, 4, 5);
3119 test(S("abcdefghij"), 5, 1, SV("abcde"), 0, 5, 5);
3120 test(S("abcdefghij"), 5, 1, SV("abcde"), 0, 6, 5);
3121 test(S("abcdefghij"), 5, 1, SV("abcde"), 1, 0, 1);
3122 test(S("abcdefghij"), 5, 1, SV("abcde"), 1, 1, 4);
3123 test(S("abcdefghij"), 5, 1, SV("abcde"), 1, 2, 4);
3124 test(S("abcdefghij"), 5, 1, SV("abcde"), 1, 3, 4);
3125 test(S("abcdefghij"), 5, 1, SV("abcde"), 1, 4, 4);
3128 template <class S, class SV>
3131 test(S("abcdefghij"), 5, 1, SV("abcde"), 1, 5, 4);
3132 test(S("abcdefghij"), 5, 1, SV("abcde"), 2, 0, 1);
3133 test(S("abcdefghij"), 5, 1, SV("abcde"), 2, 1, 3);
3134 test(S("abcdefghij"), 5, 1, SV("abcde"), 2, 2, 3);
3135 test(S("abcdefghij"), 5, 1, SV("abcde"), 2, 3, 3);
3136 test(S("abcdefghij"), 5, 1, SV("abcde"), 2, 4, 3);
3137 test(S("abcdefghij"), 5, 1, SV("abcde"), 4, 0, 1);
3138 test(S("abcdefghij"), 5, 1, SV("abcde"), 4, 1, 1);
3139 test(S("abcdefghij"), 5, 1, SV("abcde"), 4, 2, 1);
3140 test(S("abcdefghij"), 5, 1, SV("abcde"), 5, 0, 1);
3141 test(S("abcdefghij"), 5, 1, SV("abcde"), 5, 1, 1);
3142 test(S("abcdefghij"), 5, 1, SV("abcde"), 6, 0, 0);
3143 test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 0, 0, 1);
3144 test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 0, 1, 5);
3145 test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 0, 5, 5);
3146 test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 0, 9, 5);
3147 test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 0, 10, 5);
3148 test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 0, 11, 5);
3149 test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 1, 0, 1);
3150 test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 1, 1, 4);
3151 test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 1, 4, 4);
3152 test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 1, 8, 4);
3153 test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 1, 9, 4);
3154 test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 1, 10, 4);
3155 test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 5, 0, 1);
3156 test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 5, 1, 0);
3157 test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 5, 2, -1);
3158 test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 5, 4, -3);
3159 test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 5, 5, -4);
3160 test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 5, 6, -4);
3161 test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 9, 0, 1);
3162 test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 9, 1, -4);
3163 test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 9, 2, -4);
3164 test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 10, 0, 1);
3165 test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 10, 1, 1);
3166 test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 11, 0, 0);
3167 test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 0, 0, 1);
3168 test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 0, 1, 5);
3169 test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 0, 10, 5);
3170 test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 0, 19, 5);
3171 test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 0, 20, 5);
3172 test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 0, 21, 5);
3173 test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 1, 0, 1);
3174 test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 1, 1, 4);
3175 test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 1, 9, 4);
3176 test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 1, 18, 4);
3177 test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 1, 19, 4);
3178 test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 1, 20, 4);
3179 test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 10, 0, 1);
3180 test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 10, 1, -5);
3181 test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 10, 5, -5);
3182 test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 10, 9, -5);
3183 test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 10, 10, -5);
3184 test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 10, 11, -5);
3185 test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 19, 0, 1);
3186 test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 19, 1, -14);
3187 test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 19, 2, -14);
3188 test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 20, 0, 1);
3189 test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 20, 1, 1);
3190 test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
3191 test(S("abcdefghij"), 5, 2, SV(""), 0, 0, 2);
3192 test(S("abcdefghij"), 5, 2, SV(""), 0, 1, 2);
3193 test(S("abcdefghij"), 5, 2, SV(""), 1, 0, 0);
3194 test(S("abcdefghij"), 5, 2, SV("abcde"), 0, 0, 2);
3195 test(S("abcdefghij"), 5, 2, SV("abcde"), 0, 1, 5);
3196 test(S("abcdefghij"), 5, 2, SV("abcde"), 0, 2, 5);
3197 test(S("abcdefghij"), 5, 2, SV("abcde"), 0, 4, 5);
3198 test(S("abcdefghij"), 5, 2, SV("abcde"), 0, 5, 5);
3199 test(S("abcdefghij"), 5, 2, SV("abcde"), 0, 6, 5);
3200 test(S("abcdefghij"), 5, 2, SV("abcde"), 1, 0, 2);
3201 test(S("abcdefghij"), 5, 2, SV("abcde"), 1, 1, 4);
3202 test(S("abcdefghij"), 5, 2, SV("abcde"), 1, 2, 4);
3203 test(S("abcdefghij"), 5, 2, SV("abcde"), 1, 3, 4);
3204 test(S("abcdefghij"), 5, 2, SV("abcde"), 1, 4, 4);
3205 test(S("abcdefghij"), 5, 2, SV("abcde"), 1, 5, 4);
3206 test(S("abcdefghij"), 5, 2, SV("abcde"), 2, 0, 2);
3207 test(S("abcdefghij"), 5, 2, SV("abcde"), 2, 1, 3);
3208 test(S("abcdefghij"), 5, 2, SV("abcde"), 2, 2, 3);
3209 test(S("abcdefghij"), 5, 2, SV("abcde"), 2, 3, 3);
3210 test(S("abcdefghij"), 5, 2, SV("abcde"), 2, 4, 3);
3211 test(S("abcdefghij"), 5, 2, SV("abcde"), 4, 0, 2);
3212 test(S("abcdefghij"), 5, 2, SV("abcde"), 4, 1, 1);
3213 test(S("abcdefghij"), 5, 2, SV("abcde"), 4, 2, 1);
3214 test(S("abcdefghij"), 5, 2, SV("abcde"), 5, 0, 2);
3215 test(S("abcdefghij"), 5, 2, SV("abcde"), 5, 1, 2);
3216 test(S("abcdefghij"), 5, 2, SV("abcde"), 6, 0, 0);
3217 test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 0, 0, 2);
3218 test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 0, 1, 5);
3219 test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 0, 5, 5);
3220 test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 0, 9, 5);
3221 test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 0, 10, 5);
3222 test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 0, 11, 5);
3223 test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 1, 0, 2);
3224 test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 1, 1, 4);
3225 test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 1, 4, 4);
3226 test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 1, 8, 4);
3227 test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 1, 9, 4);
3228 test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 1, 10, 4);
3229 test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 5, 0, 2);
3230 test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 5, 1, 1);
3233 template <class S, class SV>
3236 test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 5, 2, 0);
3237 test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 5, 4, -2);
3238 test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 5, 5, -3);
3239 test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 5, 6, -3);
3240 test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 9, 0, 2);
3241 test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 9, 1, -4);
3242 test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 9, 2, -4);
3243 test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 10, 0, 2);
3244 test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 10, 1, 2);
3245 test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 11, 0, 0);
3246 test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 0, 0, 2);
3247 test(S("abcdefghij"), 5, 2, SV
3248 test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 0, 10, 5);
3249 test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 0, 19, 5);
3250 test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 0, 20, 5);
3251 test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 0, 21, 5);
3252 test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 1, 0, 2);
3253 test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 1, 1, 4);
3254 test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 1, 9, 4);
3255 test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 1, 18, 4);
3256 test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 1, 19, 4);
3257 test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 1, 20, 4);
3258 test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 10, 0, 2);
3259 test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 10, 1, -5);
3260 test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 10, 5, -5);
3261 test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 10, 9, -5);
3262 test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 10, 10, -5);
3263 test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 10, 11, -5);
3264 test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 19, 0, 2);
3265 test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 19, 1, -14);
3266 test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 19, 2, -14);
3267 test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 20, 0, 2);
3268 test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 20, 1, 2);
3269 test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 21, 0, 0);
3270 test(S("abcdefghij"), 5, 4, SV(""), 0, 0, 4);
3271 test(S("abcdefghij"), 5, 4, SV(""), 0, 1, 4);
3272 test(S("abcdefghij"), 5, 4, SV(""), 1, 0, 0);
3273 test(S("abcdefghij"), 5, 4, SV("abcde"), 0, 0, 4);
3274 test(S("abcdefghij"), 5, 4, SV("abcde"), 0, 1, 5);
3275 test(S("abcdefghij"), 5, 4, SV("abcde"), 0, 2, 5);
3276 test(S("abcdefghij"), 5, 4, SV("abcde"), 0, 4, 5);
3277 test(S("abcdefghij"), 5, 4, SV("abcde"), 0, 5, 5);
3278 test(S("abcdefghij"), 5, 4, SV("abcde"), 0, 6, 5);
3279 test(S("abcdefghij"), 5, 4, SV("abcde"), 1, 0, 4);
3280 test(S("abcdefghij"), 5, 4, SV("abcde"), 1, 1, 4);
3281 test(S("abcdefghij"), 5, 4, SV("abcde"), 1, 2, 4);
3282 test(S("abcdefghij"), 5, 4, SV("abcde"), 1, 3, 4);
3283 test(S("abcdefghij"), 5, 4, SV("abcde"), 1, 4, 4);
3284 test(S("abcdefghij"), 5, 4, SV("abcde"), 1, 5, 4);
3285 test(S("abcdefghij"), 5, 4, SV("abcde"), 2, 0, 4);
3286 test(S("abcdefghij"), 5, 4, SV("abcde"), 2, 1, 3);
3287 test(S("abcdefghij"), 5, 4, SV("abcde"), 2, 2, 3);
3288 test(S("abcdefghij"), 5, 4, SV("abcde"), 2, 3, 3);
3289 test(S("abcdefghij"), 5, 4, SV("abcde"), 2, 4, 3);
3290 test(S("abcdefghij"), 5, 4, SV("abcde"), 4, 0, 4);
3291 test(S("abcdefghij"), 5, 4, SV("abcde"), 4, 1, 1);
3292 test(S("abcdefghij"), 5, 4, SV("abcde"), 4, 2, 1);
3293 test(S("abcdefghij"), 5, 4, SV("abcde"), 5, 0, 4);
3294 test(S("abcdefghij"), 5, 4, SV("abcde"), 5, 1, 4);
3295 test(S("abcdefghij"), 5, 4, SV("abcde"), 6, 0, 0);
3296 test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 0, 0, 4);
3297 test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 0, 1, 5);
3298 test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 0, 5, 5);
3299 test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 0, 9, 5);
3300 test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 0, 10, 5);
3301 test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 0, 11, 5);
3302 test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 1, 0, 4);
3303 test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 1, 1, 4);
3304 test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 1, 4, 4);
3305 test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 1, 8, 4);
3306 test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 1, 9, 4);
3307 test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 1, 10, 4);
3308 test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 5, 0, 4);
3309 test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 5, 1, 3);
3310 test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 5, 2, 2);
3311 test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 5, 4, 0);
3312 test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 5, 5, -1);
3313 test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 5, 6, -1);
3314 test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 9, 0, 4);
3315 test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 9, 1, -4);
3316 test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 9, 2, -4);
3317 test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 10, 0, 4);
3318 test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 10, 1, 4);
3319 test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 11, 0, 0);
3320 test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 0, 0, 4);
3321 test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 0, 1, 5);
3322 test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 0, 10, 5);
3323 test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 0, 19, 5);
3324 test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 0, 20, 5);
3325 test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 0, 21, 5);
3326 test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 1, 0, 4);
3327 test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 1, 1, 4);
3328 test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 1, 9, 4);
3329 test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 1, 18, 4);
3330 test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 1, 19, 4);
3331 test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 1, 20, 4);
3332 test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 10, 0, 4);
3333 test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 10, 1, -5);
3334 test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 10, 5, -5);
3335 test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 10, 9, -5);
3338 template <class S, class SV>
3341 test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 10, 10, -5);
3342 test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 10, 11, -5);
3343 test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 19, 0, 4);
3344 test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 19, 1, -14);
3345 test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 19, 2, -14);
3346 test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 20, 0, 4);
3347 test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 20, 1, 4);
3348 test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 21, 0, 0);
3349 test(S("abcdefghij"), 5, 5, SV(""), 0, 0, 5);
3350 test(S("abcdefghij"), 5, 5, SV(""), 0, 1, 5);
3351 test(S("abcdefghij"), 5, 5, SV(""), 1, 0, 0);
3352 test(S("abcdefghij"), 5, 5, SV("abcde"), 0, 0, 5);
3353 test(S("abcdefghij"), 5, 5, SV("abcde"), 0, 1, 5);
3354 test(S("abcdefghij"), 5, 5, SV("abcde"), 0, 2, 5);
3355 test(S("abcdefghij"), 5, 5, SV("abcde"), 0, 4, 5);
3356 test(S("abcdefghij"), 5, 5, SV("abcde"), 0, 5, 5);
3357 test(S("abcdefghij"), 5, 5, SV("abcde"), 0, 6, 5);
3358 test(S("abcdefghij"), 5, 5, SV("abcde"), 1, 0, 5);
3359 test(S("abcdefghij"), 5, 5, SV("abcde"), 1, 1, 4);
3360 test(S("abcdefghij"), 5, 5, SV("abcde"), 1, 2, 4);
3361 test(S("abcdefghij"), 5, 5, SV("abcde"), 1, 3, 4);
3362 test(S("abcdefghij"), 5, 5, SV("abcde"), 1, 4, 4);
3363 test(S("abcdefghij"), 5, 5, SV("abcde"), 1, 5, 4);
3364 test(S("abcdefghij"), 5, 5, SV("abcde"), 2, 0, 5);
3365 test(S("abcdefghij"), 5, 5, SV("abcde"), 2, 1, 3);
3366 test(S("abcdefghij"), 5, 5, SV("abcde"), 2, 2, 3);
3367 test(S("abcdefghij"), 5, 5, SV("abcde"), 2, 3, 3);
3368 test(S("abcdefghij"), 5, 5, SV("abcde"), 2, 4, 3);
3369 test(S("abcdefghij"), 5, 5, SV("abcde"), 4, 0, 5);
3370 test(S("abcdefghij"), 5, 5, SV("abcde"), 4, 1, 1);
3371 test(S("abcdefghij"), 5, 5, SV("abcde"), 4, 2, 1);
3372 test(S("abcdefghij"), 5, 5, SV("abcde"), 5, 0, 5);
3373 test(S("abcdefghij"), 5, 5, SV("abcde"), 5, 1, 5);
3374 test(S("abcdefghij"), 5, 5, SV("abcde"), 6, 0, 0);
3375 test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 0, 0, 5);
3376 test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 0, 1, 5);
3377 test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 0, 5, 5);
3378 test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 0, 9, 5);
3379 test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 0, 10, 5);
3380 test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 0, 11, 5);
3381 test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 1, 0, 5);
3382 test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 1, 1, 4);
3383 test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 1, 4, 4);
3384 test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 1, 8, 4);
3385 test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 1, 9, 4);
3386 test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 1, 10, 4);
3387 test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 5, 0, 5);
3388 test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 5, 1, 4);
3389 test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 5, 2, 3);
3390 test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 5, 4, 1);
3391 test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 5, 5, 0);
3392 test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 5, 6, 0);
3393 test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 9, 0, 5);
3394 test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 9, 1, -4);
3395 test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 9, 2, -4);
3396 test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 10, 0, 5);
3397 test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 10, 1, 5);
3398 test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 11, 0, 0);
3399 test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 0, 0, 5);
3400 test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 0, 1, 5);
3401 test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 0, 10, 5);
3402 test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 0, 19, 5);
3403 test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 0, 20, 5);
3404 test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 0, 21, 5);
3405 test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 1, 0, 5);
3406 test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 1, 1, 4);
3407 test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 1, 9, 4);
3408 test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 1, 18, 4);
3409 test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 1, 19, 4);
3410 test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 1, 20, 4);
3411 test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 10, 0, 5);
3412 test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 10, 1, -5);
3413 test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 10, 5, -5);
3414 test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 10, 9, -5);
3415 test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 10, 10, -5);
3416 test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 10, 11, -5);
3417 test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 19, 0, 5);
3418 test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 19, 1, -14);
3419 test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 19, 2, -14);
3420 test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 20, 0, 5);
3421 test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 20, 1, 5);
3422 test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 21, 0, 0);
3423 test(S("abcdefghij"), 5, 6, SV(""), 0, 0, 5);
3424 test(S("abcdefghij"), 5, 6, SV(""), 0, 1, 5);
3425 test(S("abcdefghij"), 5, 6, SV(""), 1, 0, 0);
3426 test(S("abcdefghij"), 5, 6, SV("abcde"), 0, 0, 5);
3427 test(S("abcdefghij"), 5, 6, SV("abcde"), 0, 1, 5);
3428 test(S("abcdefghij"), 5, 6, SV("abcde"), 0, 2, 5);
3429 test(S("abcdefghij"), 5, 6, SV("abcde"), 0, 4, 5);
3430 test(S("abcdefghij"), 5, 6, SV("abcde"), 0, 5, 5);
3431 test(S("abcdefghij"), 5, 6, SV("abcde"), 0, 6, 5);
3432 test(S("abcdefghij"), 5, 6, SV("abcde"), 1, 0, 5);
3433 test(S("abcdefghij"), 5, 6, SV("abcde"), 1, 1, 4);
3434 test(S("abcdefghij"), 5, 6, SV("abcde"), 1, 2, 4);
3435 test(S("abcdefghij"), 5, 6, SV("abcde"), 1, 3, 4);
3436 test(S("abcdefghij"), 5, 6, SV("abcde"), 1, 4, 4);
3437 test(S("abcdefghij"), 5, 6, SV("abcde"), 1, 5, 4);
3438 test(S("abcdefghij"), 5, 6, SV("abcde"), 2, 0, 5);
3439 test(S("abcdefghij"), 5, 6, SV("abcde"), 2, 1, 3);
3440 test(S("abcdefghij"), 5, 6, SV("abcde"), 2, 2, 3);
3443 template <class S, class SV>
3446 test(S("abcdefghij"), 5, 6, SV("abcde"), 2, 3, 3);
3447 test(S("abcdefghij"), 5, 6, SV("abcde"), 2, 4, 3);
3448 test(S("abcdefghij"), 5, 6, SV("abcde"), 4, 0, 5);
3449 test(S("abcdefghij"), 5, 6, SV("abcde"), 4, 1, 1);
3450 test(S("abcdefghij"), 5, 6, SV("abcde"), 4, 2, 1);
3451 test(S("abcdefghij"), 5, 6, SV("abcde"), 5, 0, 5);
3452 test(S("abcdefghij"), 5, 6, SV("abcde"), 5, 1, 5);
3453 test(S("abcdefghij"), 5, 6, SV("abcde"), 6, 0, 0);
3454 test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 0, 0, 5);
3455 test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 0, 1, 5);
3456 test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 0, 5, 5);
3457 test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 0, 9, 5);
3458 test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 0, 10, 5);
3459 test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 0, 11, 5);
3460 test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 1, 0, 5);
3461 test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 1, 1, 4);
3462 test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 1, 4, 4);
3463 test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 1, 8, 4);
3464 test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 1, 9, 4);
3465 test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 1, 10, 4);
3466 test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 5, 0, 5);
3467 test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 5, 1, 4);
3468 test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 5, 2, 3);
3469 test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 5, 4, 1);
3470 test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 5, 5, 0);
3471 test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 5, 6, 0);
3472 test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 9, 0, 5);
3473 test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 9, 1, -4);
3474 test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 9, 2, -4);
3475 test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 10, 0, 5);
3476 test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 10, 1, 5);
3477 test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 11, 0, 0);
3478 test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 0, 0, 5);
3479 test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 0, 1, 5);
3480 test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 0, 10, 5);
3481 test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 0, 19, 5);
3482 test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 0, 20, 5);
3483 test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 0, 21, 5);
3484 test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 1, 0, 5);
3485 test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 1, 1, 4);
3486 test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 1, 9, 4);
3487 test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 1, 18, 4);
3488 test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 1, 19, 4);
3489 test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 1, 20, 4);
3490 test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 10, 0, 5);
3491 test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 10, 1, -5);
3492 test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 10, 5, -5);
3493 test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 10, 9, -5);
3494 test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 10, 10, -5);
3495 test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 10, 11, -5);
3496 test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 19, 0, 5);
3497 test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 19, 1, -14);
3498 test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 19, 2, -14);
3499 test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 20, 0, 5);
3500 test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 20, 1, 5);
3501 test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 21, 0, 0);
3502 test(S("abcdefghij"), 9, 0, SV(""), 0, 0, 0);
3503 test(S("abcdefghij"), 9, 0, SV(""), 0, 1, 0);
3504 test(S("abcdefghij"), 9, 0, SV(""), 1, 0, 0);
3505 test(S("abcdefghij"), 9, 0, SV("abcde"), 0, 0, 0);
3506 test(S("abcdefghij"), 9, 0, SV("abcde"), 0, 1, -1);
3507 test(S("abcdefghij"), 9, 0, SV("abcde"), 0, 2, -2);
3508 test(S("abcdefghij"), 9, 0, SV("abcde"), 0, 4, -4);
3509 test(S("abcdefghij"), 9, 0, SV("abcde"), 0, 5, -5);
3510 test(S("abcdefghij"), 9, 0, SV("abcde"), 0, 6, -5);
3511 test(S("abcdefghij"), 9, 0, SV("abcde"), 1, 0, 0);
3512 test(S("abcdefghij"), 9, 0, SV("abcde"), 1, 1, -1);
3513 test(S("abcdefghij"), 9, 0, SV("abcde"), 1, 2, -2);
3514 test(S("abcdefghij"), 9, 0, SV("abcde"), 1, 3, -3);
3515 test(S("abcdefghij"), 9, 0, SV("abcde"), 1, 4, -4);
3516 test(S("abcdefghij"), 9, 0, SV("abcde"), 1, 5, -4);
3517 test(S("abcdefghij"), 9, 0, SV("abcde"), 2, 0, 0);
3518 test(S("abcdefghij"), 9, 0, SV("abcde"), 2, 1, -1);
3519 test(S("abcdefghij"), 9, 0, SV("abcde"), 2, 2, -2);
3520 SV("abcde"), 2, 3, -3);
3521 test(S("abcdefghij"), 9, 0, SV("abcde"), 2, 4, -3);
3522 test(S("abcdefghij"), 9, 0, SV("abcde"), 4, 0, 0);
3523 test(S("abcdefghij"), 9, 0, SV("abcde"), 4, 1, -1);
3524 test(S("abcdefghij"), 9, 0, SV("abcde"), 4, 2, -1);
3525 test(S("abcdefghij"), 9, 0, SV("abcde"), 5, 0, 0);
3526 test(S("abcdefghij"), 9, 0, SV("abcde"), 5, 1, 0);
3527 test(S("abcdefghij"), 9, 0, SV("abcde"), 6, 0, 0);
3528 test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 0, 0, 0);
3529 test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 0, 1, -1);
3530 test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 0, 5, -5);
3531 test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 0, 9, -9);
3532 test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 0, 10, -10);
3533 test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 0, 11, -10);
3534 test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 1, 0, 0);
3535 test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 1, 1, -1);
3536 test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 1, 4, -4);
3537 test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 1, 8, -8);
3538 test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 1, 9, -9);
3539 test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 1, 10, -9);
3540 test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 5, 0, 0);
3541 test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 5, 1, -1);
3542 test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 5, 2, -2);
3543 test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 5, 4, -4);
3544 test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 5, 5, -5);
3545 test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 5, 6, -5);
3548 template <class S, class SV>
3551 test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 9, 0, 0);
3552 test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 9, 1, -1);
3553 test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 9, 2, -1);
3554 test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 10, 0, 0);
3555 test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 10, 1, 0);
3556 test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 11, 0, 0);
3557 test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
3558 test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
3559 test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
3560 test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
3561 test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
3562 test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
3563 test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
3564 test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
3565 test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
3566 test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
3567 test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
3568 test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
3569 test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
3570 test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
3571 test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
3572 test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
3573 test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
3574 test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
3575 test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
3576 test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
3577 test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
3578 test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
3579 test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
3580 test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
3581 test(S("abcdefghij"), 9, 1, SV(""), 0, 0, 1);
3582 test(S("abcdefghij"), 9, 1, SV(""), 0, 1, 1);
3583 test(S("abcdefghij"), 9, 1, SV(""), 1, 0, 0);
3584 test(S("abcdefghij"), 9, 1, SV("abcde"), 0, 0, 1);
3585 test(S("abcdefghij"), 9, 1, SV("abcde"), 0, 1, 9);
3586 test(S("abcdefghij"), 9, 1, SV("abcde"), 0, 2, 9);
3587 test(S("abcdefghij"), 9, 1, SV("abcde"), 0, 4, 9);
3588 test(S("abcdefghij"), 9, 1, SV("abcde"), 0, 5, 9);
3589 test(S("abcdefghij"), 9, 1, SV("abcde"), 0, 6, 9);
3590 test(S("abcdefghij"), 9, 1, SV("abcde"), 1, 0, 1);
3591 test(S("abcdefghij"), 9, 1, SV("abcde"), 1, 1, 8);
3592 test(S("abcdefghij"), 9, 1, SV("abcde"), 1, 2, 8);
3593 test(S("abcdefghij"), 9, 1, SV("abcde"), 1, 3, 8);
3594 test(S("abcdefghij"), 9, 1, SV("abcde"), 1, 4, 8);
3595 test(S("abcdefghij"), 9, 1, SV("abcde"), 1, 5, 8);
3596 test(S("abcdefghij"), 9, 1, SV("abcde"), 2, 0, 1);
3597 test(S("abcdefghij"), 9, 1, SV("abcde"), 2, 1, 7);
3598 test(S("abcdefghij"), 9, 1, SV("abcde"), 2, 2, 7);
3599 test(S("abcdefghij"), 9, 1, SV("abcde"), 2, 3, 7);
3600 test(S("abcdefghij"), 9, 1, SV("abcde"), 2, 4, 7);
3601 test(S("abcdefghij"), 9, 1, SV("abcde"), 4, 0, 1);
3602 test(S("abcdefghij"), 9, 1, SV("abcde"), 4, 1, 5);
3603 test(S("abcdefghij"), 9, 1, SV("abcde"), 4, 2, 5);
3604 test(S("abcdefghij"), 9, 1, SV("abcde"), 5, 0, 1);
3605 test(S("abcdefghij"), 9, 1, SV("abcde"), 5, 1, 1);
3606 test(S("abcdefghij"), 9, 1, SV("abcde"), 6, 0, 0);
3607 test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 0, 0, 1);
3608 test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 0, 1, 9);
3609 test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 0, 5, 9);
3610 test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 0, 9, 9);
3611 test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 0, 10, 9);
3612 test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 0, 11, 9);
3613 test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 1, 0, 1);
3614 test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 1, 1, 8);
3615 test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 1, 4, 8);
3616 test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 1, 8, 8);
3617 test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 1, 9, 8);
3618 test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 1, 10, 8);
3619 test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 5, 0, 1);
3620 test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 5, 1, 4);
3621 test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 5, 2, 4);
3622 test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 5, 4, 4);
3623 test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 5, 5, 4);
3624 test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 5, 6, 4);
3625 test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 9, 0, 1);
3626 test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 9, 1, 0);
3627 test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 9, 2, 0);
3628 test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 10, 0, 1);
3629 test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 10, 1, 1);
3630 test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 11, 0, 0);
3631 test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 0, 0, 1);
3632 test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 0, 1, 9);
3633 test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 0, 10, 9);
3634 test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 0, 19, 9);
3635 test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 0, 20, 9);
3636 test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 0, 21, 9);
3637 test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 1, 0, 1);
3638 test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 1, 1, 8);
3639 test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 1, 9, 8);
3640 test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 1, 18, 8);
3641 test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 1, 19, 8);
3642 test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 1, 20, 8);
3643 test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 10, 0, 1);
3644 test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 10, 1, -1);
3645 test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 10, 5, -1);
3646 test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 10, 9, -1);
3647 test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 10, 10, -1);
3648 test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 10, 11, -1);
3649 test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 19, 0, 1);
3650 test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 19, 1, -10);
3653 template <class S, class SV>
3656 test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 19, 2, -10);
3657 test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 20, 0, 1);
3658 test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 20, 1, 1);
3659 test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
3660 test(S("abcdefghij"), 9, 2, SV(""), 0, 0, 1);
3661 test(S("abcdefghij"), 9, 2, SV(""), 0, 1, 1);
3662 test(S("abcdefghij"), 9, 2, SV(""), 1, 0, 0);
3663 test(S("abcdefghij"), 9, 2, SV("abcde"), 0, 0, 1);
3664 test(S("abcdefghij"), 9, 2, SV("abcde"), 0, 1, 9);
3665 test(S("abcdefghij"), 9, 2, SV("abcde"), 0, 2, 9);
3666 test(S("abcdefghij"), 9, 2, SV("abcde"), 0, 4, 9);
3667 test(S("abcdefghij"), 9, 2, SV("abcde"), 0, 5, 9);
3668 test(S("abcdefghij"), 9, 2, SV("abcde"), 0, 6, 9);
3669 test(S("abcdefghij"), 9, 2, SV("abcde"), 1, 0, 1);
3670 test(S("abcdefghij"), 9, 2, SV("abcde"), 1, 1, 8);
3671 test(S("abcdefghij"), 9, 2, SV("abcde"), 1, 2, 8);
3672 test(S("abcdefghij"), 9, 2, SV("abcde"), 1, 3, 8);
3673 test(S("abcdefghij"), 9, 2, SV("abcde"), 1, 4, 8);
3674 test(S("abcdefghij"), 9, 2, SV("abcde"), 1, 5, 8);
3675 test(S("abcdefghij"), 9, 2, SV("abcde"), 2, 0, 1);
3676 test(S("abcdefghij"), 9, 2, SV("abcde"), 2, 1, 7);
3677 test(S("abcdefghij"), 9, 2, SV("abcde"), 2, 2, 7);
3678 test(S("abcdefghij"), 9, 2, SV("abcde"), 2, 3, 7);
3679 test(S("abcdefghij"), 9, 2, SV("abcde"), 2, 4, 7);
3680 test(S("abcdefghij"), 9, 2, SV("abcde"), 4, 0, 1);
3681 test(S("abcdefghij"), 9, 2, SV("abcde"), 4, 1, 5);
3682 test(S("abcdefghij"), 9, 2, SV("abcde"), 4, 2, 5);
3683 test(S("abcdefghij"), 9, 2, SV("abcde"), 5, 0, 1);
3684 test(S("abcdefghij"), 9, 2, SV("abcde"), 5, 1, 1);
3685 test(S("abcdefghij"), 9, 2, SV("abcde"), 6, 0, 0);
3686 test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 0, 0, 1);
3687 test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 0, 1, 9);
3688 test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 0, 5, 9);
3689 test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 0, 9, 9);
3690 test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 0, 10, 9);
3691 test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 0, 11, 9);
3692 test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 1, 0, 1);
3693 test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 1, 1, 8);
3694 test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 1, 4, 8);
3695 test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 1, 8, 8);
3696 test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 1, 9, 8);
3697 test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 1, 10, 8);
3698 test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 5, 0, 1);
3699 test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 5, 1, 4);
3700 test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 5, 2, 4);
3701 test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 5, 4, 4);
3702 test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 5, 5, 4);
3703 test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 5, 6, 4);
3704 test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 9, 0, 1);
3705 test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 9, 1, 0);
3706 test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 9, 2, 0);
3707 test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 10, 0, 1);
3708 test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 10, 1, 1);
3709 test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 11, 0, 0);
3710 test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 0, 0, 1);
3711 test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 0, 1, 9);
3712 test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 0, 10, 9);
3713 test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 0, 19, 9);
3714 test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 0, 20, 9);
3715 test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 0, 21, 9);
3716 test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 1, 0, 1);
3717 test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 1, 1, 8);
3718 test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 1, 9, 8);
3719 test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 1, 18, 8);
3720 test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 1, 19, 8);
3721 test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 1, 20, 8);
3722 test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 10, 0, 1);
3723 test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 10, 1, -1);
3724 test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 10, 5, -1);
3725 test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 10, 9, -1);
3726 test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 10, 10, -1);
3727 test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 10, 11, -1);
3728 test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 19, 0, 1);
3729 test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 19, 1, -10);
3730 test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 19, 2, -10);
3731 test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 20, 0, 1);
3732 test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 20, 1, 1);
3733 test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 21, 0, 0);
3734 test(S("abcdefghij"), 10, 0, SV(""), 0, 0, 0);
3735 test(S("abcdefghij"), 10, 0, SV(""), 0, 1, 0);
3736 test(S("abcdefghij"), 10, 0, SV(""), 1, 0, 0);
3737 test(S("abcdefghij"), 10, 0, SV("abcde"), 0, 0, 0);
3738 test(S("abcdefghij"), 10, 0, SV("abcde"), 0, 1, -1);
3739 test(S("abcdefghij"), 10, 0, SV("abcde"), 0, 2, -2);
3740 test(S("abcdefghij"), 10, 0, SV("abcde"), 0, 4, -4);
3741 test(S("abcdefghij"), 10, 0, SV("abcde"), 0, 5, -5);
3742 test(S("abcdefghij"), 10, 0, SV("abcde"), 0, 6, -5);
3743 test(S("abcdefghij"), 10, 0, SV("abcde"), 1, 0, 0);
3744 test(S("abcdefghij"), 10, 0, SV("abcde"), 1, 1, -1);
3745 test(S("abcdefghij"), 10, 0, SV("abcde"), 1, 2, -2);
3746 test(S("abcdefghij"), 10, 0, SV("abcde"), 1, 3, -3);
3747 test(S("abcdefghij"), 10, 0, SV("abcde"), 1, 4, -4);
3748 test(S("abcdefghij"), 10, 0, SV("abcde"), 1, 5, -4);
3749 test(S("abcdefghij"), 10, 0, SV("abcde"), 2, 0, 0);
3750 test(S("abcdefghij"), 10, 0, SV("abcde"), 2, 1, -1);
3751 test(S("abcdefghij"), 10, 0, SV("abcde"), 2, 2, -2);
3752 test(S("abcdefghij"), 10, 0, SV("abcde"), 2, 3, -3);
3753 test(S("abcdefghij"), 10, 0, SV("abcde"), 2, 4, -3);
3754 test(S("abcdefghij"), 10, 0, SV("abcde"), 4, 0, 0);
3755 test(S("abcdefghij"), 10, 0, SV("abcde"), 4, 1, -1);
3758 template <class S, class SV>
3761 test(S("abcdefghij"), 10, 0, SV("abcde"), 4, 2, -1);
3762 test(S("abcdefghij"), 10, 0, SV("abcde"), 5, 0, 0);
3763 test(S("abcdefghij"), 10, 0, SV("abcde"), 5, 1, 0);
3764 test(S("abcdefghij"), 10, 0, SV("abcde"), 6, 0, 0);
3765 test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 0, 0, 0);
3766 test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 0, 1, -1);
3767 test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 0, 5, -5);
3768 test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 0, 9, -9);
3769 test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 0, 10, -10);
3770 test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 0, 11, -10);
3771 test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 1, 0, 0);
3772 test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 1, 1, -1);
3773 test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 1, 4, -4);
3774 test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 1, 8, -8);
3775 test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 1, 9, -9);
3776 test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 1, 10, -9);
3777 test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 5, 0, 0);
3778 test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 5, 1, -1);
3779 test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 5, 2, -2);
3780 test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 5, 4, -4);
3781 test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 5, 5, -5);
3782 test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 5, 6, -5);
3783 test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 9, 0, 0);
3784 test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 9, 1, -1);
3785 test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 9, 2, -1);
3786 test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 10, 0, 0);
3787 test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 10, 1, 0);
3788 test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 11, 0, 0);
3789 test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
3790 test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
3791 test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
3792 test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
3793 test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
3794 test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
3795 test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
3796 SV("abcdefghijklmnopqrst"), 1, 1, -1);
3797 test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
3798 test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
3799 test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
3800 test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
3801 test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
3802 test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
3803 test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
3804 test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
3805 test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
3806 test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
3807 test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
3808 test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
3809 test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
3810 test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
3811 test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
3812 test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
3813 test(S("abcdefghij"), 10, 1, SV(""), 0, 0, 0);
3814 test(S("abcdefghij"), 10, 1, SV(""), 0, 1, 0);
3815 test(S("abcdefghij"), 10, 1, SV(""), 1, 0, 0);
3816 test(S("abcdefghij"), 10, 1, SV("abcde"), 0, 0, 0);
3817 test(S("abcdefghij"), 10, 1, SV("abcde"), 0, 1, -1);
3818 test(S("abcdefghij"), 10, 1, SV("abcde"), 0, 2, -2);
3819 test(S("abcdefghij"), 10, 1, SV("abcde"), 0, 4, -4);
3820 test(S("abcdefghij"), 10, 1, SV("abcde"), 0, 5, -5);
3821 test(S("abcdefghij"), 10, 1, SV("abcde"), 0, 6, -5);
3822 test(S("abcdefghij"), 10, 1, SV("abcde"), 1, 0, 0);
3823 test(S("abcdefghij"), 10, 1, SV("abcde"), 1, 1, -1);
3824 test(S("abcdefghij"), 10, 1, SV("abcde"), 1, 2, -2);
3825 test(S("abcdefghij"), 10, 1, SV("abcde"), 1, 3, -3);
3826 test(S("abcdefghij"), 10, 1, SV("abcde"), 1, 4, -4);
3827 test(S("abcdefghij"), 10, 1, SV("abcde"), 1, 5, -4);
3828 test(S("abcdefghij"), 10, 1, SV("abcde"), 2, 0, 0);
3829 test(S("abcdefghij"), 10, 1, SV("abcde"), 2, 1, -1);
3830 test(S("abcdefghij"), 10, 1, SV("abcde"), 2, 2, -2);
3831 test(S("abcdefghij"), 10, 1, SV("abcde"), 2, 3, -3);
3832 test(S("abcdefghij"), 10, 1, SV("abcde"), 2, 4, -3);
3833 test(S("abcdefghij"), 10, 1, SV("abcde"), 4, 0, 0);
3834 test(S("abcdefghij"), 10, 1, SV("abcde"), 4, 1, -1);
3835 test(S("abcdefghij"), 10, 1, SV("abcde"), 4, 2, -1);
3836 test(S("abcdefghij"), 10, 1, SV("abcde"), 5, 0, 0);
3837 test(S("abcdefghij"), 10, 1, SV("abcde"), 5, 1, 0);
3838 test(S("abcdefghij"), 10, 1, SV("abcde"), 6, 0, 0);
3839 test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 0, 0, 0);
3840 test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 0, 1, -1);
3841 test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 0, 5, -5);
3842 test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 0, 9, -9);
3843 test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 0, 10, -10);
3844 test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 0, 11, -10);
3845 test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 1, 0, 0);
3846 test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 1, 1, -1);
3847 test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 1, 4, -4);
3848 test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 1, 8, -8);
3849 test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 1, 9, -9);
3850 test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 1, 10, -9);
3851 test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 5, 0, 0);
3852 test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 5, 1, -1);
3853 test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 5, 2, -2);
3854 test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 5, 4, -4);
3855 test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 5, 5, -5);
3856 test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 5, 6, -5);
3857 test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 9, 0, 0);
3858 test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 9, 1, -1);
3859 test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 9, 2, -1);
3860 test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 10, 0, 0);
3863 template <class S, class SV>
3866 test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 10, 1, 0);
3867 test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 11, 0, 0);
3868 test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 0, 0, 0);
3869 test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 0, 1, -1);
3870 test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 0, 10, -10);
3871 test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 0, 19, -19);
3872 test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 0, 20, -20);
3873 test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 0, 21, -20);
3874 test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 1, 0, 0);
3875 test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 1, 1, -1);
3876 test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 1, 9, -9);
3877 test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 1, 18, -18);
3878 test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 1, 19, -19);
3879 test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 1, 20, -19);
3880 test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 10, 0, 0);
3881 test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 10, 1, -1);
3882 test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 10, 5, -5);
3883 test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 10, 9, -9);
3884 test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 10, 10, -10);
3885 test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 10, 11, -10);
3886 test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 19, 0, 0);
3887 test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 19, 1, -1);
3888 test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 19, 2, -1);
3889 test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 20, 0, 0);
3890 test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 20, 1, 0);
3891 test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
3892 test(S("abcdefghij"), 11, 0, SV(""), 0, 0, 0);
3893 test(S("abcdefghij"), 11, 0, SV(""), 0, 1, 0);
3894 test(S("abcdefghij"), 11, 0, SV(""), 1, 0, 0);
3895 test(S("abcdefghij"), 11, 0, SV("abcde"), 0, 0, 0);
3896 test(S("abcdefghij"), 11, 0, SV("abcde"), 0, 1, 0);
3897 test(S("abcdefghij"), 11, 0, SV("abcde"), 0, 2, 0);
3898 test(S("abcdefghij"), 11, 0, SV("abcde"), 0, 4, 0);
3899 test(S("abcdefghij"), 11, 0, SV("abcde"), 0, 5, 0);
3900 test(S("abcdefghij"), 11, 0, SV("abcde"), 0, 6, 0);
3901 test(S("abcdefghij"), 11, 0, SV("abcde"), 1, 0, 0);
3902 test(S("abcdefghij"), 11, 0, SV("abcde"), 1, 1, 0);
3903 test(S("abcdefghij"), 11, 0, SV("abcde"), 1, 2, 0);
3904 test(S("abcdefghij"), 11, 0, SV("abcde"), 1, 3, 0);
3905 test(S("abcdefghij"), 11, 0, SV("abcde"), 1, 4, 0);
3906 test(S("abcdefghij"), 11, 0, SV("abcde"), 1, 5, 0);
3907 test(S("abcdefghij"), 11, 0, SV("abcde"), 2, 0, 0);
3908 test(S("abcdefghij"), 11, 0, SV("abcde"), 2, 1, 0);
3909 test(S("abcdefghij"), 11, 0, SV("abcde"), 2, 2, 0);
3910 test(S("abcdefghij"), 11, 0, SV("abcde"), 2, 3, 0);
3911 test(S("abcdefghij"), 11, 0, SV("abcde"), 2, 4, 0);
3912 test(S("abcdefghij"), 11, 0, SV("abcde"), 4, 0, 0);
3913 test(S("abcdefghij"), 11, 0, SV("abcde"), 4, 1, 0);
3914 test(S("abcdefghij"), 11, 0, SV("abcde"), 4, 2, 0);
3915 test(S("abcdefghij"), 11, 0, SV("abcde"), 5, 0, 0);
3916 test(S("abcdefghij"), 11, 0, SV("abcde"), 5, 1, 0);
3917 test(S("abcdefghij"), 11, 0, SV("abcde"), 6, 0, 0);
3918 test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 0, 0, 0);
3919 test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 0, 1, 0);
3920 test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 0, 5, 0);
3921 test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 0, 9, 0);
3922 test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 0, 10, 0);
3923 test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 0, 11, 0);
3924 test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 1, 0, 0);
3925 test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 1, 1, 0);
3926 test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 1, 4, 0);
3927 test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 1, 8, 0);
3928 test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 1, 9, 0);
3929 test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 1, 10, 0);
3930 test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 5, 0, 0);
3931 test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 5, 1, 0);
3932 test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 5, 2, 0);
3933 test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 5, 4, 0);
3934 test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 5, 5, 0);
3935 test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 5, 6, 0);
3936 test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 9, 0, 0);
3937 test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 9, 1, 0);
3938 test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 9, 2, 0);
3939 test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 10, 0, 0);
3940 test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 10, 1, 0);
3941 test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 11, 0, 0);
3942 test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
3943 test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 0, 1, 0);
3944 test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 0, 10, 0);
3945 test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 0, 19, 0);
3946 test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 0, 20, 0);
3947 test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 0, 21, 0);
3948 test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
3949 test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 1, 1, 0);
3950 test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 1, 9, 0);
3951 test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 1, 18, 0);
3952 test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 1, 19, 0);
3953 test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 1, 20, 0);
3954 test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
3955 test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 10, 1, 0);
3956 test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 10, 5, 0);
3957 test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 10, 9, 0);
3958 test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 10, 10, 0);
3959 test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 10, 11, 0);
3960 test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
3961 test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 19, 1, 0);
3962 test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 19, 2, 0);
3963 test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
3964 test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
3965 test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
3968 template <class S, class SV>
3971 test(S("abcdefghijklmnopqrst"), 0, 0, SV(""), 0, 0, 0);
3972 test(S("abcdefghijklmnopqrst"), 0, 0, SV(""), 0, 1, 0);
3973 test(S("abcdefghijklmnopqrst"), 0, 0, SV(""), 1, 0, 0);
3974 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 0, 0, 0);
3975 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 0, 1, -1);
3976 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 0, 2, -2);
3977 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 0, 4, -4);
3978 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 0, 5, -5);
3979 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 0, 6, -5);
3980 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 1, 0, 0);
3981 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 1, 1, -1);
3982 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 1, 2, -2);
3983 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 1, 3, -3);
3984 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 1, 4, -4);
3985 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 1, 5, -4);
3986 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 2, 0, 0);
3987 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 2, 1, -1);
3988 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 2, 2, -2);
3989 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 2, 3, -3);
3990 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 2, 4, -3);
3991 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 4, 0, 0);
3992 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 4, 1, -1);
3993 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 4, 2, -1);
3994 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 5, 0, 0);
3995 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 5, 1, 0);
3996 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 6, 0, 0);
3997 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 0, 0, 0);
3998 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 0, 1, -1);
3999 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 0, 5, -5);
4000 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 0, 9, -9);
4001 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 0, 10, -10);
4002 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 0, 11, -10);
4003 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 1, 0, 0);
4004 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 1, 1, -1);
4005 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 1, 4, -4);
4006 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 1, 8, -8);
4007 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 1, 9, -9);
4008 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 1, 10, -9);
4009 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 5, 0, 0);
4010 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 5, 1, -1);
4011 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 5, 2, -2);
4012 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 5, 4, -4);
4013 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 5, 5, -5);
4014 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 5, 6, -5);
4015 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 9, 0, 0);
4016 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 9, 1, -1);
4017 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 9, 2, -1);
4018 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 10, 0, 0);
4019 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 10, 1, 0);
4020 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 11, 0, 0);
4021 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
4022 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
4023 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
4024 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
4025 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
4026 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
4027 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
4028 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
4029 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
4030 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
4031 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
4032 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
4033 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
4034 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
4035 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
4036 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
4037 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
4038 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
4039 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
4040 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
4041 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
4042 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
4043 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
4044 test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
4045 test(S("abcdefghijklmnopqrst"), 0, 1, SV(""), 0, 0, 1);
4046 test(S("abcdefghijklmnopqrst"), 0, 1, SV(""), 0, 1, 1);
4047 test(S("abcdefghijklmnopqrst"), 0, 1, SV(""), 1, 0, 0);
4048 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 0, 0, 1);
4049 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 0, 1, 0);
4050 test(S("abcdefghijklmnopqrst"), 0, 1, SV
4051 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 0, 4, -3);
4052 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 0, 5, -4);
4053 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 0, 6, -4);
4054 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 1, 0, 1);
4055 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 1, 1, -1);
4056 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 1, 2, -1);
4057 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 1, 3, -1);
4058 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 1, 4, -1);
4059 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 1, 5, -1);
4060 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 2, 0, 1);
4061 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 2, 1, -2);
4062 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 2, 2, -2);
4063 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 2, 3, -2);
4064 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 2, 4, -2);
4065 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 4, 0, 1);
4066 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 4, 1, -4);
4067 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 4, 2, -4);
4068 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 5, 0, 1);
4069 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 5, 1, 1);
4070 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 6, 0, 0);
4073 template <class S, class SV>
4076 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 0, 0, 1);
4077 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 0, 1, 0);
4078 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 0, 5, -4);
4079 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 0, 9, -8);
4080 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 0, 10, -9);
4081 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 0, 11, -9);
4082 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 1, 0, 1);
4083 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 1, 1, -1);
4084 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 1, 4, -1);
4085 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 1, 8, -1);
4086 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 1, 9, -1);
4087 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 1, 10, -1);
4088 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 5, 0, 1);
4089 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 5, 1, -5);
4090 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 5, 2, -5);
4091 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 5, 4, -5);
4092 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 5, 5, -5);
4093 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 5, 6, -5);
4094 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 9, 0, 1);
4095 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 9, 1, -9);
4096 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 9, 2, -9);
4097 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 10, 0, 1);
4098 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 10, 1, 1);
4099 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 11, 0, 0);
4100 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 0, 1);
4101 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 1, 0);
4102 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 10, -9);
4103 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 19, -18);
4104 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 20, -19);
4105 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 21, -19);
4106 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 0, 1);
4107 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 1, -1);
4108 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 9, -1);
4109 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 18, -1);
4110 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 19, -1);
4111 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 20, -1);
4112 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 0, 1);
4113 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 1, -10);
4114 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 5, -10);
4115 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 9, -10);
4116 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 10, -10);
4117 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 11, -10);
4118 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 19, 0, 1);
4119 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 19, 1, -19);
4120 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 19, 2, -19);
4121 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 20, 0, 1);
4122 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 20, 1, 1);
4123 test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
4124 test(S("abcdefghijklmnopqrst"), 0, 10, SV(""), 0, 0, 10);
4125 test(S("abcdefghijklmnopqrst"), 0, 10, SV(""), 0, 1, 10);
4126 test(S("abcdefghijklmnopqrst"), 0, 10, SV(""), 1, 0, 0);
4127 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 0, 0, 10);
4128 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 0, 1, 9);
4129 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 0, 2, 8);
4130 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 0, 4, 6);
4131 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 0, 5, 5);
4132 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 0, 6, 5);
4133 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 1, 0, 10);
4134 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 1, 1, -1);
4135 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 1, 2, -1);
4136 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 1, 3, -1);
4137 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 1, 4, -1);
4138 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 1, 5, -1);
4139 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 2, 0, 10);
4140 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 2, 1, -2);
4141 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 2, 2, -2);
4142 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 2, 3, -2);
4143 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 2, 4, -2);
4144 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 4, 0, 10);
4145 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 4, 1, -4);
4146 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 4, 2, -4);
4147 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 5, 0, 10);
4148 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 5, 1, 10);
4149 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 6, 0, 0);
4150 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 0, 0, 10);
4151 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 0, 1, 9);
4152 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 0, 5, 5);
4153 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 0, 9, 1);
4154 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 0, 10, 0);
4155 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 0, 11, 0);
4156 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 1, 0, 10);
4157 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 1, 1, -1);
4158 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 1, 4, -1);
4159 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 1, 8, -1);
4160 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 1, 9, -1);
4161 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 1, 10, -1);
4162 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 5, 0, 10);
4163 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 5, 1, -5);
4164 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 5, 2, -5);
4165 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 5, 4, -5);
4166 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 5, 5, -5);
4167 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 5, 6, -5);
4168 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 9, 0, 10);
4169 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 9, 1, -9);
4170 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 9, 2, -9);
4171 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 10, 0, 10);
4172 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 10, 1, 10);
4173 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 11, 0, 0);
4174 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 0, 0, 10);
4175 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 0, 1, 9);
4178 template <class S, class SV>
4181 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 0, 10, 0);
4182 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 0, 19, -9);
4183 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 0, 20, -10);
4184 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 0, 21, -10);
4185 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 1, 0, 10);
4186 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 1, 1, -1);
4187 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 1, 9, -1);
4188 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 1, 18, -1);
4189 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 1, 19, -1);
4190 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 1, 20, -1);
4191 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 10, 0, 10);
4192 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 10, 1, -10);
4193 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 10, 5, -10);
4194 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 10, 9, -10);
4195 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 10, 10, -10);
4196 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 10, 11, -10);
4197 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 19, 0, 10);
4198 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 19, 1, -19);
4199 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 19, 2, -19);
4200 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 20, 0, 10);
4201 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 20, 1, 10);
4202 test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 21, 0, 0);
4203 test(S("abcdefghijklmnopqrst"), 0, 19, SV(""), 0, 0, 19);
4204 test(S("abcdefghijklmnopqrst"), 0, 19, SV(""), 0, 1, 19);
4205 test(S("abcdefghijklmnopqrst"), 0, 19, SV(""), 1, 0, 0);
4206 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 0, 0, 19);
4207 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 0, 1, 18);
4208 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 0, 2, 17);
4209 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 0, 4, 15);
4210 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 0, 5, 14);
4211 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 0, 6, 14);
4212 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 1, 0, 19);
4213 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 1, 1, -1);
4214 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 1, 2, -1);
4215 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 1, 3, -1);
4216 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 1, 4, -1);
4217 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 1, 5, -1);
4218 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 2, 0, 19);
4219 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 2, 1, -2);
4220 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 2, 2, -2);
4221 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 2, 3, -2);
4222 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 2, 4, -2);
4223 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 4, 0, 19);
4224 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 4, 1, -4);
4225 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 4, 2, -4);
4226 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 5, 0, 19);
4227 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 5, 1, 19);
4228 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 6, 0, 0);
4229 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 0, 0, 19);
4230 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 0, 1, 18);
4231 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 0, 5, 14);
4232 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 0, 9, 10);
4233 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 0, 10, 9);
4234 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 0, 11, 9);
4235 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 1, 0, 19);
4236 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 1, 1, -1);
4237 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 1, 4, -1);
4238 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 1, 8, -1);
4239 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 1, 9, -1);
4240 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 1, 10, -1);
4241 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 5, 0, 19);
4242 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 5, 1, -5);
4243 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 5, 2, -5);
4244 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 5, 4, -5);
4245 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 5, 5, -5);
4246 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 5, 6, -5);
4247 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 9, 0, 19);
4248 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 9, 1, -9);
4249 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 9, 2, -9);
4250 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 10, 0, 19);
4251 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 10, 1, 19);
4252 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 11, 0, 0);
4253 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 0, 0, 19);
4254 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 0, 1, 18);
4255 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 0, 10, 9);
4256 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 0, 19, 0);
4257 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 0, 20, -1);
4258 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 0, 21, -1);
4259 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 1, 0, 19);
4260 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 1, 1, -1);
4261 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 1, 9, -1);
4262 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 1, 18, -1);
4263 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 1, 19, -1);
4264 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 1, 20, -1);
4265 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 10, 0, 19);
4266 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 10, 1, -10);
4267 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 10, 5, -10);
4268 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 10, 9, -10);
4269 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 10, 10, -10);
4270 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 10, 11, -10);
4271 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 19, 0, 19);
4272 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 19, 1, -19);
4273 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 19, 2, -19);
4274 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 20, 0, 19);
4275 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 20, 1, 19);
4276 test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 21, 0, 0);
4277 test(S("abcdefghijklmnopqrst"), 0, 20, SV(""), 0, 0, 20);
4278 test(S("abcdefghijklmnopqrst"), 0, 20, SV(""), 0, 1, 20);
4279 test(S("abcdefghijklmnopqrst"), 0, 20, SV(""), 1, 0, 0);
4280 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 0, 0, 20);
4283 template <class S, class SV>
4286 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 0, 1, 19);
4287 SV("abcde"), 0, 2, 18);
4288 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 0, 4, 16);
4289 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 0, 5, 15);
4290 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 0, 6, 15);
4291 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 1, 0, 20);
4292 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 1, 1, -1);
4293 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 1, 2, -1);
4294 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 1, 3, -1);
4295 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 1, 4, -1);
4296 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 1, 5, -1);
4297 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 2, 0, 20);
4298 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 2, 1, -2);
4299 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 2, 2, -2);
4300 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 2, 3, -2);
4301 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 2, 4, -2);
4302 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 4, 0, 20);
4303 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 4, 1, -4);
4304 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 4, 2, -4);
4305 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 5, 0, 20);
4306 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 5, 1, 20);
4307 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 6, 0, 0);
4308 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 0, 0, 20);
4309 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 0, 1, 19);
4310 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 0, 5, 15);
4311 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 0, 9, 11);
4312 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 0, 10, 10);
4313 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 0, 11, 10);
4314 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 1, 0, 20);
4315 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 1, 1, -1);
4316 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 1, 4, -1);
4317 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 1, 8, -1);
4318 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 1, 9, -1);
4319 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 1, 10, -1);
4320 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 5, 0, 20);
4321 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 5, 1, -5);
4322 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 5, 2, -5);
4323 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 5, 4, -5);
4324 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 5, 5, -5);
4325 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 5, 6, -5);
4326 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 9, 0, 20);
4327 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 9, 1, -9);
4328 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 9, 2, -9);
4329 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 10, 0, 20);
4330 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 10, 1, 20);
4331 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 11, 0, 0);
4332 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 0, 0, 20);
4333 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 0, 1, 19);
4334 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 0, 10, 10);
4335 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 0, 19, 1);
4336 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 0, 20, 0);
4337 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 0, 21, 0);
4338 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 1, 0, 20);
4339 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 1, 1, -1);
4340 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 1, 9, -1);
4341 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 1, 18, -1);
4342 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 1, 19, -1);
4343 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 1, 20, -1);
4344 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 10, 0, 20);
4345 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 10, 1, -10);
4346 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 10, 5, -10);
4347 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 10, 9, -10);
4348 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 10, 10, -10);
4349 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 10, 11, -10);
4350 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 19, 0, 20);
4351 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 19, 1, -19);
4352 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 19, 2, -19);
4353 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 20, 0, 20);
4354 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 20, 1, 20);
4355 test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 21, 0, 0);
4356 test(S("abcdefghijklmnopqrst"), 0, 21, SV(""), 0, 0, 20);
4357 test(S("abcdefghijklmnopqrst"), 0, 21, SV(""), 0, 1, 20);
4358 test(S("abcdefghijklmnopqrst"), 0, 21, SV(""), 1, 0, 0);
4359 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 0, 0, 20);
4360 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 0, 1, 19);
4361 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 0, 2, 18);
4362 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 0, 4, 16);
4363 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 0, 5, 15);
4364 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 0, 6, 15);
4365 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 1, 0, 20);
4366 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 1, 1, -1);
4367 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 1, 2, -1);
4368 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 1, 3, -1);
4369 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 1, 4, -1);
4370 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 1, 5, -1);
4371 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 2, 0, 20);
4372 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 2, 1, -2);
4373 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 2, 2, -2);
4374 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 2, 3, -2);
4375 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 2, 4, -2);
4376 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 4, 0, 20);
4377 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 4, 1, -4);
4378 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 4, 2, -4);
4379 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 5, 0, 20);
4380 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 5, 1, 20);
4381 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 6, 0, 0);
4382 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 0, 0, 20);
4383 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 0, 1, 19);
4384 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 0, 5, 15);
4385 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 0, 9, 11);
4388 template <class S, class SV>
4391 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 0, 10, 10);
4392 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 0, 11, 10);
4393 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 1, 0, 20);
4394 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 1, 1, -1);
4395 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 1, 4, -1);
4396 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 1, 8, -1);
4397 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 1, 9, -1);
4398 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 1, 10, -1);
4399 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 5, 0, 20);
4400 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 5, 1, -5);
4401 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 5, 2, -5);
4402 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 5, 4, -5);
4403 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 5, 5, -5);
4404 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 5, 6, -5);
4405 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 9, 0, 20);
4406 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 9, 1, -9);
4407 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 9, 2, -9);
4408 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 10, 0, 20);
4409 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 10, 1, 20);
4410 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 11, 0, 0);
4411 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 0, 0, 20);
4412 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 0, 1, 19);
4413 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 0, 10, 10);
4414 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 0, 19, 1);
4415 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 0, 20, 0);
4416 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 0, 21, 0);
4417 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 1, 0, 20);
4418 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 1, 1, -1);
4419 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 1, 9, -1);
4420 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 1, 18, -1);
4421 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 1, 19, -1);
4422 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 1, 20, -1);
4423 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 10, 0, 20);
4424 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 10, 1, -10);
4425 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 10, 5, -10);
4426 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 10, 9, -10);
4427 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 10, 10, -10);
4428 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 10, 11, -10);
4429 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 19, 0, 20);
4430 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 19, 1, -19);
4431 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 19, 2, -19);
4432 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 20, 0, 20);
4433 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 20, 1, 20);
4434 test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 21, 0, 0);
4435 test(S("abcdefghijklmnopqrst"), 1, 0, SV(""), 0, 0, 0);
4436 test(S("abcdefghijklmnopqrst"), 1, 0, SV(""), 0, 1, 0);
4437 test(S("abcdefghijklmnopqrst"), 1, 0, SV(""), 1, 0, 0);
4438 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 0, 0, 0);
4439 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 0, 1, -1);
4440 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 0, 2, -2);
4441 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 0, 4, -4);
4442 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 0, 5, -5);
4443 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 0, 6, -5);
4444 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 1, 0, 0);
4445 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 1, 1, -1);
4446 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 1, 2, -2);
4447 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 1, 3, -3);
4448 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 1, 4, -4);
4449 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 1, 5, -4);
4450 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 2, 0, 0);
4451 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 2, 1, -1);
4452 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 2, 2, -2);
4453 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 2, 3, -3);
4454 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 2, 4, -3);
4455 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 4, 0, 0);
4456 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 4, 1, -1);
4457 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 4, 2, -1);
4458 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 5, 0, 0);
4459 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 5, 1, 0);
4460 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 6, 0, 0);
4461 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 0, 0, 0);
4462 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 0, 1, -1);
4463 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 0, 5, -5);
4464 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 0, 9, -9);
4465 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 0, 10, -10);
4466 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 0, 11, -10);
4467 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 1, 0, 0);
4468 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 1, 1, -1);
4469 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 1, 4, -4);
4470 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 1, 8, -8);
4471 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 1, 9, -9);
4472 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 1, 10, -9);
4473 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 5, 0, 0);
4474 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 5, 1, -1);
4475 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 5, 2, -2);
4476 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 5, 4, -4);
4477 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 5, 5, -5);
4478 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 5, 6, -5);
4479 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 9, 0, 0);
4480 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 9, 1, -1);
4481 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 9, 2, -1);
4482 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 10, 0, 0);
4483 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 10, 1, 0);
4484 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 11, 0, 0);
4485 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
4486 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
4487 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
4488 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
4489 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
4490 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
4493 template <class S, class SV>
4496 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
4497 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
4498 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
4499 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
4500 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
4501 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
4502 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
4503 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
4504 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
4505 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
4506 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
4507 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
4508 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
4509 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
4510 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
4511 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
4512 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
4513 test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
4514 test(S("abcdefghijklmnopqrst"), 1, 1, SV(""), 0, 0, 1);
4515 test(S("abcdefghijklmnopqrst"), 1, 1, SV(""), 0, 1, 1);
4516 test(S("abcdefghijklmnopqrst"), 1, 1, SV(""), 1, 0, 0);
4517 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 0, 0, 1);
4518 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 0, 1, 1);
4519 test(S("abcdefghijklmnopqrst"), 1, 1, SV
4520 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 0, 4, 1);
4521 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 0, 5, 1);
4522 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 0, 6, 1);
4523 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 1, 0, 1);
4524 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 1, 1, 0);
4525 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 1, 2, -1);
4526 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 1, 3, -2);
4527 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 1, 4, -3);
4528 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 1, 5, -3);
4529 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 2, 0, 1);
4530 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 2, 1, -1);
4531 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 2, 2, -1);
4532 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 2, 3, -1);
4533 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 2, 4, -1);
4534 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 4, 0, 1);
4535 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 4, 1, -3);
4536 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 4, 2, -3);
4537 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 5, 0, 1);
4538 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 5, 1, 1);
4539 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 6, 0, 0);
4540 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 0, 0, 1);
4541 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 0, 1, 1);
4542 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 0, 5, 1);
4543 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 0, 9, 1);
4544 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 0, 10, 1);
4545 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 0, 11, 1);
4546 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 1, 0, 1);
4547 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 1, 1, 0);
4548 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 1, 4, -3);
4549 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 1, 8, -7);
4550 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 1, 9, -8);
4551 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 1, 10, -8);
4552 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 5, 0, 1);
4553 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 5, 1, -4);
4554 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 5, 2, -4);
4555 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 5, 4, -4);
4556 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 5, 5, -4);
4557 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 5, 6, -4);
4558 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 9, 0, 1);
4559 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 9, 1, -8);
4560 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 9, 2, -8);
4561 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 10, 0, 1);
4562 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 10, 1, 1);
4563 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 11, 0, 0);
4564 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 0, 1);
4565 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 1, 1);
4566 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 10, 1);
4567 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 19, 1);
4568 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 20, 1);
4569 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 21, 1);
4570 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 0, 1);
4571 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 1, 0);
4572 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 9, -8);
4573 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 18, -17);
4574 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 19, -18);
4575 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 20, -18);
4576 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 0, 1);
4577 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 1, -9);
4578 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 5, -9);
4579 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 9, -9);
4580 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 10, -9);
4581 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 11, -9);
4582 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 19, 0, 1);
4583 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 19, 1, -18);
4584 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 19, 2, -18);
4585 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 20, 0, 1);
4586 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 20, 1, 1);
4587 test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
4588 test(S("abcdefghijklmnopqrst"), 1, 9, SV(""), 0, 0, 9);
4589 test(S("abcdefghijklmnopqrst"), 1, 9, SV(""), 0, 1, 9);
4590 test(S("abcdefghijklmnopqrst"), 1, 9, SV(""), 1, 0, 0);
4591 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 0, 0, 9);
4592 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 0, 1, 1);
4593 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 0, 2, 1);
4594 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 0, 4, 1);
4595 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 0, 5, 1);
4598 template <class S, class SV>
4601 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 0, 6, 1);
4602 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 1, 0, 9);
4603 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 1, 1, 8);
4604 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 1, 2, 7);
4605 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 1, 3, 6);
4606 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 1, 4, 5);
4607 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 1, 5, 5);
4608 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 2, 0, 9);
4609 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 2, 1, -1);
4610 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 2, 2, -1);
4611 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 2, 3, -1);
4612 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 2, 4, -1);
4613 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 4, 0, 9);
4614 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 4, 1, -3);
4615 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 4, 2, -3);
4616 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 5, 0, 9);
4617 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 5, 1, 9);
4618 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 6, 0, 0);
4619 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 0, 0, 9);
4620 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 0, 1, 1);
4621 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 0, 5, 1);
4622 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 0, 9, 1);
4623 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 0, 10, 1);
4624 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 0, 11, 1);
4625 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 1, 0, 9);
4626 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 1, 1, 8);
4627 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 1, 4, 5);
4628 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 1, 8, 1);
4629 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 1, 9, 0);
4630 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 1, 10, 0);
4631 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 5, 0, 9);
4632 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 5, 1, -4);
4633 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 5, 2, -4);
4634 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 5, 4, -4);
4635 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 5, 5, -4);
4636 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 5, 6, -4);
4637 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 9, 0, 9);
4638 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 9, 1, -8);
4639 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 9, 2, -8);
4640 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 10, 0, 9);
4641 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 10, 1, 9);
4642 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 11, 0, 0);
4643 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 0, 0, 9);
4644 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 0, 1, 1);
4645 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 0, 10, 1);
4646 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 0, 19, 1);
4647 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 0, 20, 1);
4648 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 0, 21, 1);
4649 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 1, 0, 9);
4650 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 1, 1, 8);
4651 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 1, 9, 0);
4652 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 1, 18, -9);
4653 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 1, 19, -10);
4654 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 1, 20, -10);
4655 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 10, 0, 9);
4656 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 10, 1, -9);
4657 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 10, 5, -9);
4658 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 10, 9, -9);
4659 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 10, 10, -9);
4660 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 10, 11, -9);
4661 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 19, 0, 9);
4662 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 19, 1, -18);
4663 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 19, 2, -18);
4664 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 20, 0, 9);
4665 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 20, 1, 9);
4666 test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 21, 0, 0);
4667 test(S("abcdefghijklmnopqrst"), 1, 18, SV(""), 0, 0, 18);
4668 test(S("abcdefghijklmnopqrst"), 1, 18, SV(""), 0, 1, 18);
4669 test(S("abcdefghijklmnopqrst"), 1, 18, SV(""), 1, 0, 0);
4670 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 0, 0, 18);
4671 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 0, 1, 1);
4672 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 0, 2, 1);
4673 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 0, 4, 1);
4674 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 0, 5, 1);
4675 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 0, 6, 1);
4676 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 1, 0, 18);
4677 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 1, 1, 17);
4678 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 1, 2, 16);
4679 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 1, 3, 15);
4680 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 1, 4, 14);
4681 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 1, 5, 14);
4682 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 2, 0, 18);
4683 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 2, 1, -1);
4684 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 2, 2, -1);
4685 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 2, 3, -1);
4686 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 2, 4, -1);
4687 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 4, 0, 18);
4688 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 4, 1, -3);
4689 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 4, 2, -3);
4690 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 5, 0, 18);
4691 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 5, 1, 18);
4692 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 6, 0, 0);
4693 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 0, 0, 18);
4694 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 0, 1, 1);
4695 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 0, 5, 1);
4696 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 0, 9, 1);
4697 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 0, 10, 1);
4698 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 0, 11, 1);
4699 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 1, 0, 18);
4700 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 1, 1, 17);
4703 template <class S, class SV>
4706 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 1, 4, 14);
4707 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 1, 8, 10);
4708 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 1, 9, 9);
4709 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 1, 10, 9);
4710 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 5, 0, 18);
4711 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 5, 1, -4);
4712 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 5, 2, -4);
4713 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 5, 4, -4);
4714 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 5, 5, -4);
4715 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 5, 6, -4);
4716 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 9, 0, 18);
4717 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 9, 1, -8);
4718 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 9, 2, -8);
4719 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 10, 0, 18);
4720 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 10, 1, 18);
4721 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 11, 0, 0);
4722 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 0, 0, 18);
4723 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 0, 1, 1);
4724 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 0, 10, 1);
4725 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 0, 19, 1);
4726 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 0, 20, 1);
4727 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 0, 21, 1);
4728 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 1, 0, 18);
4729 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 1, 1, 17);
4730 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 1, 9, 9);
4731 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 1, 18, 0);
4732 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 1, 19, -1);
4733 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 1, 20, -1);
4734 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 10, 0, 18);
4735 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 10, 1, -9);
4736 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 10, 5, -9);
4737 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 10, 9, -9);
4738 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 10, 10, -9);
4739 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 10, 11, -9);
4740 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 19, 0, 18);
4741 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 19, 1, -18);
4742 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 19, 2, -18);
4743 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 20, 0, 18);
4744 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 20, 1, 18);
4745 test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 21, 0, 0);
4746 test(S("abcdefghijklmnopqrst"), 1, 19, SV(""), 0, 0, 19);
4747 test(S("abcdefghijklmnopqrst"), 1, 19, SV(""), 0, 1, 19);
4748 test(S("abcdefghijklmnopqrst"), 1, 19, SV(""), 1, 0, 0);
4749 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 0, 0, 19);
4750 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 0, 1, 1);
4751 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 0, 2, 1);
4752 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 0, 4, 1);
4753 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 0, 5, 1);
4754 SV("abcde"), 0, 6, 1);
4755 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 1, 0, 19);
4756 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 1, 1, 18);
4757 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 1, 2, 17);
4758 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 1, 3, 16);
4759 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 1, 4, 15);
4760 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 1, 5, 15);
4761 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 2, 0, 19);
4762 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 2, 1, -1);
4763 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 2, 2, -1);
4764 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 2, 3, -1);
4765 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 2, 4, -1);
4766 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 4, 0, 19);
4767 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 4, 1, -3);
4768 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 4, 2, -3);
4769 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 5, 0, 19);
4770 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 5, 1, 19);
4771 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 6, 0, 0);
4772 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 0, 0, 19);
4773 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 0, 1, 1);
4774 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 0, 5, 1);
4775 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 0, 9, 1);
4776 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 0, 10, 1);
4777 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 0, 11, 1);
4778 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 1, 0, 19);
4779 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 1, 1, 18);
4780 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 1, 4, 15);
4781 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 1, 8, 11);
4782 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 1, 9, 10);
4783 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 1, 10, 10);
4784 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 5, 0, 19);
4785 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 5, 1, -4);
4786 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 5, 2, -4);
4787 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 5, 4, -4);
4788 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 5, 5, -4);
4789 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 5, 6, -4);
4790 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 9, 0, 19);
4791 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 9, 1, -8);
4792 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 9, 2, -8);
4793 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 10, 0, 19);
4794 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 10, 1, 19);
4795 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 11, 0, 0);
4796 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 0, 0, 19);
4797 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 0, 1, 1);
4798 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 0, 10, 1);
4799 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 0, 19, 1);
4800 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 0, 20, 1);
4801 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 0, 21, 1);
4802 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 1, 0, 19);
4803 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 1, 1, 18);
4804 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 1, 9, 10);
4805 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 1, 18, 1);
4808 template <class S, class SV>
4811 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 1, 19, 0);
4812 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 1, 20, 0);
4813 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 10, 0, 19);
4814 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 10, 1, -9);
4815 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 10, 5, -9);
4816 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 10, 9, -9);
4817 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 10, 10, -9);
4818 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 10, 11, -9);
4819 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 19, 0, 19);
4820 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 19, 1, -18);
4821 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 19, 2, -18);
4822 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 20, 0, 19);
4823 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 20, 1, 19);
4824 test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 21, 0, 0);
4825 test(S("abcdefghijklmnopqrst"), 1, 20, SV(""), 0, 0, 19);
4826 test(S("abcdefghijklmnopqrst"), 1, 20, SV(""), 0, 1, 19);
4827 test(S("abcdefghijklmnopqrst"), 1, 20, SV(""), 1, 0, 0);
4828 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 0, 0, 19);
4829 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 0, 1, 1);
4830 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 0, 2, 1);
4831 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 0, 4, 1);
4832 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 0, 5, 1);
4833 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 0, 6, 1);
4834 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 1, 0, 19);
4835 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 1, 1, 18);
4836 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 1, 2, 17);
4837 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 1, 3, 16);
4838 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 1, 4, 15);
4839 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 1, 5, 15);
4840 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 2, 0, 19);
4841 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 2, 1, -1);
4842 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 2, 2, -1);
4843 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 2, 3, -1);
4844 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 2, 4, -1);
4845 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 4, 0, 19);
4846 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 4, 1, -3);
4847 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 4, 2, -3);
4848 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 5, 0, 19);
4849 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 5, 1, 19);
4850 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 6, 0, 0);
4851 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 0, 0, 19);
4852 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 0, 1, 1);
4853 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 0, 5, 1);
4854 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 0, 9, 1);
4855 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 0, 10, 1);
4856 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 0, 11, 1);
4857 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 1, 0, 19);
4858 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 1, 1, 18);
4859 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 1, 4, 15);
4860 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 1, 8, 11);
4861 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 1, 9, 10);
4862 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 1, 10, 10);
4863 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 5, 0, 19);
4864 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 5, 1, -4);
4865 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 5, 2, -4);
4866 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 5, 4, -4);
4867 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 5, 5, -4);
4868 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 5, 6, -4);
4869 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 9, 0, 19);
4870 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 9, 1, -8);
4871 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 9, 2, -8);
4872 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 10, 0, 19);
4873 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 10, 1, 19);
4874 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 11, 0, 0);
4875 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 0, 0, 19);
4876 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 0, 1, 1);
4877 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 0, 10, 1);
4878 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 0, 19, 1);
4879 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 0, 20, 1);
4880 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 0, 21, 1);
4881 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 1, 0, 19);
4882 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 1, 1, 18);
4883 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 1, 9, 10);
4884 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 1, 18, 1);
4885 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 1, 19, 0);
4886 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 1, 20, 0);
4887 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 10, 0, 19);
4888 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 10, 1, -9);
4889 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 10, 5, -9);
4890 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 10, 9, -9);
4891 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 10, 10, -9);
4892 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 10, 11, -9);
4893 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 19, 0, 19);
4894 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 19, 1, -18);
4895 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 19, 2, -18);
4896 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 20, 0, 19);
4897 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 20, 1, 19);
4898 test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 21, 0, 0);
4899 test(S("abcdefghijklmnopqrst"), 10, 0, SV(""), 0, 0, 0);
4900 test(S("abcdefghijklmnopqrst"), 10, 0, SV(""), 0, 1, 0);
4901 test(S("abcdefghijklmnopqrst"), 10, 0, SV(""), 1, 0, 0);
4902 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 0, 0, 0);
4903 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 0, 1, -1);
4904 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 0, 2, -2);
4905 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 0, 4, -4);
4906 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 0, 5, -5);
4907 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 0, 6, -5);
4908 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 1, 0, 0);
4909 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 1, 1, -1);
4910 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 1, 2, -2);
4913 template <class S, class SV>
4916 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 1, 3, -3);
4917 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 1, 4, -4);
4918 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 1, 5, -4);
4919 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 2, 0, 0);
4920 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 2, 1, -1);
4921 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 2, 2, -2);
4922 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 2, 3, -3);
4923 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 2, 4, -3);
4924 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 4, 0, 0);
4925 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 4, 1, -1);
4926 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 4, 2, -1);
4927 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 5, 0, 0);
4928 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 5, 1, 0);
4929 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 6, 0, 0);
4930 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 0, 0, 0);
4931 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 0, 1, -1);
4932 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 0, 5, -5);
4933 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 0, 9, -9);
4934 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 0, 10, -10);
4935 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 0, 11, -10);
4936 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 1, 0, 0);
4937 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 1, 1, -1);
4938 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 1, 4, -4);
4939 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 1, 8, -8);
4940 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 1, 9, -9);
4941 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 1, 10, -9);
4942 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 5, 0, 0);
4943 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 5, 1, -1);
4944 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 5, 2, -2);
4945 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 5, 4, -4);
4946 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 5, 5, -5);
4947 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 5, 6, -5);
4948 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 9, 0, 0);
4949 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 9, 1, -1);
4950 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 9, 2, -1);
4951 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 10, 0, 0);
4952 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 10, 1, 0);
4953 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 11, 0, 0);
4954 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
4955 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
4956 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
4957 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
4958 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
4959 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
4960 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
4961 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
4962 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
4963 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
4964 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
4965 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
4966 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
4967 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
4968 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
4969 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
4970 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
4971 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
4972 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
4973 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
4974 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
4975 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
4976 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
4977 test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
4978 test(S("abcdefghijklmnopqrst"), 10, 1, SV(""), 0, 0, 1);
4979 test(S("abcdefghijklmnopqrst"), 10, 1, SV(""), 0, 1, 1);
4980 test(S("abcdefghijklmnopqrst"), 10, 1, SV(""), 1, 0, 0);
4981 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 0, 0, 1);
4982 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 0, 1, 10);
4983 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 0, 2, 10);
4984 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 0, 4, 10);
4985 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 0, 5, 10);
4986 SV("abcde"), 0, 6, 10);
4987 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 1, 0, 1);
4988 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 1, 1, 9);
4989 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 1, 2, 9);
4990 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 1, 3, 9);
4991 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 1, 4, 9);
4992 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 1, 5, 9);
4993 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 2, 0, 1);
4994 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 2, 1, 8);
4995 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 2, 2, 8);
4996 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 2, 3, 8);
4997 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 2, 4, 8);
4998 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 4, 0, 1);
4999 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 4, 1, 6);
5000 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 4, 2, 6);
5001 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 5, 0, 1);
5002 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 5, 1, 1);
5003 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 6, 0, 0);
5004 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 0, 0, 1);
5005 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 0, 1, 10);
5006 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 0, 5, 10);
5007 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 0, 9, 10);
5008 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 0, 10, 10);
5009 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 0, 11, 10);
5010 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 1, 0, 1);
5011 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 1, 1, 9);
5012 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 1, 4, 9);
5013 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 1, 8, 9);
5014 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 1, 9, 9);
5015 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 1, 10, 9);
5018 template <class S, class SV>
5021 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 5, 0, 1);
5022 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 5, 1, 5);
5023 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 5, 2, 5);
5024 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 5, 4, 5);
5025 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 5, 5, 5);
5026 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 5, 6, 5);
5027 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 9, 0, 1);
5028 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 9, 1, 1);
5029 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 9, 2, 1);
5030 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 10, 0, 1);
5031 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 10, 1, 1);
5032 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 11, 0, 0);
5033 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 0, 0, 1);
5034 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 0, 1, 10);
5035 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 0, 10, 10);
5036 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 0, 19, 10);
5037 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 0, 20, 10);
5038 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 0, 21, 10);
5039 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 1, 0, 1);
5040 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 1, 1, 9);
5041 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 1, 9, 9);
5042 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 1, 18, 9);
5043 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 1, 19, 9);
5044 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 1, 20, 9);
5045 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 10, 0, 1);
5046 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 10, 1, 0);
5047 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 10, 5, -4);
5048 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 10, 9, -8);
5049 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 10, 10, -9);
5050 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 10, 11, -9);
5051 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 19, 0, 1);
5052 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 19, 1, -9);
5053 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 19, 2, -9);
5054 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 20, 0, 1);
5055 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 20, 1, 1);
5056 test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
5057 test(S("abcdefghijklmnopqrst"), 10, 5, SV(""), 0, 0, 5);
5058 test(S("abcdefghijklmnopqrst"), 10, 5, SV(""), 0, 1, 5);
5059 test(S("abcdefghijklmnopqrst"), 10, 5, SV(""), 1, 0, 0);
5060 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 0, 0, 5);
5061 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 0, 1, 10);
5062 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 0, 2, 10);
5063 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 0, 4, 10);
5064 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 0, 5, 10);
5065 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 0, 6, 10);
5066 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 1, 0, 5);
5067 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 1, 1, 9);
5068 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 1, 2, 9);
5069 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 1, 3, 9);
5070 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 1, 4, 9);
5071 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 1, 5, 9);
5072 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 2, 0, 5);
5073 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 2, 1, 8);
5074 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 2, 2, 8);
5075 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 2, 3, 8);
5076 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 2, 4, 8);
5077 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 4, 0, 5);
5078 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 4, 1, 6);
5079 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 4, 2, 6);
5080 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 5, 0, 5);
5081 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 5, 1, 5);
5082 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 6, 0, 0);
5083 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 0, 0, 5);
5084 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 0, 1, 10);
5085 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 0, 5, 10);
5086 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 0, 9, 10);
5087 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 0, 10, 10);
5088 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 0, 11, 10);
5089 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 1, 0, 5);
5090 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 1, 1, 9);
5091 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 1, 4, 9);
5092 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 1, 8, 9);
5093 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 1, 9, 9);
5094 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 1, 10, 9);
5095 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 5, 0, 5);
5096 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 5, 1, 5);
5097 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 5, 2, 5);
5098 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 5, 4, 5);
5099 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 5, 5, 5);
5100 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 5, 6, 5);
5101 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 9, 0, 5);
5102 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 9, 1, 1);
5103 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 9, 2, 1);
5104 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 10, 0, 5);
5105 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 10, 1, 5);
5106 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 11, 0, 0);
5107 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 0, 0, 5);
5108 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 0, 1, 10);
5109 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 0, 10, 10);
5110 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 0, 19, 10);
5111 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 0, 20, 10);
5112 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 0, 21, 10);
5113 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 1, 0, 5);
5114 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 1, 1, 9);
5115 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 1, 9, 9);
5116 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 1, 18, 9);
5117 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 1, 19, 9);
5118 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 1, 20, 9);
5119 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 10, 0, 5);
5120 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 10, 1, 4);
5123 template <class S, class SV>
5126 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 10, 5, 0);
5127 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 10, 9, -4);
5128 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 10, 10, -5);
5129 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 10, 11, -5);
5130 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 19, 0, 5);
5131 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 19, 1, -9);
5132 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 19, 2, -9);
5133 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 20, 0, 5);
5134 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 20, 1, 5);
5135 test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 21, 0, 0);
5136 test(S("abcdefghijklmnopqrst"), 10, 9, SV(""), 0, 0, 9);
5137 test(S("abcdefghijklmnopqrst"), 10, 9, SV(""), 0, 1, 9);
5138 test(S("abcdefghijklmnopqrst"), 10, 9, SV(""), 1, 0, 0);
5139 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 0, 0, 9);
5140 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 0, 1, 10);
5141 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 0, 2, 10);
5142 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 0, 4, 10);
5143 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 0, 5, 10);
5144 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 0, 6, 10);
5145 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 1, 0, 9);
5146 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 1, 1, 9);
5147 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 1, 2, 9);
5148 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 1, 3, 9);
5149 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 1, 4, 9);
5150 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 1, 5, 9);
5151 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 2, 0, 9);
5152 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 2, 1, 8);
5153 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 2, 2, 8);
5154 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 2, 3, 8);
5155 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 2, 4, 8);
5156 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 4, 0, 9);
5157 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 4, 1, 6);
5158 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 4, 2, 6);
5159 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 5, 0, 9);
5160 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 5, 1, 9);
5161 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 6, 0, 0);
5162 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 0, 0, 9);
5163 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 0, 1, 10);
5164 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 0, 5, 10);
5165 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 0, 9, 10);
5166 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 0, 10, 10);
5167 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 0, 11, 10);
5168 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 1, 0, 9);
5169 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 1, 1, 9);
5170 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 1, 4, 9);
5171 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 1, 8, 9);
5172 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 1, 9, 9);
5173 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 1, 10, 9);
5174 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 5, 0, 9);
5175 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 5, 1, 5);
5176 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 5, 2, 5);
5177 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 5, 4, 5);
5178 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 5, 5, 5);
5179 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 5, 6, 5);
5180 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 9, 0, 9);
5181 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 9, 1, 1);
5182 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 9, 2, 1);
5183 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 10, 0, 9);
5184 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 10, 1, 9);
5185 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 11, 0, 0);
5186 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 0, 0, 9);
5187 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 0, 1, 10);
5188 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 0, 10, 10);
5189 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 0, 19, 10);
5190 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 0, 20, 10);
5191 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 0, 21, 10);
5192 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 1, 0, 9);
5193 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 1, 1, 9);
5194 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 1, 9, 9);
5195 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 1, 18, 9);
5196 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 1, 19, 9);
5197 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 1, 20, 9);
5198 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 10, 0, 9);
5199 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 10, 1, 8);
5200 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 10, 5, 4);
5201 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 10, 9, 0);
5202 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 10, 10, -1);
5203 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 10, 11, -1);
5204 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 19, 0, 9);
5205 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 19, 1, -9);
5206 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 19, 2, -9);
5207 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 20, 0, 9);
5208 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 20, 1, 9);
5209 test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 21, 0, 0);
5210 test(S("abcdefghijklmnopqrst"), 10, 10, SV(""), 0, 0, 10);
5211 test(S("abcdefghijklmnopqrst"), 10, 10, SV(""), 0, 1, 10);
5212 test(S("abcdefghijklmnopqrst"), 10, 10, SV(""), 1, 0, 0);
5213 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 0, 0, 10);
5214 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 0, 1, 10);
5215 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 0, 2, 10);
5216 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 0, 4, 10);
5217 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 0, 5, 10);
5218 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 0, 6, 10);
5219 SV("abcde"), 1, 0, 10);
5220 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 1, 1, 9);
5221 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 1, 2, 9);
5222 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 1, 3, 9);
5223 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 1, 4, 9);
5224 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 1, 5, 9);
5225 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 2, 0, 10);
5228 template <class S, class SV>
5231 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 2, 1, 8);
5232 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 2, 2, 8);
5233 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 2, 3, 8);
5234 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 2, 4, 8);
5235 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 4, 0, 10);
5236 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 4, 1, 6);
5237 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 4, 2, 6);
5238 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 5, 0, 10);
5239 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 5, 1, 10);
5240 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 6, 0, 0);
5241 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 0, 0, 10);
5242 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 0, 1, 10);
5243 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 0, 5, 10);
5244 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 0, 9, 10);
5245 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 0, 10, 10);
5246 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 0, 11, 10);
5247 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 1, 0, 10);
5248 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 1, 1, 9);
5249 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 1, 4, 9);
5250 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 1, 8, 9);
5251 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 1, 9, 9);
5252 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 1, 10, 9);
5253 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 5, 0, 10);
5254 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 5, 1, 5);
5255 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 5, 2, 5);
5256 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 5, 4, 5);
5257 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 5, 5, 5);
5258 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 5, 6, 5);
5259 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 9, 0, 10);
5260 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 9, 1, 1);
5261 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 9, 2, 1);
5262 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 10, 0, 10);
5263 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 10, 1, 10);
5264 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 11, 0, 0);
5265 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 0, 0, 10);
5266 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 0, 1, 10);
5267 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 0, 10, 10);
5268 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 0, 19, 10);
5269 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 0, 20, 10);
5270 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 0, 21, 10);
5271 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 1, 0, 10);
5272 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 1, 1, 9);
5273 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 1, 9, 9);
5274 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 1, 18, 9);
5275 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 1, 19, 9);
5276 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 1, 20, 9);
5277 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 10, 0, 10);
5278 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 10, 1, 9);
5279 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 10, 5, 5);
5280 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 10, 9, 1);
5281 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 10, 10, 0);
5282 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 10, 11, 0);
5283 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 19, 0, 10);
5284 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 19, 1, -9);
5285 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 19, 2, -9);
5286 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 20, 0, 10);
5287 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 20, 1, 10);
5288 test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 21, 0, 0);
5289 test(S("abcdefghijklmnopqrst"), 10, 11, SV(""), 0, 0, 10);
5290 test(S("abcdefghijklmnopqrst"), 10, 11, SV(""), 0, 1, 10);
5291 test(S("abcdefghijklmnopqrst"), 10, 11, SV(""), 1, 0, 0);
5292 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 0, 0, 10);
5293 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 0, 1, 10);
5294 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 0, 2, 10);
5295 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 0, 4, 10);
5296 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 0, 5, 10);
5297 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 0, 6, 10);
5298 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 1, 0, 10);
5299 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 1, 1, 9);
5300 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 1, 2, 9);
5301 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 1, 3, 9);
5302 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 1, 4, 9);
5303 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 1, 5, 9);
5304 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 2, 0, 10);
5305 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 2, 1, 8);
5306 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 2, 2, 8);
5307 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 2, 3, 8);
5308 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 2, 4, 8);
5309 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 4, 0, 10);
5310 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 4, 1, 6);
5311 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 4, 2, 6);
5312 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 5, 0, 10);
5313 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 5, 1, 10);
5314 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 6, 0, 0);
5315 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 0, 0, 10);
5316 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 0, 1, 10);
5317 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 0, 5, 10);
5318 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 0, 9, 10);
5319 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 0, 10, 10);
5320 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 0, 11, 10);
5321 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 1, 0, 10);
5322 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 1, 1, 9);
5323 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 1, 4, 9);
5324 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 1, 8, 9);
5325 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 1, 9, 9);
5326 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 1, 10, 9);
5327 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 5, 0, 10);
5328 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 5, 1, 5);
5329 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 5, 2, 5);
5330 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 5, 4, 5);
5333 template <class S, class SV>
5336 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 5, 5, 5);
5337 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 5, 6, 5);
5338 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 9, 0, 10);
5339 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 9, 1, 1);
5340 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 9, 2, 1);
5341 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 10, 0, 10);
5342 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 10, 1, 10);
5343 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 11, 0, 0);
5344 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 0, 0, 10);
5345 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 0, 1, 10);
5346 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 0, 10, 10);
5347 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 0, 19, 10);
5348 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 0, 20, 10);
5349 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 0, 21, 10);
5350 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 1, 0, 10);
5351 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 1, 1, 9);
5352 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 1, 9, 9);
5353 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 1, 18, 9);
5354 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 1, 19, 9);
5355 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 1, 20, 9);
5356 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 10, 0, 10);
5357 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 10, 1, 9);
5358 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 10, 5, 5);
5359 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 10, 9, 1);
5360 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 10, 10, 0);
5361 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 10, 11, 0);
5362 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 19, 0, 10);
5363 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 19, 1, -9);
5364 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 19, 2, -9);
5365 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 20, 0, 10);
5366 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 20, 1, 10);
5367 test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 21, 0, 0);
5368 test(S("abcdefghijklmnopqrst"), 19, 0, SV(""), 0, 0, 0);
5369 test(S("abcdefghijklmnopqrst"), 19, 0, SV(""), 0, 1, 0);
5370 test(S("abcdefghijklmnopqrst"), 19, 0, SV(""), 1, 0, 0);
5371 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 0, 0, 0);
5372 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 0, 1, -1);
5373 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 0, 2, -2);
5374 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 0, 4, -4);
5375 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 0, 5, -5);
5376 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 0, 6, -5);
5377 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 1, 0, 0);
5378 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 1, 1, -1);
5379 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 1, 2, -2);
5380 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 1, 3, -3);
5381 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 1, 4, -4);
5382 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 1, 5, -4);
5383 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 2, 0, 0);
5384 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 2, 1, -1);
5385 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 2, 2, -2);
5386 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 2, 3, -3);
5387 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 2, 4, -3);
5388 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 4, 0, 0);
5389 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 4, 1, -1);
5390 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 4, 2, -1);
5391 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 5, 0, 0);
5392 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 5, 1, 0);
5393 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 6, 0, 0);
5394 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 0, 0, 0);
5395 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 0, 1, -1);
5396 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 0, 5, -5);
5397 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 0, 9, -9);
5398 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 0, 10, -10);
5399 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 0, 11, -10);
5400 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 1, 0, 0);
5401 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 1, 1, -1);
5402 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 1, 4, -4);
5403 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 1, 8, -8);
5404 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 1, 9, -9);
5405 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 1, 10, -9);
5406 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 5, 0, 0);
5407 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 5, 1, -1);
5408 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 5, 2, -2);
5409 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 5, 4, -4);
5410 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 5, 5, -5);
5411 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 5, 6, -5);
5412 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 9, 0, 0);
5413 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 9, 1, -1);
5414 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 9, 2, -1);
5415 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 10, 0, 0);
5416 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 10, 1, 0);
5417 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 11, 0, 0);
5418 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
5419 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
5420 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
5421 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
5422 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
5423 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
5424 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
5425 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
5426 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
5427 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
5428 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
5429 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
5430 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
5431 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
5432 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
5433 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
5434 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
5435 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
5438 template <class S, class SV>
5441 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
5442 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
5443 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
5444 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
5445 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
5446 test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
5447 test(S("abcdefghijklmnopqrst"), 19, 1, SV(""), 0, 0, 1);
5448 test(S("abcdefghijklmnopqrst"), 19, 1, SV(""), 0, 1, 1);
5449 test(S("abcdefghijklmnopqrst"), 19, 1, SV(""), 1, 0, 0);
5450 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 0, 0, 1);
5451 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 0, 1, 19);
5452 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 0, 2, 19);
5453 test(S("abcdefghijklmnopqrst"), 19, 1, SV
5454 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 0, 5, 19);
5455 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 0, 6, 19);
5456 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 1, 0, 1);
5457 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 1, 1, 18);
5458 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 1, 2, 18);
5459 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 1, 3, 18);
5460 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 1, 4, 18);
5461 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 1, 5, 18);
5462 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 2, 0, 1);
5463 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 2, 1, 17);
5464 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 2, 2, 17);
5465 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 2, 3, 17);
5466 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 2, 4, 17);
5467 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 4, 0, 1);
5468 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 4, 1, 15);
5469 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 4, 2, 15);
5470 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 5, 0, 1);
5471 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 5, 1, 1);
5472 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 6, 0, 0);
5473 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 0, 0, 1);
5474 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 0, 1, 19);
5475 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 0, 5, 19);
5476 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 0, 9, 19);
5477 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 0, 10, 19);
5478 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 0, 11, 19);
5479 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 1, 0, 1);
5480 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 1, 1, 18);
5481 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 1, 4, 18);
5482 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 1, 8, 18);
5483 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 1, 9, 18);
5484 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 1, 10, 18);
5485 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 5, 0, 1);
5486 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 5, 1, 14);
5487 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 5, 2, 14);
5488 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 5, 4, 14);
5489 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 5, 5, 14);
5490 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 5, 6, 14);
5491 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 9, 0, 1);
5492 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 9, 1, 10);
5493 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 9, 2, 10);
5494 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 10, 0, 1);
5495 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 10, 1, 1);
5496 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 11, 0, 0);
5497 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 0, 0, 1);
5498 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 0, 1, 19);
5499 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 0, 10, 19);
5500 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 0, 19, 19);
5501 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 0, 20, 19);
5502 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 0, 21, 19);
5503 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 1, 0, 1);
5504 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 1, 1, 18);
5505 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 1, 9, 18);
5506 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 1, 18, 18);
5507 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 1, 19, 18);
5508 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 1, 20, 18);
5509 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 10, 0, 1);
5510 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 10, 1, 9);
5511 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 10, 5, 9);
5512 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 10, 9, 9);
5513 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 10, 10, 9);
5514 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 10, 11, 9);
5515 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 19, 0, 1);
5516 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 19, 1, 0);
5517 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 19, 2, 0);
5518 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 20, 0, 1);
5519 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 20, 1, 1);
5520 test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
5521 test(S("abcdefghijklmnopqrst"), 19, 2, SV(""), 0, 0, 1);
5522 test(S("abcdefghijklmnopqrst"), 19, 2, SV(""), 0, 1, 1);
5523 test(S("abcdefghijklmnopqrst"), 19, 2, SV(""), 1, 0, 0);
5524 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 0, 0, 1);
5525 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 0, 1, 19);
5526 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 0, 2, 19);
5527 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 0, 4, 19);
5528 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 0, 5, 19);
5529 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 0, 6, 19);
5530 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 1, 0, 1);
5531 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 1, 1, 18);
5532 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 1, 2, 18);
5533 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 1, 3, 18);
5534 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 1, 4, 18);
5535 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 1, 5, 18);
5536 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 2, 0, 1);
5537 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 2, 1, 17);
5538 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 2, 2, 17);
5539 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 2, 3, 17);
5540 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 2, 4, 17);
5543 template <class S, class SV>
5546 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 4, 0, 1);
5547 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 4, 1, 15);
5548 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 4, 2, 15);
5549 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 5, 0, 1);
5550 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 5, 1, 1);
5551 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 6, 0, 0);
5552 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 0, 0, 1);
5553 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 0, 1, 19);
5554 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 0, 5, 19);
5555 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 0, 9, 19);
5556 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 0, 10, 19);
5557 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 0, 11, 19);
5558 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 1, 0, 1);
5559 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 1, 1, 18);
5560 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 1, 4, 18);
5561 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 1, 8, 18);
5562 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 1, 9, 18);
5563 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 1, 10, 18);
5564 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 5, 0, 1);
5565 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 5, 1, 14);
5566 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 5, 2, 14);
5567 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 5, 4, 14);
5568 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 5, 5, 14);
5569 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 5, 6, 14);
5570 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 9, 0, 1);
5571 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 9, 1, 10);
5572 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 9, 2, 10);
5573 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 10, 0, 1);
5574 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 10, 1, 1);
5575 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 11, 0, 0);
5576 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 0, 0, 1);
5577 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 0, 1, 19);
5578 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 0, 10, 19);
5579 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 0, 19, 19);
5580 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 0, 20, 19);
5581 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 0, 21, 19);
5582 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 1, 0, 1);
5583 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 1, 1, 18);
5584 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 1, 9, 18);
5585 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 1, 18, 18);
5586 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 1, 19, 18);
5587 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 1, 20, 18);
5588 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 10, 0, 1);
5589 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 10, 1, 9);
5590 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 10, 5, 9);
5591 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 10, 9, 9);
5592 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 10, 10, 9);
5593 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 10, 11, 9);
5594 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 19, 0, 1);
5595 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 19, 1, 0);
5596 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 19, 2, 0);
5597 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 20, 0, 1);
5598 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 20, 1, 1);
5599 test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 21, 0, 0);
5600 test(S("abcdefghijklmnopqrst"), 20, 0, SV(""), 0, 0, 0);
5601 test(S("abcdefghijklmnopqrst"), 20, 0, SV(""), 0, 1, 0);
5602 test(S("abcdefghijklmnopqrst"), 20, 0, SV(""), 1, 0, 0);
5603 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 0, 0, 0);
5604 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 0, 1, -1);
5605 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 0, 2, -2);
5606 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 0, 4, -4);
5607 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 0, 5, -5);
5608 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 0, 6, -5);
5609 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 1, 0, 0);
5610 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 1, 1, -1);
5611 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 1, 2, -2);
5612 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 1, 3, -3);
5613 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 1, 4, -4);
5614 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 1, 5, -4);
5615 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 2, 0, 0);
5616 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 2, 1, -1);
5617 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 2, 2, -2);
5618 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 2, 3, -3);
5619 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 2, 4, -3);
5620 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 4, 0, 0);
5621 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 4, 1, -1);
5622 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 4, 2, -1);
5623 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 5, 0, 0);
5624 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 5, 1, 0);
5625 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 6, 0, 0);
5626 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 0, 0, 0);
5627 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 0, 1, -1);
5628 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 0, 5, -5);
5629 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 0, 9, -9);
5630 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 0, 10, -10);
5631 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 0, 11, -10);
5632 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 1, 0, 0);
5633 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 1, 1, -1);
5634 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 1, 4, -4);
5635 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 1, 8, -8);
5636 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 1, 9, -9);
5637 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 1, 10, -9);
5638 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 5, 0, 0);
5639 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 5, 1, -1);
5640 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 5, 2, -2);
5641 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 5, 4, -4);
5642 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 5, 5, -5);
5643 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 5, 6, -5);
5644 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 9, 0, 0);
5645 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 9, 1, -1);
5648 template <class S, class SV>
5651 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 9, 2, -1);
5652 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 10, 0, 0);
5653 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 10, 1, 0);
5654 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 11, 0, 0);
5655 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
5656 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
5657 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
5658 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
5659 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
5660 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
5661 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
5662 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
5663 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
5664 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
5665 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
5666 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
5667 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
5668 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
5669 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
5670 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
5671 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
5672 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
5673 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
5674 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
5675 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
5676 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
5677 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
5678 test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
5679 test(S("abcdefghijklmnopqrst"), 20, 1, SV(""), 0, 0, 0);
5680 test(S("abcdefghijklmnopqrst"), 20, 1, SV(""), 0, 1, 0);
5681 test(S("abcdefghijklmnopqrst"), 20, 1, SV(""), 1, 0, 0);
5682 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 0, 0, 0);
5683 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 0, 1, -1);
5684 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 0, 2, -2);
5685 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 0, 4, -4);
5686 SV("abcde"), 0, 5, -5);
5687 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 0, 6, -5);
5688 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 1, 0, 0);
5689 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 1, 1, -1);
5690 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 1, 2, -2);
5691 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 1, 3, -3);
5692 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 1, 4, -4);
5693 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 1, 5, -4);
5694 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 2, 0, 0);
5695 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 2, 1, -1);
5696 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 2, 2, -2);
5697 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 2, 3, -3);
5698 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 2, 4, -3);
5699 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 4, 0, 0);
5700 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 4, 1, -1);
5701 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 4, 2, -1);
5702 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 5, 0, 0);
5703 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 5, 1, 0);
5704 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 6, 0, 0);
5705 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 0, 0, 0);
5706 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 0, 1, -1);
5707 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 0, 5, -5);
5708 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 0, 9, -9);
5709 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 0, 10, -10);
5710 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 0, 11, -10);
5711 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 1, 0, 0);
5712 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 1, 1, -1);
5713 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 1, 4, -4);
5714 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 1, 8, -8);
5715 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 1, 9, -9);
5716 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 1, 10, -9);
5717 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 5, 0, 0);
5718 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 5, 1, -1);
5719 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 5, 2, -2);
5720 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 5, 4, -4);
5721 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 5, 5, -5);
5722 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 5, 6, -5);
5723 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 9, 0, 0);
5724 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 9, 1, -1);
5725 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 9, 2, -1);
5726 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 10, 0, 0);
5727 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 10, 1, 0);
5728 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 11, 0, 0);
5729 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 0, 0, 0);
5730 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 0, 1, -1);
5731 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 0, 10, -10);
5732 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 0, 19, -19);
5733 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 0, 20, -20);
5734 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 0, 21, -20);
5735 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 1, 0, 0);
5736 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 1, 1, -1);
5737 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 1, 9, -9);
5738 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 1, 18, -18);
5739 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 1, 19, -19);
5740 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 1, 20, -19);
5741 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 10, 0, 0);
5742 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 10, 1, -1);
5743 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 10, 5, -5);
5744 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 10, 9, -9);
5745 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 10, 10, -10);
5746 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 10, 11, -10);
5747 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 19, 0, 0);
5748 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 19, 1, -1);
5749 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 19, 2, -1);
5750 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 20, 0, 0);
5753 template <class S, class SV>
5756 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 20, 1, 0);
5757 test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
5758 test(S("abcdefghijklmnopqrst"), 21, 0, SV(""), 0, 0, 0);
5759 test(S("abcdefghijklmnopqrst"), 21, 0, SV(""), 0, 1, 0);
5760 test(S("abcdefghijklmnopqrst"), 21, 0, SV(""), 1, 0, 0);
5761 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 0, 0, 0);
5762 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 0, 1, 0);
5763 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 0, 2, 0);
5764 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 0, 4, 0);
5765 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 0, 5, 0);
5766 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 0, 6, 0);
5767 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 1, 0, 0);
5768 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 1, 1, 0);
5769 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 1, 2, 0);
5770 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 1, 3, 0);
5771 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 1, 4, 0);
5772 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 1, 5, 0);
5773 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 2, 0, 0);
5774 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 2, 1, 0);
5775 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 2, 2, 0);
5776 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 2, 3, 0);
5777 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 2, 4, 0);
5778 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 4, 0, 0);
5779 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 4, 1, 0);
5780 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 4, 2, 0);
5781 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 5, 0, 0);
5782 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 5, 1, 0);
5783 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 6, 0, 0);
5784 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 0, 0, 0);
5785 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 0, 1, 0);
5786 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 0, 5, 0);
5787 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 0, 9, 0);
5788 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 0, 10, 0);
5789 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 0, 11, 0);
5790 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 1, 0, 0);
5791 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 1, 1, 0);
5792 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 1, 4, 0);
5793 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 1, 8, 0);
5794 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 1, 9, 0);
5795 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 1, 10, 0);
5796 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 5, 0, 0);
5797 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 5, 1, 0);
5798 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 5, 2, 0);
5799 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 5, 4, 0);
5800 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 5, 5, 0);
5801 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 5, 6, 0);
5802 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 9, 0, 0);
5803 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 9, 1, 0);
5804 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 9, 2, 0);
5805 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 10, 0, 0);
5806 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 10, 1, 0);
5807 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 11, 0, 0);
5808 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
5809 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 0, 1, 0);
5810 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 0, 10, 0);
5811 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 0, 19, 0);
5812 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 0, 20, 0);
5813 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 0, 21, 0);
5814 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
5815 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 1, 1, 0);
5816 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 1, 9, 0);
5817 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 1, 18, 0);
5818 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 1, 19, 0);
5819 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 1, 20, 0);
5820 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
5821 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 10, 1, 0);
5822 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 10, 5, 0);
5823 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 10, 9, 0);
5824 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 10, 10, 0);
5825 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 10, 11, 0);
5826 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
5827 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 19, 1, 0);
5828 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 19, 2, 0);
5829 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
5830 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
5831 test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
5834 template <class S, class SV>
5837 test_npos(S(""), 0, 0, SV(""), 0, 0);
5838 test_npos(S(""), 0, 0, SV("abcde"), 0, -5);
5839 test_npos(S("abcde"), 0, 0, SV("abcdefghij"), 0, -10);
5840 test_npos(S("abcde"), 0, 0, SV("abcdefghij"), 1, -9);
5841 test_npos(S("abcde"), 0, 0, SV("abcdefghij"), 5, -5);
5848 typedef std::string_view SV;
5849 test0<S, SV>();
5850 test1<S, SV>();
5851 test2<S, SV>();
5852 test3<S, SV>();
5853 test4<S, SV>();
5854 test5<S, SV>();
5855 test6<S, SV>();
5856 test7<S, SV>();
5857 test8<S, SV>();
5858 test9<S, SV>();
5859 test10<S, SV>();
5860 test11<S, SV>();
5861 test12<S, SV>();
5862 test13<S, SV>();
5863 test14<S, SV>();
5864 test15<S, SV>();
5865 test16<S, SV>();
5866 test17<S, SV>();
5867 test18<S, SV>();
5868 test19<S, SV>();
5869 test20<S, SV>();
5870 test21<S, SV>();
5871 test22<S, SV>();
5872 test23<S, SV>();
5873 test24<S, SV>();
5874 test25<S, SV>();
5875 test26<S, SV>();
5876 test27<S, SV>();
5877 test28<S, SV>();
5878 test29<S, SV>();
5879 test30<S, SV>();
5880 test31<S, SV>();
5881 test32<S, SV>();
5882 test33<S, SV>();
5883 test34<S, SV>();
5884 test35<S, SV>();
5885 test36<S, SV>();
5886 test37<S, SV>();
5887 test38<S, SV>();
5888 test39<S, SV>();
5889 test40<S, SV>();
5890 test41<S, SV>();
5891 test42<S, SV>();
5892 test43<S, SV>();
5893 test44<S, SV>();
5894 test45<S, SV>();
5895 test46<S, SV>();
5896 test47<S, SV>();
5897 test48<S, SV>();
5898 test49<S, SV>();
5899 test50<S, SV>();
5900 test51<S, SV>();
5901 test52<S, SV>();
5902 test53<S, SV>();
5903 test54<S, SV>();
5904 test55<S, SV>();
5909 typedef std::basic_string_view<char, std::char_traits<char>> SV;
5910 test0<S, SV>();
5911 test1<S, SV>();
5912 test2<S, SV>();
5913 test3<S, SV>();
5914 test4<S, SV>();
5915 test5<S, SV>();
5916 test6<S, SV>();
5917 test7<S, SV>();
5918 test8<S, SV>();
5919 test9<S, SV>();
5920 test10<S, SV>();
5921 test11<S, SV>();
5922 test12<S, SV>();
5923 test13<S, SV>();
5924 test14<S, SV>();
5925 test15<S, SV>();
5926 test16<S, SV>();
5927 test17<S, SV>();
5928 test18<S, SV>();
5929 test19<S, SV>();
5930 test20<S, SV>();
5931 test21<S, SV>();
5932 test22<S, SV>();
5933 test23<S, SV>();
5934 test24<S, SV>();
5935 test25<S, SV>();
5936 test26<S, SV>();
5937 test27<S, SV>();
5938 test28<S, SV>();
5939 test29<S, SV>();
5940 test30<S, SV>();
5941 test31<S, SV>();
5942 test32<S, SV>();
5943 test33<S, SV>();
5944 test34<S, SV>();
5945 test35<S, SV>();
5946 test36<S, SV>();
5947 test37<S, SV>();
5948 test38<S, SV>();
5949 test39<S, SV>();
5950 test40<S, SV>();
5951 test41<S, SV>();
5952 test42<S, SV>();
5953 test43<S, SV>();
5954 test44<S, SV>();
5955 test45<S, SV>();
5956 test46<S, SV>();
5957 test47<S, SV>();
5958 test48<S, SV>();
5959 test49<S, SV>();
5960 test50<S, SV>();
5961 test51<S, SV>();
5962 test52<S, SV>();
5963 test53<S, SV>();
5964 test54<S, SV>();
5965 test55<S, SV>();
5970 typedef std::string_view SV;
5972 SV sv = "CDEF";
5982 assert(s.compare(0, 4, sv, 0) > 0);
5985 assert(s.compare(0, 4, sv, 0, std::string::npos) > 0);