1//===----------------------------------------------------------------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10// <string_view>
11
12// constexpr int compare(size_type pos1, size_type n1, basic_string_view str,
13//             size_type pos2, size_type n2) const;
14
15#include <string_view>
16#include <cassert>
17
18#include "test_macros.h"
19#include "constexpr_char_traits.hpp"
20
21int sign ( int x ) { return x > 0 ? 1 : ( x < 0 ? -1 : 0 ); }
22
23template<typename CharT>
24void test1 ( std::basic_string_view<CharT> sv1, size_t pos1, size_t n1,
25             std::basic_string_view<CharT> sv2, size_t pos2, size_t n2,
26             int expected ) {
27#ifdef TEST_HAS_NO_EXCEPTIONS
28    if (pos1 <= sv1.size() && pos2 <= sv2.size())
29        assert (sign( sv1.compare(pos1, n1, sv2, pos2, n2)) == sign(expected));
30#else
31    try {
32        assert (sign( sv1.compare(pos1, n1, sv2, pos2, n2)) == sign(expected));
33        assert(pos1 <= sv1.size() && pos2 <= sv2.size());
34        }
35    catch (const std::out_of_range&) {
36        assert(pos1 > sv1.size() || pos2 > sv2.size());
37        }
38#endif
39}
40
41
42template<typename CharT>
43void test ( const CharT *s1, size_t pos1, size_t n1,
44            const CharT *s2, size_t pos2, size_t n2,
45            int expected ) {
46    typedef std::basic_string_view<CharT> string_view_t;
47
48    string_view_t sv1 ( s1 );
49    string_view_t sv2 ( s2 );
50    test1(sv1, pos1, n1, sv2, pos2, n2, expected);
51}
52
53void test0()
54{
55    test("", 0, 0, "", 0, 0, 0);
56    test("", 0, 0, "", 0, 1, 0);
57    test("", 0, 0, "", 1, 0, 0);
58    test("", 0, 0, "abcde", 0, 0, 0);
59    test("", 0, 0, "abcde", 0, 1, -1);
60    test("", 0, 0, "abcde", 0, 2, -2);
61    test("", 0, 0, "abcde", 0, 4, -4);
62    test("", 0, 0, "abcde", 0, 5, -5);
63    test("", 0, 0, "abcde", 0, 6, -5);
64    test("", 0, 0, "abcde", 1, 0, 0);
65    test("", 0, 0, "abcde", 1, 1, -1);
66    test("", 0, 0, "abcde", 1, 2, -2);
67    test("", 0, 0, "abcde", 1, 3, -3);
68    test("", 0, 0, "abcde", 1, 4, -4);
69    test("", 0, 0, "abcde", 1, 5, -4);
70    test("", 0, 0, "abcde", 2, 0, 0);
71    test("", 0, 0, "abcde", 2, 1, -1);
72    test("", 0, 0, "abcde", 2, 2, -2);
73    test("", 0, 0, "abcde", 2, 3, -3);
74    test("", 0, 0, "abcde", 2, 4, -3);
75    test("", 0, 0, "abcde", 4, 0, 0);
76    test("", 0, 0, "abcde", 4, 1, -1);
77    test("", 0, 0, "abcde", 4, 2, -1);
78    test("", 0, 0, "abcde", 5, 0, 0);
79    test("", 0, 0, "abcde", 5, 1, 0);
80    test("", 0, 0, "abcde", 6, 0, 0);
81    test("", 0, 0, "abcdefghij", 0, 0, 0);
82    test("", 0, 0, "abcdefghij", 0, 1, -1);
83    test("", 0, 0, "abcdefghij", 0, 5, -5);
84    test("", 0, 0, "abcdefghij", 0, 9, -9);
85    test("", 0, 0, "abcdefghij", 0, 10, -10);
86    test("", 0, 0, "abcdefghij", 0, 11, -10);
87    test("", 0, 0, "abcdefghij", 1, 0, 0);
88    test("", 0, 0, "abcdefghij", 1, 1, -1);
89    test("", 0, 0, "abcdefghij", 1, 4, -4);
90    test("", 0, 0, "abcdefghij", 1, 8, -8);
91    test("", 0, 0, "abcdefghij", 1, 9, -9);
92    test("", 0, 0, "abcdefghij", 1, 10, -9);
93    test("", 0, 0, "abcdefghij", 5, 0, 0);
94    test("", 0, 0, "abcdefghij", 5, 1, -1);
95    test("", 0, 0, "abcdefghij", 5, 2, -2);
96    test("", 0, 0, "abcdefghij", 5, 4, -4);
97    test("", 0, 0, "abcdefghij", 5, 5, -5);
98    test("", 0, 0, "abcdefghij", 5, 6, -5);
99    test("", 0, 0, "abcdefghij", 9, 0, 0);
100    test("", 0, 0, "abcdefghij", 9, 1, -1);
101    test("", 0, 0, "abcdefghij", 9, 2, -1);
102    test("", 0, 0, "abcdefghij", 10, 0, 0);
103    test("", 0, 0, "abcdefghij", 10, 1, 0);
104    test("", 0, 0, "abcdefghij", 11, 0, 0);
105    test("", 0, 0, "abcdefghijklmnopqrst", 0, 0, 0);
106    test("", 0, 0, "abcdefghijklmnopqrst", 0, 1, -1);
107    test("", 0, 0, "abcdefghijklmnopqrst", 0, 10, -10);
108    test("", 0, 0, "abcdefghijklmnopqrst", 0, 19, -19);
109    test("", 0, 0, "abcdefghijklmnopqrst", 0, 20, -20);
110    test("", 0, 0, "abcdefghijklmnopqrst", 0, 21, -20);
111    test("", 0, 0, "abcdefghijklmnopqrst", 1, 0, 0);
112    test("", 0, 0, "abcdefghijklmnopqrst", 1, 1, -1);
113    test("", 0, 0, "abcdefghijklmnopqrst", 1, 9, -9);
114    test("", 0, 0, "abcdefghijklmnopqrst", 1, 18, -18);
115    test("", 0, 0, "abcdefghijklmnopqrst", 1, 19, -19);
116    test("", 0, 0, "abcdefghijklmnopqrst", 1, 20, -19);
117    test("", 0, 0, "abcdefghijklmnopqrst", 10, 0, 0);
118    test("", 0, 0, "abcdefghijklmnopqrst", 10, 1, -1);
119    test("", 0, 0, "abcdefghijklmnopqrst", 10, 5, -5);
120    test("", 0, 0, "abcdefghijklmnopqrst", 10, 9, -9);
121    test("", 0, 0, "abcdefghijklmnopqrst", 10, 10, -10);
122    test("", 0, 0, "abcdefghijklmnopqrst", 10, 11, -10);
123    test("", 0, 0, "abcdefghijklmnopqrst", 19, 0, 0);
124    test("", 0, 0, "abcdefghijklmnopqrst", 19, 1, -1);
125    test("", 0, 0, "abcdefghijklmnopqrst", 19, 2, -1);
126    test("", 0, 0, "abcdefghijklmnopqrst", 20, 0, 0);
127    test("", 0, 0, "abcdefghijklmnopqrst", 20, 1, 0);
128    test("", 0, 0, "abcdefghijklmnopqrst", 21, 0, 0);
129    test("", 0, 1, "", 0, 0, 0);
130    test("", 0, 1, "", 0, 1, 0);
131    test("", 0, 1, "", 1, 0, 0);
132    test("", 0, 1, "abcde", 0, 0, 0);
133    test("", 0, 1, "abcde", 0, 1, -1);
134    test("", 0, 1, "abcde", 0, 2, -2);
135    test("", 0, 1, "abcde", 0, 4, -4);
136    test("", 0, 1, "abcde", 0, 5, -5);
137    test("", 0, 1, "abcde", 0, 6, -5);
138    test("", 0, 1, "abcde", 1, 0, 0);
139    test("", 0, 1, "abcde", 1, 1, -1);
140    test("", 0, 1, "abcde", 1, 2, -2);
141    test("", 0, 1, "abcde", 1, 3, -3);
142    test("", 0, 1, "abcde", 1, 4, -4);
143    test("", 0, 1, "abcde", 1, 5, -4);
144    test("", 0, 1, "abcde", 2, 0, 0);
145    test("", 0, 1, "abcde", 2, 1, -1);
146    test("", 0, 1, "abcde", 2, 2, -2);
147    test("", 0, 1, "abcde", 2, 3, -3);
148    test("", 0, 1, "abcde", 2, 4, -3);
149    test("", 0, 1, "abcde", 4, 0, 0);
150    test("", 0, 1, "abcde", 4, 1, -1);
151    test("", 0, 1, "abcde", 4, 2, -1);
152    test("", 0, 1, "abcde", 5, 0, 0);
153    test("", 0, 1, "abcde", 5, 1, 0);
154    test("", 0, 1, "abcde", 6, 0, 0);
155}
156
157void test1()
158{
159    test("", 0, 1, "abcdefghij", 0, 0, 0);
160    test("", 0, 1, "abcdefghij", 0, 1, -1);
161    test("", 0, 1, "abcdefghij", 0, 5, -5);
162    test("", 0, 1, "abcdefghij", 0, 9, -9);
163    test("", 0, 1, "abcdefghij", 0, 10, -10);
164    test("", 0, 1, "abcdefghij", 0, 11, -10);
165    test("", 0, 1, "abcdefghij", 1, 0, 0);
166    test("", 0, 1, "abcdefghij", 1, 1, -1);
167    test("", 0, 1, "abcdefghij", 1, 4, -4);
168    test("", 0, 1, "abcdefghij", 1, 8, -8);
169    test("", 0, 1, "abcdefghij", 1, 9, -9);
170    test("", 0, 1, "abcdefghij", 1, 10, -9);
171    test("", 0, 1, "abcdefghij", 5, 0, 0);
172    test("", 0, 1, "abcdefghij", 5, 1, -1);
173    test("", 0, 1, "abcdefghij", 5, 2, -2);
174    test("", 0, 1, "abcdefghij", 5, 4, -4);
175    test("", 0, 1, "abcdefghij", 5, 5, -5);
176    test("", 0, 1, "abcdefghij", 5, 6, -5);
177    test("", 0, 1, "abcdefghij", 9, 0, 0);
178    test("", 0, 1, "abcdefghij", 9, 1, -1);
179    test("", 0, 1, "abcdefghij", 9, 2, -1);
180    test("", 0, 1, "abcdefghij", 10, 0, 0);
181    test("", 0, 1, "abcdefghij", 10, 1, 0);
182    test("", 0, 1, "abcdefghij", 11, 0, 0);
183    test("", 0, 1, "abcdefghijklmnopqrst", 0, 0, 0);
184    test("", 0, 1, "abcdefghijklmnopqrst", 0, 1, -1);
185    test("", 0, 1, "abcdefghijklmnopqrst", 0, 10, -10);
186    test("", 0, 1, "abcdefghijklmnopqrst", 0, 19, -19);
187    test("", 0, 1, "abcdefghijklmnopqrst", 0, 20, -20);
188    test("", 0, 1, "abcdefghijklmnopqrst", 0, 21, -20);
189    test("", 0, 1, "abcdefghijklmnopqrst", 1, 0, 0);
190    test("", 0, 1, "abcdefghijklmnopqrst", 1, 1, -1);
191    test("", 0, 1, "abcdefghijklmnopqrst", 1, 9, -9);
192    test("", 0, 1, "abcdefghijklmnopqrst", 1, 18, -18);
193    test("", 0, 1, "abcdefghijklmnopqrst", 1, 19, -19);
194    test("", 0, 1, "abcdefghijklmnopqrst", 1, 20, -19);
195    test("", 0, 1, "abcdefghijklmnopqrst", 10, 0, 0);
196    test("", 0, 1, "abcdefghijklmnopqrst", 10, 1, -1);
197    test("", 0, 1, "abcdefghijklmnopqrst", 10, 5, -5);
198    test("", 0, 1, "abcdefghijklmnopqrst", 10, 9, -9);
199    test("", 0, 1, "abcdefghijklmnopqrst", 10, 10, -10);
200    test("", 0, 1, "abcdefghijklmnopqrst", 10, 11, -10);
201    test("", 0, 1, "abcdefghijklmnopqrst", 19, 0, 0);
202    test("", 0, 1, "abcdefghijklmnopqrst", 19, 1, -1);
203    test("", 0, 1, "abcdefghijklmnopqrst", 19, 2, -1);
204    test("", 0, 1, "abcdefghijklmnopqrst", 20, 0, 0);
205    test("", 0, 1, "abcdefghijklmnopqrst", 20, 1, 0);
206    test("", 0, 1, "abcdefghijklmnopqrst", 21, 0, 0);
207    test("", 1, 0, "", 0, 0, 0);
208    test("", 1, 0, "", 0, 1, 0);
209    test("", 1, 0, "", 1, 0, 0);
210    test("", 1, 0, "abcde", 0, 0, 0);
211    test("", 1, 0, "abcde", 0, 1, 0);
212    test("", 1, 0, "abcde", 0, 2, 0);
213    test("", 1, 0, "abcde", 0, 4, 0);
214    test("", 1, 0, "abcde", 0, 5, 0);
215    test("", 1, 0, "abcde", 0, 6, 0);
216    test("", 1, 0, "abcde", 1, 0, 0);
217    test("", 1, 0, "abcde", 1, 1, 0);
218    test("", 1, 0, "abcde", 1, 2, 0);
219    test("", 1, 0, "abcde", 1, 3, 0);
220    test("", 1, 0, "abcde", 1, 4, 0);
221    test("", 1, 0, "abcde", 1, 5, 0);
222    test("", 1, 0, "abcde", 2, 0, 0);
223    test("", 1, 0, "abcde", 2, 1, 0);
224    test("", 1, 0, "abcde", 2, 2, 0);
225    test("", 1, 0, "abcde", 2, 3, 0);
226    test("", 1, 0, "abcde", 2, 4, 0);
227    test("", 1, 0, "abcde", 4, 0, 0);
228    test("", 1, 0, "abcde", 4, 1, 0);
229    test("", 1, 0, "abcde", 4, 2, 0);
230    test("", 1, 0, "abcde", 5, 0, 0);
231    test("", 1, 0, "abcde", 5, 1, 0);
232    test("", 1, 0, "abcde", 6, 0, 0);
233    test("", 1, 0, "abcdefghij", 0, 0, 0);
234    test("", 1, 0, "abcdefghij", 0, 1, 0);
235    test("", 1, 0, "abcdefghij", 0, 5, 0);
236    test("", 1, 0, "abcdefghij", 0, 9, 0);
237    test("", 1, 0, "abcdefghij", 0, 10, 0);
238    test("", 1, 0, "abcdefghij", 0, 11, 0);
239    test("", 1, 0, "abcdefghij", 1, 0, 0);
240    test("", 1, 0, "abcdefghij", 1, 1, 0);
241    test("", 1, 0, "abcdefghij", 1, 4, 0);
242    test("", 1, 0, "abcdefghij", 1, 8, 0);
243    test("", 1, 0, "abcdefghij", 1, 9, 0);
244    test("", 1, 0, "abcdefghij", 1, 10, 0);
245    test("", 1, 0, "abcdefghij", 5, 0, 0);
246    test("", 1, 0, "abcdefghij", 5, 1, 0);
247    test("", 1, 0, "abcdefghij", 5, 2, 0);
248    test("", 1, 0, "abcdefghij", 5, 4, 0);
249    test("", 1, 0, "abcdefghij", 5, 5, 0);
250    test("", 1, 0, "abcdefghij", 5, 6, 0);
251    test("", 1, 0, "abcdefghij", 9, 0, 0);
252    test("", 1, 0, "abcdefghij", 9, 1, 0);
253    test("", 1, 0, "abcdefghij", 9, 2, 0);
254    test("", 1, 0, "abcdefghij", 10, 0, 0);
255    test("", 1, 0, "abcdefghij", 10, 1, 0);
256    test("", 1, 0, "abcdefghij", 11, 0, 0);
257    test("", 1, 0, "abcdefghijklmnopqrst", 0, 0, 0);
258    test("", 1, 0, "abcdefghijklmnopqrst", 0, 1, 0);
259}
260
261void test2()
262{
263    test("", 1, 0, "abcdefghijklmnopqrst", 0, 10, 0);
264    test("", 1, 0, "abcdefghijklmnopqrst", 0, 19, 0);
265    test("", 1, 0, "abcdefghijklmnopqrst", 0, 20, 0);
266    test("", 1, 0, "abcdefghijklmnopqrst", 0, 21, 0);
267    test("", 1, 0, "abcdefghijklmnopqrst", 1, 0, 0);
268    test("", 1, 0, "abcdefghijklmnopqrst", 1, 1, 0);
269    test("", 1, 0, "abcdefghijklmnopqrst", 1, 9, 0);
270    test("", 1, 0, "abcdefghijklmnopqrst", 1, 18, 0);
271    test("", 1, 0, "abcdefghijklmnopqrst", 1, 19, 0);
272    test("", 1, 0, "abcdefghijklmnopqrst", 1, 20, 0);
273    test("", 1, 0, "abcdefghijklmnopqrst", 10, 0, 0);
274    test("", 1, 0, "abcdefghijklmnopqrst", 10, 1, 0);
275    test("", 1, 0, "abcdefghijklmnopqrst", 10, 5, 0);
276    test("", 1, 0, "abcdefghijklmnopqrst", 10, 9, 0);
277    test("", 1, 0, "abcdefghijklmnopqrst", 10, 10, 0);
278    test("", 1, 0, "abcdefghijklmnopqrst", 10, 11, 0);
279    test("", 1, 0, "abcdefghijklmnopqrst", 19, 0, 0);
280    test("", 1, 0, "abcdefghijklmnopqrst", 19, 1, 0);
281    test("", 1, 0, "abcdefghijklmnopqrst", 19, 2, 0);
282    test("", 1, 0, "abcdefghijklmnopqrst", 20, 0, 0);
283    test("", 1, 0, "abcdefghijklmnopqrst", 20, 1, 0);
284    test("", 1, 0, "abcdefghijklmnopqrst", 21, 0, 0);
285    test("abcde", 0, 0, "", 0, 0, 0);
286    test("abcde", 0, 0, "", 0, 1, 0);
287    test("abcde", 0, 0, "", 1, 0, 0);
288    test("abcde", 0, 0, "abcde", 0, 0, 0);
289    test("abcde", 0, 0, "abcde", 0, 1, -1);
290    test("abcde", 0, 0, "abcde", 0, 2, -2);
291    test("abcde", 0, 0, "abcde", 0, 4, -4);
292    test("abcde", 0, 0, "abcde", 0, 5, -5);
293    test("abcde", 0, 0, "abcde", 0, 6, -5);
294    test("abcde", 0, 0, "abcde", 1, 0, 0);
295    test("abcde", 0, 0, "abcde", 1, 1, -1);
296    test("abcde", 0, 0, "abcde", 1, 2, -2);
297    test("abcde", 0, 0, "abcde", 1, 3, -3);
298    test("abcde", 0, 0, "abcde", 1, 4, -4);
299    test("abcde", 0, 0, "abcde", 1, 5, -4);
300    test("abcde", 0, 0, "abcde", 2, 0, 0);
301    test("abcde", 0, 0, "abcde", 2, 1, -1);
302    test("abcde", 0, 0, "abcde", 2, 2, -2);
303    test("abcde", 0, 0, "abcde", 2, 3, -3);
304    test("abcde", 0, 0, "abcde", 2, 4, -3);
305    test("abcde", 0, 0, "abcde", 4, 0, 0);
306    test("abcde", 0, 0, "abcde", 4, 1, -1);
307    test("abcde", 0, 0, "abcde", 4, 2, -1);
308    test("abcde", 0, 0, "abcde", 5, 0, 0);
309    test("abcde", 0, 0, "abcde", 5, 1, 0);
310    test("abcde", 0, 0, "abcde", 6, 0, 0);
311    test("abcde", 0, 0, "abcdefghij", 0, 0, 0);
312    test("abcde", 0, 0, "abcdefghij", 0, 1, -1);
313    test("abcde", 0, 0, "abcdefghij", 0, 5, -5);
314    test("abcde", 0, 0, "abcdefghij", 0, 9, -9);
315    test("abcde", 0, 0, "abcdefghij", 0, 10, -10);
316    test("abcde", 0, 0, "abcdefghij", 0, 11, -10);
317    test("abcde", 0, 0, "abcdefghij", 1, 0, 0);
318    test("abcde", 0, 0, "abcdefghij", 1, 1, -1);
319    test("abcde", 0, 0, "abcdefghij", 1, 4, -4);
320    test("abcde", 0, 0, "abcdefghij", 1, 8, -8);
321    test("abcde", 0, 0, "abcdefghij", 1, 9, -9);
322    test("abcde", 0, 0, "abcdefghij", 1, 10, -9);
323    test("abcde", 0, 0, "abcdefghij", 5, 0, 0);
324    test("abcde", 0, 0, "abcdefghij", 5, 1, -1);
325    test("abcde", 0, 0, "abcdefghij", 5, 2, -2);
326    test("abcde", 0, 0, "abcdefghij", 5, 4, -4);
327    test("abcde", 0, 0, "abcdefghij", 5, 5, -5);
328    test("abcde", 0, 0, "abcdefghij", 5, 6, -5);
329    test("abcde", 0, 0, "abcdefghij", 9, 0, 0);
330    test("abcde", 0, 0, "abcdefghij", 9, 1, -1);
331    test("abcde", 0, 0, "abcdefghij", 9, 2, -1);
332    test("abcde", 0, 0, "abcdefghij", 10, 0, 0);
333    test("abcde", 0, 0, "abcdefghij", 10, 1, 0);
334    test("abcde", 0, 0, "abcdefghij", 11, 0, 0);
335    test("abcde", 0, 0, "abcdefghijklmnopqrst", 0, 0, 0);
336    test("abcde", 0, 0, "abcdefghijklmnopqrst", 0, 1, -1);
337    test("abcde", 0, 0, "abcdefghijklmnopqrst", 0, 10, -10);
338    test("abcde", 0, 0, "abcdefghijklmnopqrst", 0, 19, -19);
339    test("abcde", 0, 0, "abcdefghijklmnopqrst", 0, 20, -20);
340    test("abcde", 0, 0, "abcdefghijklmnopqrst", 0, 21, -20);
341    test("abcde", 0, 0, "abcdefghijklmnopqrst", 1, 0, 0);
342    test("abcde", 0, 0, "abcdefghijklmnopqrst", 1, 1, -1);
343    test("abcde", 0, 0, "abcdefghijklmnopqrst", 1, 9, -9);
344    test("abcde", 0, 0, "abcdefghijklmnopqrst", 1, 18, -18);
345    test("abcde", 0, 0, "abcdefghijklmnopqrst", 1, 19, -19);
346    test("abcde", 0, 0, "abcdefghijklmnopqrst", 1, 20, -19);
347    test("abcde", 0, 0, "abcdefghijklmnopqrst", 10, 0, 0);
348    test("abcde", 0, 0, "abcdefghijklmnopqrst", 10, 1, -1);
349    test("abcde", 0, 0, "abcdefghijklmnopqrst", 10, 5, -5);
350    test("abcde", 0, 0, "abcdefghijklmnopqrst", 10, 9, -9);
351    test("abcde", 0, 0, "abcdefghijklmnopqrst", 10, 10, -10);
352    test("abcde", 0, 0, "abcdefghijklmnopqrst", 10, 11, -10);
353    test("abcde", 0, 0, "abcdefghijklmnopqrst", 19, 0, 0);
354    test("abcde", 0, 0, "abcdefghijklmnopqrst", 19, 1, -1);
355    test("abcde", 0, 0, "abcdefghijklmnopqrst", 19, 2, -1);
356    test("abcde", 0, 0, "abcdefghijklmnopqrst", 20, 0, 0);
357    test("abcde", 0, 0, "abcdefghijklmnopqrst", 20, 1, 0);
358    test("abcde", 0, 0, "abcdefghijklmnopqrst", 21, 0, 0);
359    test("abcde", 0, 1, "", 0, 0, 1);
360    test("abcde", 0, 1, "", 0, 1, 1);
361    test("abcde", 0, 1, "", 1, 0, 0);
362    test("abcde", 0, 1, "abcde", 0, 0, 1);
363}
364
365void test3()
366{
367    test("abcde", 0, 1, "abcde", 0, 1, 0);
368    test("abcde", 0, 1, "abcde", 0, 2, -1);
369    test("abcde", 0, 1, "abcde", 0, 4, -3);
370    test("abcde", 0, 1, "abcde", 0, 5, -4);
371    test("abcde", 0, 1, "abcde", 0, 6, -4);
372    test("abcde", 0, 1, "abcde", 1, 0, 1);
373    test("abcde", 0, 1, "abcde", 1, 1, -1);
374    test("abcde", 0, 1, "abcde", 1, 2, -1);
375    test("abcde", 0, 1, "abcde", 1, 3, -1);
376    test("abcde", 0, 1, "abcde", 1, 4, -1);
377    test("abcde", 0, 1, "abcde", 1, 5, -1);
378    test("abcde", 0, 1, "abcde", 2, 0, 1);
379    test("abcde", 0, 1, "abcde", 2, 1, -2);
380    test("abcde", 0, 1, "abcde", 2, 2, -2);
381    test("abcde", 0, 1, "abcde", 2, 3, -2);
382    test("abcde", 0, 1, "abcde", 2, 4, -2);
383    test("abcde", 0, 1, "abcde", 4, 0, 1);
384    test("abcde", 0, 1, "abcde", 4, 1, -4);
385    test("abcde", 0, 1, "abcde", 4, 2, -4);
386    test("abcde", 0, 1, "abcde", 5, 0, 1);
387    test("abcde", 0, 1, "abcde", 5, 1, 1);
388    test("abcde", 0, 1, "abcde", 6, 0, 0);
389    test("abcde", 0, 1, "abcdefghij", 0, 0, 1);
390    test("abcde", 0, 1, "abcdefghij", 0, 1, 0);
391    test("abcde", 0, 1, "abcdefghij", 0, 5, -4);
392    test("abcde", 0, 1, "abcdefghij", 0, 9, -8);
393    test("abcde", 0, 1, "abcdefghij", 0, 10, -9);
394    test("abcde", 0, 1, "abcdefghij", 0, 11, -9);
395    test("abcde", 0, 1, "abcdefghij", 1, 0, 1);
396    test("abcde", 0, 1, "abcdefghij", 1, 1, -1);
397    test("abcde", 0, 1, "abcdefghij", 1, 4, -1);
398    test("abcde", 0, 1, "abcdefghij", 1, 8, -1);
399    test("abcde", 0, 1, "abcdefghij", 1, 9, -1);
400    test("abcde", 0, 1, "abcdefghij", 1, 10, -1);
401    test("abcde", 0, 1, "abcdefghij", 5, 0, 1);
402    test("abcde", 0, 1, "abcdefghij", 5, 1, -5);
403    test("abcde", 0, 1, "abcdefghij", 5, 2, -5);
404    test("abcde", 0, 1, "abcdefghij", 5, 4, -5);
405    test("abcde", 0, 1, "abcdefghij", 5, 5, -5);
406    test("abcde", 0, 1, "abcdefghij", 5, 6, -5);
407    test("abcde", 0, 1, "abcdefghij", 9, 0, 1);
408    test("abcde", 0, 1, "abcdefghij", 9, 1, -9);
409    test("abcde", 0, 1, "abcdefghij", 9, 2, -9);
410    test("abcde", 0, 1, "abcdefghij", 10, 0, 1);
411    test("abcde", 0, 1, "abcdefghij", 10, 1, 1);
412    test("abcde", 0, 1, "abcdefghij", 11, 0, 0);
413    test("abcde", 0, 1, "abcdefghijklmnopqrst", 0, 0, 1);
414    test("abcde", 0, 1, "abcdefghijklmnopqrst", 0, 1, 0);
415    test("abcde", 0, 1, "abcdefghijklmnopqrst", 0, 10, -9);
416    test("abcde", 0, 1, "abcdefghijklmnopqrst", 0, 19, -18);
417    test("abcde", 0, 1, "abcdefghijklmnopqrst", 0, 20, -19);
418    test("abcde", 0, 1, "abcdefghijklmnopqrst", 0, 21, -19);
419    test("abcde", 0, 1, "abcdefghijklmnopqrst", 1, 0, 1);
420    test("abcde", 0, 1, "abcdefghijklmnopqrst", 1, 1, -1);
421    test("abcde", 0, 1, "abcdefghijklmnopqrst", 1, 9, -1);
422    test("abcde", 0, 1, "abcdefghijklmnopqrst", 1, 18, -1);
423    test("abcde", 0, 1, "abcdefghijklmnopqrst", 1, 19, -1);
424    test("abcde", 0, 1, "abcdefghijklmnopqrst", 1, 20, -1);
425    test("abcde", 0, 1, "abcdefghijklmnopqrst", 10, 0, 1);
426    test("abcde", 0, 1, "abcdefghijklmnopqrst", 10, 1, -10);
427    test("abcde", 0, 1, "abcdefghijklmnopqrst", 10, 5, -10);
428    test("abcde", 0, 1, "abcdefghijklmnopqrst", 10, 9, -10);
429    test("abcde", 0, 1, "abcdefghijklmnopqrst", 10, 10, -10);
430    test("abcde", 0, 1, "abcdefghijklmnopqrst", 10, 11, -10);
431    test("abcde", 0, 1, "abcdefghijklmnopqrst", 19, 0, 1);
432    test("abcde", 0, 1, "abcdefghijklmnopqrst", 19, 1, -19);
433    test("abcde", 0, 1, "abcdefghijklmnopqrst", 19, 2, -19);
434    test("abcde", 0, 1, "abcdefghijklmnopqrst", 20, 0, 1);
435    test("abcde", 0, 1, "abcdefghijklmnopqrst", 20, 1, 1);
436    test("abcde", 0, 1, "abcdefghijklmnopqrst", 21, 0, 0);
437    test("abcde", 0, 2, "", 0, 0, 2);
438    test("abcde", 0, 2, "", 0, 1, 2);
439    test("abcde", 0, 2, "", 1, 0, 0);
440    test("abcde", 0, 2, "abcde", 0, 0, 2);
441    test("abcde", 0, 2, "abcde", 0, 1, 1);
442    test("abcde", 0, 2, "abcde", 0, 2, 0);
443    test("abcde", 0, 2, "abcde", 0, 4, -2);
444    test("abcde", 0, 2, "abcde", 0, 5, -3);
445    test("abcde", 0, 2, "abcde", 0, 6, -3);
446    test("abcde", 0, 2, "abcde", 1, 0, 2);
447    test("abcde", 0, 2, "abcde", 1, 1, -1);
448    test("abcde", 0, 2, "abcde", 1, 2, -1);
449    test("abcde", 0, 2, "abcde", 1, 3, -1);
450    test("abcde", 0, 2, "abcde", 1, 4, -1);
451    test("abcde", 0, 2, "abcde", 1, 5, -1);
452    test("abcde", 0, 2, "abcde", 2, 0, 2);
453    test("abcde", 0, 2, "abcde", 2, 1, -2);
454    test("abcde", 0, 2, "abcde", 2, 2, -2);
455    test("abcde", 0, 2, "abcde", 2, 3, -2);
456    test("abcde", 0, 2, "abcde", 2, 4, -2);
457    test("abcde", 0, 2, "abcde", 4, 0, 2);
458    test("abcde", 0, 2, "abcde", 4, 1, -4);
459    test("abcde", 0, 2, "abcde", 4, 2, -4);
460    test("abcde", 0, 2, "abcde", 5, 0, 2);
461    test("abcde", 0, 2, "abcde", 5, 1, 2);
462    test("abcde", 0, 2, "abcde", 6, 0, 0);
463    test("abcde", 0, 2, "abcdefghij", 0, 0, 2);
464    test("abcde", 0, 2, "abcdefghij", 0, 1, 1);
465    test("abcde", 0, 2, "abcdefghij", 0, 5, -3);
466    test("abcde", 0, 2, "abcdefghij", 0, 9, -7);
467}
468
469void test4()
470{
471    test("abcde", 0, 2, "abcdefghij", 0, 10, -8);
472    test("abcde", 0, 2, "abcdefghij", 0, 11, -8);
473    test("abcde", 0, 2, "abcdefghij", 1, 0, 2);
474    test("abcde", 0, 2, "abcdefghij", 1, 1, -1);
475    test("abcde", 0, 2, "abcdefghij", 1, 4, -1);
476    test("abcde", 0, 2, "abcdefghij", 1, 8, -1);
477    test("abcde", 0, 2, "abcdefghij", 1, 9, -1);
478    test("abcde", 0, 2, "abcdefghij", 1, 10, -1);
479    test("abcde", 0, 2, "abcdefghij", 5, 0, 2);
480    test("abcde", 0, 2, "abcdefghij", 5, 1, -5);
481    test("abcde", 0, 2, "abcdefghij", 5, 2, -5);
482    test("abcde", 0, 2, "abcdefghij", 5, 4, -5);
483    test("abcde", 0, 2, "abcdefghij", 5, 5, -5);
484    test("abcde", 0, 2, "abcdefghij", 5, 6, -5);
485    test("abcde", 0, 2, "abcdefghij", 9, 0, 2);
486    test("abcde", 0, 2, "abcdefghij", 9, 1, -9);
487    test("abcde", 0, 2, "abcdefghij", 9, 2, -9);
488    test("abcde", 0, 2, "abcdefghij", 10, 0, 2);
489    test("abcde", 0, 2, "abcdefghij", 10, 1, 2);
490    test("abcde", 0, 2, "abcdefghij", 11, 0, 0);
491    test("abcde", 0, 2, "abcdefghijklmnopqrst", 0, 0, 2);
492    test("abcde", 0, 2, "abcdefghijklmnopqrst", 0, 1, 1);
493    test("abcde", 0, 2, "abcdefghijklmnopqrst", 0, 10, -8);
494    test("abcde", 0, 2, "abcdefghijklmnopqrst", 0, 19, -17);
495    test("abcde", 0, 2, "abcdefghijklmnopqrst", 0, 20, -18);
496    test("abcde", 0, 2, "abcdefghijklmnopqrst", 0, 21, -18);
497    test("abcde", 0, 2, "abcdefghijklmnopqrst", 1, 0, 2);
498    test("abcde", 0, 2, "abcdefghijklmnopqrst", 1, 1, -1);
499    test("abcde", 0, 2, "abcdefghijklmnopqrst", 1, 9, -1);
500    test("abcde", 0, 2, "abcdefghijklmnopqrst", 1, 18, -1);
501    test("abcde", 0, 2, "abcdefghijklmnopqrst", 1, 19, -1);
502    test("abcde", 0, 2, "abcdefghijklmnopqrst", 1, 20, -1);
503    test("abcde", 0, 2, "abcdefghijklmnopqrst", 10, 0, 2);
504    test("abcde", 0, 2, "abcdefghijklmnopqrst", 10, 1, -10);
505    test("abcde", 0, 2, "abcdefghijklmnopqrst", 10, 5, -10);
506    test("abcde", 0, 2, "abcdefghijklmnopqrst", 10, 9, -10);
507    test("abcde", 0, 2, "abcdefghijklmnopqrst", 10, 10, -10);
508    test("abcde", 0, 2, "abcdefghijklmnopqrst", 10, 11, -10);
509    test("abcde", 0, 2, "abcdefghijklmnopqrst", 19, 0, 2);
510    test("abcde", 0, 2, "abcdefghijklmnopqrst", 19, 1, -19);
511    test("abcde", 0, 2, "abcdefghijklmnopqrst", 19, 2, -19);
512    test("abcde", 0, 2, "abcdefghijklmnopqrst", 20, 0, 2);
513    test("abcde", 0, 2, "abcdefghijklmnopqrst", 20, 1, 2);
514    test("abcde", 0, 2, "abcdefghijklmnopqrst", 21, 0, 0);
515    test("abcde", 0, 4, "", 0, 0, 4);
516    test("abcde", 0, 4, "", 0, 1, 4);
517    test("abcde", 0, 4, "", 1, 0, 0);
518    test("abcde", 0, 4, "abcde", 0, 0, 4);
519    test("abcde", 0, 4, "abcde", 0, 1, 3);
520    test("abcde", 0, 4, "abcde", 0, 2, 2);
521    test("abcde", 0, 4, "abcde", 0, 4, 0);
522    test("abcde", 0, 4, "abcde", 0, 5, -1);
523    test("abcde", 0, 4, "abcde", 0, 6, -1);
524    test("abcde", 0, 4, "abcde", 1, 0, 4);
525    test("abcde", 0, 4, "abcde", 1, 1, -1);
526    test("abcde", 0, 4, "abcde", 1, 2, -1);
527    test("abcde", 0, 4, "abcde", 1, 3, -1);
528    test("abcde", 0, 4, "abcde", 1, 4, -1);
529    test("abcde", 0, 4, "abcde", 1, 5, -1);
530    test("abcde", 0, 4, "abcde", 2, 0, 4);
531    test("abcde", 0, 4, "abcde", 2, 1, -2);
532    test("abcde", 0, 4, "abcde", 2, 2, -2);
533    test("abcde", 0, 4, "abcde", 2, 3, -2);
534    test("abcde", 0, 4, "abcde", 2, 4, -2);
535    test("abcde", 0, 4, "abcde", 4, 0, 4);
536    test("abcde", 0, 4, "abcde", 4, 1, -4);
537    test("abcde", 0, 4, "abcde", 4, 2, -4);
538    test("abcde", 0, 4, "abcde", 5, 0, 4);
539    test("abcde", 0, 4, "abcde", 5, 1, 4);
540    test("abcde", 0, 4, "abcde", 6, 0, 0);
541    test("abcde", 0, 4, "abcdefghij", 0, 0, 4);
542    test("abcde", 0, 4, "abcdefghij", 0, 1, 3);
543    test("abcde", 0, 4, "abcdefghij", 0, 5, -1);
544    test("abcde", 0, 4, "abcdefghij", 0, 9, -5);
545    test("abcde", 0, 4, "abcdefghij", 0, 10, -6);
546    test("abcde", 0, 4, "abcdefghij", 0, 11, -6);
547    test("abcde", 0, 4, "abcdefghij", 1, 0, 4);
548    test("abcde", 0, 4, "abcdefghij", 1, 1, -1);
549    test("abcde", 0, 4, "abcdefghij", 1, 4, -1);
550    test("abcde", 0, 4, "abcdefghij", 1, 8, -1);
551    test("abcde", 0, 4, "abcdefghij", 1, 9, -1);
552    test("abcde", 0, 4, "abcdefghij", 1, 10, -1);
553    test("abcde", 0, 4, "abcdefghij", 5, 0, 4);
554    test("abcde", 0, 4, "abcdefghij", 5, 1, -5);
555    test("abcde", 0, 4, "abcdefghij", 5, 2, -5);
556    test("abcde", 0, 4, "abcdefghij", 5, 4, -5);
557    test("abcde", 0, 4, "abcdefghij", 5, 5, -5);
558    test("abcde", 0, 4, "abcdefghij", 5, 6, -5);
559    test("abcde", 0, 4, "abcdefghij", 9, 0, 4);
560    test("abcde", 0, 4, "abcdefghij", 9, 1, -9);
561    test("abcde", 0, 4, "abcdefghij", 9, 2, -9);
562    test("abcde", 0, 4, "abcdefghij", 10, 0, 4);
563    test("abcde", 0, 4, "abcdefghij", 10, 1, 4);
564    test("abcde", 0, 4, "abcdefghij", 11, 0, 0);
565    test("abcde", 0, 4, "abcdefghijklmnopqrst", 0, 0, 4);
566    test("abcde", 0, 4, "abcdefghijklmnopqrst", 0, 1, 3);
567    test("abcde", 0, 4, "abcdefghijklmnopqrst", 0, 10, -6);
568    test("abcde", 0, 4, "abcdefghijklmnopqrst", 0, 19, -15);
569    test("abcde", 0, 4, "abcdefghijklmnopqrst", 0, 20, -16);
570    test("abcde", 0, 4, "abcdefghijklmnopqrst", 0, 21, -16);
571}
572
573void test5()
574{
575    test("abcde", 0, 4, "abcdefghijklmnopqrst", 1, 0, 4);
576    test("abcde", 0, 4, "abcdefghijklmnopqrst", 1, 1, -1);
577    test("abcde", 0, 4, "abcdefghijklmnopqrst", 1, 9, -1);
578    test("abcde", 0, 4, "abcdefghijklmnopqrst", 1, 18, -1);
579    test("abcde", 0, 4, "abcdefghijklmnopqrst", 1, 19, -1);
580    test("abcde", 0, 4, "abcdefghijklmnopqrst", 1, 20, -1);
581    test("abcde", 0, 4, "abcdefghijklmnopqrst", 10, 0, 4);
582    test("abcde", 0, 4, "abcdefghijklmnopqrst", 10, 1, -10);
583    test("abcde", 0, 4, "abcdefghijklmnopqrst", 10, 5, -10);
584    test("abcde", 0, 4, "abcdefghijklmnopqrst", 10, 9, -10);
585    test("abcde", 0, 4, "abcdefghijklmnopqrst", 10, 10, -10);
586    test("abcde", 0, 4, "abcdefghijklmnopqrst", 10, 11, -10);
587    test("abcde", 0, 4, "abcdefghijklmnopqrst", 19, 0, 4);
588    test("abcde", 0, 4, "abcdefghijklmnopqrst", 19, 1, -19);
589    test("abcde", 0, 4, "abcdefghijklmnopqrst", 19, 2, -19);
590    test("abcde", 0, 4, "abcdefghijklmnopqrst", 20, 0, 4);
591    test("abcde", 0, 4, "abcdefghijklmnopqrst", 20, 1, 4);
592    test("abcde", 0, 4, "abcdefghijklmnopqrst", 21, 0, 0);
593    test("abcde", 0, 5, "", 0, 0, 5);
594    test("abcde", 0, 5, "", 0, 1, 5);
595    test("abcde", 0, 5, "", 1, 0, 0);
596    test("abcde", 0, 5, "abcde", 0, 0, 5);
597    test("abcde", 0, 5, "abcde", 0, 1, 4);
598    test("abcde", 0, 5, "abcde", 0, 2, 3);
599    test("abcde", 0, 5, "abcde", 0, 4, 1);
600    test("abcde", 0, 5, "abcde", 0, 5, 0);
601    test("abcde", 0, 5, "abcde", 0, 6, 0);
602    test("abcde", 0, 5, "abcde", 1, 0, 5);
603    test("abcde", 0, 5, "abcde", 1, 1, -1);
604    test("abcde", 0, 5, "abcde", 1, 2, -1);
605    test("abcde", 0, 5, "abcde", 1, 3, -1);
606    test("abcde", 0, 5, "abcde", 1, 4, -1);
607    test("abcde", 0, 5, "abcde", 1, 5, -1);
608    test("abcde", 0, 5, "abcde", 2, 0, 5);
609    test("abcde", 0, 5, "abcde", 2, 1, -2);
610    test("abcde", 0, 5, "abcde", 2, 2, -2);
611    test("abcde", 0, 5, "abcde", 2, 3, -2);
612    test("abcde", 0, 5, "abcde", 2, 4, -2);
613    test("abcde", 0, 5, "abcde", 4, 0, 5);
614    test("abcde", 0, 5, "abcde", 4, 1, -4);
615    test("abcde", 0, 5, "abcde", 4, 2, -4);
616    test("abcde", 0, 5, "abcde", 5, 0, 5);
617    test("abcde", 0, 5, "abcde", 5, 1, 5);
618    test("abcde", 0, 5, "abcde", 6, 0, 0);
619    test("abcde", 0, 5, "abcdefghij", 0, 0, 5);
620    test("abcde", 0, 5, "abcdefghij", 0, 1, 4);
621    test("abcde", 0, 5, "abcdefghij", 0, 5, 0);
622    test("abcde", 0, 5, "abcdefghij", 0, 9, -4);
623    test("abcde", 0, 5, "abcdefghij", 0, 10, -5);
624    test("abcde", 0, 5, "abcdefghij", 0, 11, -5);
625    test("abcde", 0, 5, "abcdefghij", 1, 0, 5);
626    test("abcde", 0, 5, "abcdefghij", 1, 1, -1);
627    test("abcde", 0, 5, "abcdefghij", 1, 4, -1);
628    test("abcde", 0, 5, "abcdefghij", 1, 8, -1);
629    test("abcde", 0, 5, "abcdefghij", 1, 9, -1);
630    test("abcde", 0, 5, "abcdefghij", 1, 10, -1);
631    test("abcde", 0, 5, "abcdefghij", 5, 0, 5);
632    test("abcde", 0, 5, "abcdefghij", 5, 1, -5);
633    test("abcde", 0, 5, "abcdefghij", 5, 2, -5);
634    test("abcde", 0, 5, "abcdefghij", 5, 4, -5);
635    test("abcde", 0, 5, "abcdefghij", 5, 5, -5);
636    test("abcde", 0, 5, "abcdefghij", 5, 6, -5);
637    test("abcde", 0, 5, "abcdefghij", 9, 0, 5);
638    test("abcde", 0, 5, "abcdefghij", 9, 1, -9);
639    test("abcde", 0, 5, "abcdefghij", 9, 2, -9);
640    test("abcde", 0, 5, "abcdefghij", 10, 0, 5);
641    test("abcde", 0, 5, "abcdefghij", 10, 1, 5);
642    test("abcde", 0, 5, "abcdefghij", 11, 0, 0);
643    test("abcde", 0, 5, "abcdefghijklmnopqrst", 0, 0, 5);
644    test("abcde", 0, 5, "abcdefghijklmnopqrst", 0, 1, 4);
645    test("abcde", 0, 5, "abcdefghijklmnopqrst", 0, 10, -5);
646    test("abcde", 0, 5, "abcdefghijklmnopqrst", 0, 19, -14);
647    test("abcde", 0, 5, "abcdefghijklmnopqrst", 0, 20, -15);
648    test("abcde", 0, 5, "abcdefghijklmnopqrst", 0, 21, -15);
649    test("abcde", 0, 5, "abcdefghijklmnopqrst", 1, 0, 5);
650    test("abcde", 0, 5, "abcdefghijklmnopqrst", 1, 1, -1);
651    test("abcde", 0, 5, "abcdefghijklmnopqrst", 1, 9, -1);
652    test("abcde", 0, 5, "abcdefghijklmnopqrst", 1, 18, -1);
653    test("abcde", 0, 5, "abcdefghijklmnopqrst", 1, 19, -1);
654    test("abcde", 0, 5, "abcdefghijklmnopqrst", 1, 20, -1);
655    test("abcde", 0, 5, "abcdefghijklmnopqrst", 10, 0, 5);
656    test("abcde", 0, 5, "abcdefghijklmnopqrst", 10, 1, -10);
657    test("abcde", 0, 5, "abcdefghijklmnopqrst", 10, 5, -10);
658    test("abcde", 0, 5, "abcdefghijklmnopqrst", 10, 9, -10);
659    test("abcde", 0, 5, "abcdefghijklmnopqrst", 10, 10, -10);
660    test("abcde", 0, 5, "abcdefghijklmnopqrst", 10, 11, -10);
661    test("abcde", 0, 5, "abcdefghijklmnopqrst", 19, 0, 5);
662    test("abcde", 0, 5, "abcdefghijklmnopqrst", 19, 1, -19);
663    test("abcde", 0, 5, "abcdefghijklmnopqrst", 19, 2, -19);
664    test("abcde", 0, 5, "abcdefghijklmnopqrst", 20, 0, 5);
665    test("abcde", 0, 5, "abcdefghijklmnopqrst", 20, 1, 5);
666    test("abcde", 0, 5, "abcdefghijklmnopqrst", 21, 0, 0);
667    test("abcde", 0, 6, "", 0, 0, 5);
668    test("abcde", 0, 6, "", 0, 1, 5);
669    test("abcde", 0, 6, "", 1, 0, 0);
670    test("abcde", 0, 6, "abcde", 0, 0, 5);
671    test("abcde", 0, 6, "abcde", 0, 1, 4);
672    test("abcde", 0, 6, "abcde", 0, 2, 3);
673    test("abcde", 0, 6, "abcde", 0, 4, 1);
674    test("abcde", 0, 6, "abcde", 0, 5, 0);
675}
676
677void test6()
678{
679    test("abcde", 0, 6, "abcde", 0, 6, 0);
680    test("abcde", 0, 6, "abcde", 1, 0, 5);
681    test("abcde", 0, 6, "abcde", 1, 1, -1);
682    test("abcde", 0, 6, "abcde", 1, 2, -1);
683    test("abcde", 0, 6, "abcde", 1, 3, -1);
684    test("abcde", 0, 6, "abcde", 1, 4, -1);
685    test("abcde", 0, 6, "abcde", 1, 5, -1);
686    test("abcde", 0, 6, "abcde", 2, 0, 5);
687    test("abcde", 0, 6, "abcde", 2, 1, -2);
688    test("abcde", 0, 6, "abcde", 2, 2, -2);
689    test("abcde", 0, 6, "abcde", 2, 3, -2);
690    test("abcde", 0, 6, "abcde", 2, 4, -2);
691    test("abcde", 0, 6, "abcde", 4, 0, 5);
692    test("abcde", 0, 6, "abcde", 4, 1, -4);
693    test("abcde", 0, 6, "abcde", 4, 2, -4);
694    test("abcde", 0, 6, "abcde", 5, 0, 5);
695    test("abcde", 0, 6, "abcde", 5, 1, 5);
696    test("abcde", 0, 6, "abcde", 6, 0, 0);
697    test("abcde", 0, 6, "abcdefghij", 0, 0, 5);
698    test("abcde", 0, 6, "abcdefghij", 0, 1, 4);
699    test("abcde", 0, 6, "abcdefghij", 0, 5, 0);
700    test("abcde", 0, 6, "abcdefghij", 0, 9, -4);
701    test("abcde", 0, 6, "abcdefghij", 0, 10, -5);
702    test("abcde", 0, 6, "abcdefghij", 0, 11, -5);
703    test("abcde", 0, 6, "abcdefghij", 1, 0, 5);
704    test("abcde", 0, 6, "abcdefghij", 1, 1, -1);
705    test("abcde", 0, 6, "abcdefghij", 1, 4, -1);
706    test("abcde", 0, 6, "abcdefghij", 1, 8, -1);
707    test("abcde", 0, 6, "abcdefghij", 1, 9, -1);
708    test("abcde", 0, 6, "abcdefghij", 1, 10, -1);
709    test("abcde", 0, 6, "abcdefghij", 5, 0, 5);
710    test("abcde", 0, 6, "abcdefghij", 5, 1, -5);
711    test("abcde", 0, 6, "abcdefghij", 5, 2, -5);
712    test("abcde", 0, 6, "abcdefghij", 5, 4, -5);
713    test("abcde", 0, 6, "abcdefghij", 5, 5, -5);
714    test("abcde", 0, 6, "abcdefghij", 5, 6, -5);
715    test("abcde", 0, 6, "abcdefghij", 9, 0, 5);
716    test("abcde", 0, 6, "abcdefghij", 9, 1, -9);
717    test("abcde", 0, 6, "abcdefghij", 9, 2, -9);
718    test("abcde", 0, 6, "abcdefghij", 10, 0, 5);
719    test("abcde", 0, 6, "abcdefghij", 10, 1, 5);
720    test("abcde", 0, 6, "abcdefghij", 11, 0, 0);
721    test("abcde", 0, 6, "abcdefghijklmnopqrst", 0, 0, 5);
722    test("abcde", 0, 6, "abcdefghijklmnopqrst", 0, 1, 4);
723    test("abcde", 0, 6, "abcdefghijklmnopqrst", 0, 10, -5);
724    test("abcde", 0, 6, "abcdefghijklmnopqrst", 0, 19, -14);
725    test("abcde", 0, 6, "abcdefghijklmnopqrst", 0, 20, -15);
726    test("abcde", 0, 6, "abcdefghijklmnopqrst", 0, 21, -15);
727    test("abcde", 0, 6, "abcdefghijklmnopqrst", 1, 0, 5);
728    test("abcde", 0, 6, "abcdefghijklmnopqrst", 1, 1, -1);
729    test("abcde", 0, 6, "abcdefghijklmnopqrst", 1, 9, -1);
730    test("abcde", 0, 6, "abcdefghijklmnopqrst", 1, 18, -1);
731    test("abcde", 0, 6, "abcdefghijklmnopqrst", 1, 19, -1);
732    test("abcde", 0, 6, "abcdefghijklmnopqrst", 1, 20, -1);
733    test("abcde", 0, 6, "abcdefghijklmnopqrst", 10, 0, 5);
734    test("abcde", 0, 6, "abcdefghijklmnopqrst", 10, 1, -10);
735    test("abcde", 0, 6, "abcdefghijklmnopqrst", 10, 5, -10);
736    test("abcde", 0, 6, "abcdefghijklmnopqrst", 10, 9, -10);
737    test("abcde", 0, 6, "abcdefghijklmnopqrst", 10, 10, -10);
738    test("abcde", 0, 6, "abcdefghijklmnopqrst", 10, 11, -10);
739    test("abcde", 0, 6, "abcdefghijklmnopqrst", 19, 0, 5);
740    test("abcde", 0, 6, "abcdefghijklmnopqrst", 19, 1, -19);
741    test("abcde", 0, 6, "abcdefghijklmnopqrst", 19, 2, -19);
742    test("abcde", 0, 6, "abcdefghijklmnopqrst", 20, 0, 5);
743    test("abcde", 0, 6, "abcdefghijklmnopqrst", 20, 1, 5);
744    test("abcde", 0, 6, "abcdefghijklmnopqrst", 21, 0, 0);
745    test("abcde", 1, 0, "", 0, 0, 0);
746    test("abcde", 1, 0, "", 0, 1, 0);
747    test("abcde", 1, 0, "", 1, 0, 0);
748    test("abcde", 1, 0, "abcde", 0, 0, 0);
749    test("abcde", 1, 0, "abcde", 0, 1, -1);
750    test("abcde", 1, 0, "abcde", 0, 2, -2);
751    test("abcde", 1, 0, "abcde", 0, 4, -4);
752    test("abcde", 1, 0, "abcde", 0, 5, -5);
753    test("abcde", 1, 0, "abcde", 0, 6, -5);
754    test("abcde", 1, 0, "abcde", 1, 0, 0);
755    test("abcde", 1, 0, "abcde", 1, 1, -1);
756    test("abcde", 1, 0, "abcde", 1, 2, -2);
757    test("abcde", 1, 0, "abcde", 1, 3, -3);
758    test("abcde", 1, 0, "abcde", 1, 4, -4);
759    test("abcde", 1, 0, "abcde", 1, 5, -4);
760    test("abcde", 1, 0, "abcde", 2, 0, 0);
761    test("abcde", 1, 0, "abcde", 2, 1, -1);
762    test("abcde", 1, 0, "abcde", 2, 2, -2);
763    test("abcde", 1, 0, "abcde", 2, 3, -3);
764    test("abcde", 1, 0, "abcde", 2, 4, -3);
765    test("abcde", 1, 0, "abcde", 4, 0, 0);
766    test("abcde", 1, 0, "abcde", 4, 1, -1);
767    test("abcde", 1, 0, "abcde", 4, 2, -1);
768    test("abcde", 1, 0, "abcde", 5, 0, 0);
769    test("abcde", 1, 0, "abcde", 5, 1, 0);
770    test("abcde", 1, 0, "abcde", 6, 0, 0);
771    test("abcde", 1, 0, "abcdefghij", 0, 0, 0);
772    test("abcde", 1, 0, "abcdefghij", 0, 1, -1);
773    test("abcde", 1, 0, "abcdefghij", 0, 5, -5);
774    test("abcde", 1, 0, "abcdefghij", 0, 9, -9);
775    test("abcde", 1, 0, "abcdefghij", 0, 10, -10);
776    test("abcde", 1, 0, "abcdefghij", 0, 11, -10);
777    test("abcde", 1, 0, "abcdefghij", 1, 0, 0);
778    test("abcde", 1, 0, "abcdefghij", 1, 1, -1);
779}
780
781void test7()
782{
783    test("abcde", 1, 0, "abcdefghij", 1, 4, -4);
784    test("abcde", 1, 0, "abcdefghij", 1, 8, -8);
785    test("abcde", 1, 0, "abcdefghij", 1, 9, -9);
786    test("abcde", 1, 0, "abcdefghij", 1, 10, -9);
787    test("abcde", 1, 0, "abcdefghij", 5, 0, 0);
788    test("abcde", 1, 0, "abcdefghij", 5, 1, -1);
789    test("abcde", 1, 0, "abcdefghij", 5, 2, -2);
790    test("abcde", 1, 0, "abcdefghij", 5, 4, -4);
791    test("abcde", 1, 0, "abcdefghij", 5, 5, -5);
792    test("abcde", 1, 0, "abcdefghij", 5, 6, -5);
793    test("abcde", 1, 0, "abcdefghij", 9, 0, 0);
794    test("abcde", 1, 0, "abcdefghij", 9, 1, -1);
795    test("abcde", 1, 0, "abcdefghij", 9, 2, -1);
796    test("abcde", 1, 0, "abcdefghij", 10, 0, 0);
797    test("abcde", 1, 0, "abcdefghij", 10, 1, 0);
798    test("abcde", 1, 0, "abcdefghij", 11, 0, 0);
799    test("abcde", 1, 0, "abcdefghijklmnopqrst", 0, 0, 0);
800    test("abcde", 1, 0, "abcdefghijklmnopqrst", 0, 1, -1);
801    test("abcde", 1, 0, "abcdefghijklmnopqrst", 0, 10, -10);
802    test("abcde", 1, 0, "abcdefghijklmnopqrst", 0, 19, -19);
803    test("abcde", 1, 0, "abcdefghijklmnopqrst", 0, 20, -20);
804    test("abcde", 1, 0, "abcdefghijklmnopqrst", 0, 21, -20);
805    test("abcde", 1, 0, "abcdefghijklmnopqrst", 1, 0, 0);
806    test("abcde", 1, 0, "abcdefghijklmnopqrst", 1, 1, -1);
807    test("abcde", 1, 0, "abcdefghijklmnopqrst", 1, 9, -9);
808    test("abcde", 1, 0, "abcdefghijklmnopqrst", 1, 18, -18);
809    test("abcde", 1, 0, "abcdefghijklmnopqrst", 1, 19, -19);
810    test("abcde", 1, 0, "abcdefghijklmnopqrst", 1, 20, -19);
811    test("abcde", 1, 0, "abcdefghijklmnopqrst", 10, 0, 0);
812    test("abcde", 1, 0, "abcdefghijklmnopqrst", 10, 1, -1);
813    test("abcde", 1, 0, "abcdefghijklmnopqrst", 10, 5, -5);
814    test("abcde", 1, 0, "abcdefghijklmnopqrst", 10, 9, -9);
815    test("abcde", 1, 0, "abcdefghijklmnopqrst", 10, 10, -10);
816    test("abcde", 1, 0, "abcdefghijklmnopqrst", 10, 11, -10);
817    test("abcde", 1, 0, "abcdefghijklmnopqrst", 19, 0, 0);
818    test("abcde", 1, 0, "abcdefghijklmnopqrst", 19, 1, -1);
819    test("abcde", 1, 0, "abcdefghijklmnopqrst", 19, 2, -1);
820    test("abcde", 1, 0, "abcdefghijklmnopqrst", 20, 0, 0);
821    test("abcde", 1, 0, "abcdefghijklmnopqrst", 20, 1, 0);
822    test("abcde", 1, 0, "abcdefghijklmnopqrst", 21, 0, 0);
823    test("abcde", 1, 1, "", 0, 0, 1);
824    test("abcde", 1, 1, "", 0, 1, 1);
825    test("abcde", 1, 1, "", 1, 0, 0);
826    test("abcde", 1, 1, "abcde", 0, 0, 1);
827    test("abcde", 1, 1, "abcde", 0, 1, 1);
828    test("abcde", 1, 1, "abcde", 0, 2, 1);
829    test("abcde", 1, 1, "abcde", 0, 4, 1);
830    test("abcde", 1, 1, "abcde", 0, 5, 1);
831    test("abcde", 1, 1, "abcde", 0, 6, 1);
832    test("abcde", 1, 1, "abcde", 1, 0, 1);
833    test("abcde", 1, 1, "abcde", 1, 1, 0);
834    test("abcde", 1, 1, "abcde", 1, 2, -1);
835    test("abcde", 1, 1, "abcde", 1, 3, -2);
836    test("abcde", 1, 1, "abcde", 1, 4, -3);
837    test("abcde", 1, 1, "abcde", 1, 5, -3);
838    test("abcde", 1, 1, "abcde", 2, 0, 1);
839    test("abcde", 1, 1, "abcde", 2, 1, -1);
840    test("abcde", 1, 1, "abcde", 2, 2, -1);
841    test("abcde", 1, 1, "abcde", 2, 3, -1);
842    test("abcde", 1, 1, "abcde", 2, 4, -1);
843    test("abcde", 1, 1, "abcde", 4, 0, 1);
844    test("abcde", 1, 1, "abcde", 4, 1, -3);
845    test("abcde", 1, 1, "abcde", 4, 2, -3);
846    test("abcde", 1, 1, "abcde", 5, 0, 1);
847    test("abcde", 1, 1, "abcde", 5, 1, 1);
848    test("abcde", 1, 1, "abcde", 6, 0, 0);
849    test("abcde", 1, 1, "abcdefghij", 0, 0, 1);
850    test("abcde", 1, 1, "abcdefghij", 0, 1, 1);
851    test("abcde", 1, 1, "abcdefghij", 0, 5, 1);
852    test("abcde", 1, 1, "abcdefghij", 0, 9, 1);
853    test("abcde", 1, 1, "abcdefghij", 0, 10, 1);
854    test("abcde", 1, 1, "abcdefghij", 0, 11, 1);
855    test("abcde", 1, 1, "abcdefghij", 1, 0, 1);
856    test("abcde", 1, 1, "abcdefghij", 1, 1, 0);
857    test("abcde", 1, 1, "abcdefghij", 1, 4, -3);
858    test("abcde", 1, 1, "abcdefghij", 1, 8, -7);
859    test("abcde", 1, 1, "abcdefghij", 1, 9, -8);
860    test("abcde", 1, 1, "abcdefghij", 1, 10, -8);
861    test("abcde", 1, 1, "abcdefghij", 5, 0, 1);
862    test("abcde", 1, 1, "abcdefghij", 5, 1, -4);
863    test("abcde", 1, 1, "abcdefghij", 5, 2, -4);
864    test("abcde", 1, 1, "abcdefghij", 5, 4, -4);
865    test("abcde", 1, 1, "abcdefghij", 5, 5, -4);
866    test("abcde", 1, 1, "abcdefghij", 5, 6, -4);
867    test("abcde", 1, 1, "abcdefghij", 9, 0, 1);
868    test("abcde", 1, 1, "abcdefghij", 9, 1, -8);
869    test("abcde", 1, 1, "abcdefghij", 9, 2, -8);
870    test("abcde", 1, 1, "abcdefghij", 10, 0, 1);
871    test("abcde", 1, 1, "abcdefghij", 10, 1, 1);
872    test("abcde", 1, 1, "abcdefghij", 11, 0, 0);
873    test("abcde", 1, 1, "abcdefghijklmnopqrst", 0, 0, 1);
874    test("abcde", 1, 1, "abcdefghijklmnopqrst", 0, 1, 1);
875    test("abcde", 1, 1, "abcdefghijklmnopqrst", 0, 10, 1);
876    test("abcde", 1, 1, "abcdefghijklmnopqrst", 0, 19, 1);
877    test("abcde", 1, 1, "abcdefghijklmnopqrst", 0, 20, 1);
878    test("abcde", 1, 1, "abcdefghijklmnopqrst", 0, 21, 1);
879    test("abcde", 1, 1, "abcdefghijklmnopqrst", 1, 0, 1);
880    test("abcde", 1, 1, "abcdefghijklmnopqrst", 1, 1, 0);
881    test("abcde", 1, 1, "abcdefghijklmnopqrst", 1, 9, -8);
882    test("abcde", 1, 1, "abcdefghijklmnopqrst", 1, 18, -17);
883}
884
885void test8()
886{
887    test("abcde", 1, 1, "abcdefghijklmnopqrst", 1, 19, -18);
888    test("abcde", 1, 1, "abcdefghijklmnopqrst", 1, 20, -18);
889    test("abcde", 1, 1, "abcdefghijklmnopqrst", 10, 0, 1);
890    test("abcde", 1, 1, "abcdefghijklmnopqrst", 10, 1, -9);
891    test("abcde", 1, 1, "abcdefghijklmnopqrst", 10, 5, -9);
892    test("abcde", 1, 1, "abcdefghijklmnopqrst", 10, 9, -9);
893    test("abcde", 1, 1, "abcdefghijklmnopqrst", 10, 10, -9);
894    test("abcde", 1, 1, "abcdefghijklmnopqrst", 10, 11, -9);
895    test("abcde", 1, 1, "abcdefghijklmnopqrst", 19, 0, 1);
896    test("abcde", 1, 1, "abcdefghijklmnopqrst", 19, 1, -18);
897    test("abcde", 1, 1, "abcdefghijklmnopqrst", 19, 2, -18);
898    test("abcde", 1, 1, "abcdefghijklmnopqrst", 20, 0, 1);
899    test("abcde", 1, 1, "abcdefghijklmnopqrst", 20, 1, 1);
900    test("abcde", 1, 1, "abcdefghijklmnopqrst", 21, 0, 0);
901    test("abcde", 1, 2, "", 0, 0, 2);
902    test("abcde", 1, 2, "", 0, 1, 2);
903    test("abcde", 1, 2, "", 1, 0, 0);
904    test("abcde", 1, 2, "abcde", 0, 0, 2);
905    test("abcde", 1, 2, "abcde", 0, 1, 1);
906    test("abcde", 1, 2, "abcde", 0, 2, 1);
907    test("abcde", 1, 2, "abcde", 0, 4, 1);
908    test("abcde", 1, 2, "abcde", 0, 5, 1);
909    test("abcde", 1, 2, "abcde", 0, 6, 1);
910    test("abcde", 1, 2, "abcde", 1, 0, 2);
911    test("abcde", 1, 2, "abcde", 1, 1, 1);
912    test("abcde", 1, 2, "abcde", 1, 2, 0);
913    test("abcde", 1, 2, "abcde", 1, 3, -1);
914    test("abcde", 1, 2, "abcde", 1, 4, -2);
915    test("abcde", 1, 2, "abcde", 1, 5, -2);
916    test("abcde", 1, 2, "abcde", 2, 0, 2);
917    test("abcde", 1, 2, "abcde", 2, 1, -1);
918    test("abcde", 1, 2, "abcde", 2, 2, -1);
919    test("abcde", 1, 2, "abcde", 2, 3, -1);
920    test("abcde", 1, 2, "abcde", 2, 4, -1);
921    test("abcde", 1, 2, "abcde", 4, 0, 2);
922    test("abcde", 1, 2, "abcde", 4, 1, -3);
923    test("abcde", 1, 2, "abcde", 4, 2, -3);
924    test("abcde", 1, 2, "abcde", 5, 0, 2);
925    test("abcde", 1, 2, "abcde", 5, 1, 2);
926    test("abcde", 1, 2, "abcde", 6, 0, 0);
927    test("abcde", 1, 2, "abcdefghij", 0, 0, 2);
928    test("abcde", 1, 2, "abcdefghij", 0, 1, 1);
929    test("abcde", 1, 2, "abcdefghij", 0, 5, 1);
930    test("abcde", 1, 2, "abcdefghij", 0, 9, 1);
931    test("abcde", 1, 2, "abcdefghij", 0, 10, 1);
932    test("abcde", 1, 2, "abcdefghij", 0, 11, 1);
933    test("abcde", 1, 2, "abcdefghij", 1, 0, 2);
934    test("abcde", 1, 2, "abcdefghij", 1, 1, 1);
935    test("abcde", 1, 2, "abcdefghij", 1, 4, -2);
936    test("abcde", 1, 2, "abcdefghij", 1, 8, -6);
937    test("abcde", 1, 2, "abcdefghij", 1, 9, -7);
938    test("abcde", 1, 2, "abcdefghij", 1, 10, -7);
939    test("abcde", 1, 2, "abcdefghij", 5, 0, 2);
940    test("abcde", 1, 2, "abcdefghij", 5, 1, -4);
941    test("abcde", 1, 2, "abcdefghij", 5, 2, -4);
942    test("abcde", 1, 2, "abcdefghij", 5, 4, -4);
943    test("abcde", 1, 2, "abcdefghij", 5, 5, -4);
944    test("abcde", 1, 2, "abcdefghij", 5, 6, -4);
945    test("abcde", 1, 2, "abcdefghij", 9, 0, 2);
946    test("abcde", 1, 2, "abcdefghij", 9, 1, -8);
947    test("abcde", 1, 2, "abcdefghij", 9, 2, -8);
948    test("abcde", 1, 2, "abcdefghij", 10, 0, 2);
949    test("abcde", 1, 2, "abcdefghij", 10, 1, 2);
950    test("abcde", 1, 2, "abcdefghij", 11, 0, 0);
951    test("abcde", 1, 2, "abcdefghijklmnopqrst", 0, 0, 2);
952    test("abcde", 1, 2, "abcdefghijklmnopqrst", 0, 1, 1);
953    test("abcde", 1, 2, "abcdefghijklmnopqrst", 0, 10, 1);
954    test("abcde", 1, 2, "abcdefghijklmnopqrst", 0, 19, 1);
955    test("abcde", 1, 2, "abcdefghijklmnopqrst", 0, 20, 1);
956    test("abcde", 1, 2, "abcdefghijklmnopqrst", 0, 21, 1);
957    test("abcde", 1, 2, "abcdefghijklmnopqrst", 1, 0, 2);
958    test("abcde", 1, 2, "abcdefghijklmnopqrst", 1, 1, 1);
959    test("abcde", 1, 2, "abcdefghijklmnopqrst", 1, 9, -7);
960    test("abcde", 1, 2, "abcdefghijklmnopqrst", 1, 18, -16);
961    test("abcde", 1, 2, "abcdefghijklmnopqrst", 1, 19, -17);
962    test("abcde", 1, 2, "abcdefghijklmnopqrst", 1, 20, -17);
963    test("abcde", 1, 2, "abcdefghijklmnopqrst", 10, 0, 2);
964    test("abcde", 1, 2, "abcdefghijklmnopqrst", 10, 1, -9);
965    test("abcde", 1, 2, "abcdefghijklmnopqrst", 10, 5, -9);
966    test("abcde", 1, 2, "abcdefghijklmnopqrst", 10, 9, -9);
967    test("abcde", 1, 2, "abcdefghijklmnopqrst", 10, 10, -9);
968    test("abcde", 1, 2, "abcdefghijklmnopqrst", 10, 11, -9);
969    test("abcde", 1, 2, "abcdefghijklmnopqrst", 19, 0, 2);
970    test("abcde", 1, 2, "abcdefghijklmnopqrst", 19, 1, -18);
971    test("abcde", 1, 2, "abcdefghijklmnopqrst", 19, 2, -18);
972    test("abcde", 1, 2, "abcdefghijklmnopqrst", 20, 0, 2);
973    test("abcde", 1, 2, "abcdefghijklmnopqrst", 20, 1, 2);
974    test("abcde", 1, 2, "abcdefghijklmnopqrst", 21, 0, 0);
975    test("abcde", 1, 3, "", 0, 0, 3);
976    test("abcde", 1, 3, "", 0, 1, 3);
977    test("abcde", 1, 3, "", 1, 0, 0);
978    test("abcde", 1, 3, "abcde", 0, 0, 3);
979    test("abcde", 1, 3, "abcde", 0, 1, 1);
980    test("abcde", 1, 3, "abcde", 0, 2, 1);
981    test("abcde", 1, 3, "abcde", 0, 4, 1);
982    test("abcde", 1, 3, "abcde", 0, 5, 1);
983    test("abcde", 1, 3, "abcde", 0, 6, 1);
984    test("abcde", 1, 3, "abcde", 1, 0, 3);
985    test("abcde", 1, 3, "abcde", 1, 1, 2);
986    test("abcde", 1, 3, "abcde", 1, 2, 1);
987}
988
989void test9()
990{
991    test("abcde", 1, 3, "abcde", 1, 3, 0);
992    test("abcde", 1, 3, "abcde", 1, 4, -1);
993    test("abcde", 1, 3, "abcde", 1, 5, -1);
994    test("abcde", 1, 3, "abcde", 2, 0, 3);
995    test("abcde", 1, 3, "abcde", 2, 1, -1);
996    test("abcde", 1, 3, "abcde", 2, 2, -1);
997    test("abcde", 1, 3, "abcde", 2, 3, -1);
998    test("abcde", 1, 3, "abcde", 2, 4, -1);
999    test("abcde", 1, 3, "abcde", 4, 0, 3);
1000    test("abcde", 1, 3, "abcde", 4, 1, -3);
1001    test("abcde", 1, 3, "abcde", 4, 2, -3);
1002    test("abcde", 1, 3, "abcde", 5, 0, 3);
1003    test("abcde", 1, 3, "abcde", 5, 1, 3);
1004    test("abcde", 1, 3, "abcde", 6, 0, 0);
1005    test("abcde", 1, 3, "abcdefghij", 0, 0, 3);
1006    test("abcde", 1, 3, "abcdefghij", 0, 1, 1);
1007    test("abcde", 1, 3, "abcdefghij", 0, 5, 1);
1008    test("abcde", 1, 3, "abcdefghij", 0, 9, 1);
1009    test("abcde", 1, 3, "abcdefghij", 0, 10, 1);
1010    test("abcde", 1, 3, "abcdefghij", 0, 11, 1);
1011    test("abcde", 1, 3, "abcdefghij", 1, 0, 3);
1012    test("abcde", 1, 3, "abcdefghij", 1, 1, 2);
1013    test("abcde", 1, 3, "abcdefghij", 1, 4, -1);
1014    test("abcde", 1, 3, "abcdefghij", 1, 8, -5);
1015    test("abcde", 1, 3, "abcdefghij", 1, 9, -6);
1016    test("abcde", 1, 3, "abcdefghij", 1, 10, -6);
1017    test("abcde", 1, 3, "abcdefghij", 5, 0, 3);
1018    test("abcde", 1, 3, "abcdefghij", 5, 1, -4);
1019    test("abcde", 1, 3, "abcdefghij", 5, 2, -4);
1020    test("abcde", 1, 3, "abcdefghij", 5, 4, -4);
1021    test("abcde", 1, 3, "abcdefghij", 5, 5, -4);
1022    test("abcde", 1, 3, "abcdefghij", 5, 6, -4);
1023    test("abcde", 1, 3, "abcdefghij", 9, 0, 3);
1024    test("abcde", 1, 3, "abcdefghij", 9, 1, -8);
1025    test("abcde", 1, 3, "abcdefghij", 9, 2, -8);
1026    test("abcde", 1, 3, "abcdefghij", 10, 0, 3);
1027    test("abcde", 1, 3, "abcdefghij", 10, 1, 3);
1028    test("abcde", 1, 3, "abcdefghij", 11, 0, 0);
1029    test("abcde", 1, 3, "abcdefghijklmnopqrst", 0, 0, 3);
1030    test("abcde", 1, 3, "abcdefghijklmnopqrst", 0, 1, 1);
1031    test("abcde", 1, 3, "abcdefghijklmnopqrst", 0, 10, 1);
1032    test("abcde", 1, 3, "abcdefghijklmnopqrst", 0, 19, 1);
1033    test("abcde", 1, 3, "abcdefghijklmnopqrst", 0, 20, 1);
1034    test("abcde", 1, 3, "abcdefghijklmnopqrst", 0, 21, 1);
1035    test("abcde", 1, 3, "abcdefghijklmnopqrst", 1, 0, 3);
1036    test("abcde", 1, 3, "abcdefghijklmnopqrst", 1, 1, 2);
1037    test("abcde", 1, 3, "abcdefghijklmnopqrst", 1, 9, -6);
1038    test("abcde", 1, 3, "abcdefghijklmnopqrst", 1, 18, -15);
1039    test("abcde", 1, 3, "abcdefghijklmnopqrst", 1, 19, -16);
1040    test("abcde", 1, 3, "abcdefghijklmnopqrst", 1, 20, -16);
1041    test("abcde", 1, 3, "abcdefghijklmnopqrst", 10, 0, 3);
1042    test("abcde", 1, 3, "abcdefghijklmnopqrst", 10, 1, -9);
1043    test("abcde", 1, 3, "abcdefghijklmnopqrst", 10, 5, -9);
1044    test("abcde", 1, 3, "abcdefghijklmnopqrst", 10, 9, -9);
1045    test("abcde", 1, 3, "abcdefghijklmnopqrst", 10, 10, -9);
1046    test("abcde", 1, 3, "abcdefghijklmnopqrst", 10, 11, -9);
1047    test("abcde", 1, 3, "abcdefghijklmnopqrst", 19, 0, 3);
1048    test("abcde", 1, 3, "abcdefghijklmnopqrst", 19, 1, -18);
1049    test("abcde", 1, 3, "abcdefghijklmnopqrst", 19, 2, -18);
1050    test("abcde", 1, 3, "abcdefghijklmnopqrst", 20, 0, 3);
1051    test("abcde", 1, 3, "abcdefghijklmnopqrst", 20, 1, 3);
1052    test("abcde", 1, 3, "abcdefghijklmnopqrst", 21, 0, 0);
1053    test("abcde", 1, 4, "", 0, 0, 4);
1054    test("abcde", 1, 4, "", 0, 1, 4);
1055    test("abcde", 1, 4, "", 1, 0, 0);
1056    test("abcde", 1, 4, "abcde", 0, 0, 4);
1057    test("abcde", 1, 4, "abcde", 0, 1, 1);
1058    test("abcde", 1, 4, "abcde", 0, 2, 1);
1059    test("abcde", 1, 4, "abcde", 0, 4, 1);
1060    test("abcde", 1, 4, "abcde", 0, 5, 1);
1061    test("abcde", 1, 4, "abcde", 0, 6, 1);
1062    test("abcde", 1, 4, "abcde", 1, 0, 4);
1063    test("abcde", 1, 4, "abcde", 1, 1, 3);
1064    test("abcde", 1, 4, "abcde", 1, 2, 2);
1065    test("abcde", 1, 4, "abcde", 1, 3, 1);
1066    test("abcde", 1, 4, "abcde", 1, 4, 0);
1067    test("abcde", 1, 4, "abcde", 1, 5, 0);
1068    test("abcde", 1, 4, "abcde", 2, 0, 4);
1069    test("abcde", 1, 4, "abcde", 2, 1, -1);
1070    test("abcde", 1, 4, "abcde", 2, 2, -1);
1071    test("abcde", 1, 4, "abcde", 2, 3, -1);
1072    test("abcde", 1, 4, "abcde", 2, 4, -1);
1073    test("abcde", 1, 4, "abcde", 4, 0, 4);
1074    test("abcde", 1, 4, "abcde", 4, 1, -3);
1075    test("abcde", 1, 4, "abcde", 4, 2, -3);
1076    test("abcde", 1, 4, "abcde", 5, 0, 4);
1077    test("abcde", 1, 4, "abcde", 5, 1, 4);
1078    test("abcde", 1, 4, "abcde", 6, 0, 0);
1079    test("abcde", 1, 4, "abcdefghij", 0, 0, 4);
1080    test("abcde", 1, 4, "abcdefghij", 0, 1, 1);
1081    test("abcde", 1, 4, "abcdefghij", 0, 5, 1);
1082    test("abcde", 1, 4, "abcdefghij", 0, 9, 1);
1083    test("abcde", 1, 4, "abcdefghij", 0, 10, 1);
1084    test("abcde", 1, 4, "abcdefghij", 0, 11, 1);
1085    test("abcde", 1, 4, "abcdefghij", 1, 0, 4);
1086    test("abcde", 1, 4, "abcdefghij", 1, 1, 3);
1087    test("abcde", 1, 4, "abcdefghij", 1, 4, 0);
1088    test("abcde", 1, 4, "abcdefghij", 1, 8, -4);
1089    test("abcde", 1, 4, "abcdefghij", 1, 9, -5);
1090    test("abcde", 1, 4, "abcdefghij", 1, 10, -5);
1091}
1092
1093void test10()
1094{
1095    test("abcde", 1, 4, "abcdefghij", 5, 0, 4);
1096    test("abcde", 1, 4, "abcdefghij", 5, 1, -4);
1097    test("abcde", 1, 4, "abcdefghij", 5, 2, -4);
1098    test("abcde", 1, 4, "abcdefghij", 5, 4, -4);
1099    test("abcde", 1, 4, "abcdefghij", 5, 5, -4);
1100    test("abcde", 1, 4, "abcdefghij", 5, 6, -4);
1101    test("abcde", 1, 4, "abcdefghij", 9, 0, 4);
1102    test("abcde", 1, 4, "abcdefghij", 9, 1, -8);
1103    test("abcde", 1, 4, "abcdefghij", 9, 2, -8);
1104    test("abcde", 1, 4, "abcdefghij", 10, 0, 4);
1105    test("abcde", 1, 4, "abcdefghij", 10, 1, 4);
1106    test("abcde", 1, 4, "abcdefghij", 11, 0, 0);
1107    test("abcde", 1, 4, "abcdefghijklmnopqrst", 0, 0, 4);
1108    test("abcde", 1, 4, "abcdefghijklmnopqrst", 0, 1, 1);
1109    test("abcde", 1, 4, "abcdefghijklmnopqrst", 0, 10, 1);
1110    test("abcde", 1, 4, "abcdefghijklmnopqrst", 0, 19, 1);
1111    test("abcde", 1, 4, "abcdefghijklmnopqrst", 0, 20, 1);
1112    test("abcde", 1, 4, "abcdefghijklmnopqrst", 0, 21, 1);
1113    test("abcde", 1, 4, "abcdefghijklmnopqrst", 1, 0, 4);
1114    test("abcde", 1, 4, "abcdefghijklmnopqrst", 1, 1, 3);
1115    test("abcde", 1, 4, "abcdefghijklmnopqrst", 1, 9, -5);
1116    test("abcde", 1, 4, "abcdefghijklmnopqrst", 1, 18, -14);
1117    test("abcde", 1, 4, "abcdefghijklmnopqrst", 1, 19, -15);
1118    test("abcde", 1, 4, "abcdefghijklmnopqrst", 1, 20, -15);
1119    test("abcde", 1, 4, "abcdefghijklmnopqrst", 10, 0, 4);
1120    test("abcde", 1, 4, "abcdefghijklmnopqrst", 10, 1, -9);
1121    test("abcde", 1, 4, "abcdefghijklmnopqrst", 10, 5, -9);
1122    test("abcde", 1, 4, "abcdefghijklmnopqrst", 10, 9, -9);
1123    test("abcde", 1, 4, "abcdefghijklmnopqrst", 10, 10, -9);
1124    test("abcde", 1, 4, "abcdefghijklmnopqrst", 10, 11, -9);
1125    test("abcde", 1, 4, "abcdefghijklmnopqrst", 19, 0, 4);
1126    test("abcde", 1, 4, "abcdefghijklmnopqrst", 19, 1, -18);
1127    test("abcde", 1, 4, "abcdefghijklmnopqrst", 19, 2, -18);
1128    test("abcde", 1, 4, "abcdefghijklmnopqrst", 20, 0, 4);
1129    test("abcde", 1, 4, "abcdefghijklmnopqrst", 20, 1, 4);
1130    test("abcde", 1, 4, "abcdefghijklmnopqrst", 21, 0, 0);
1131    test("abcde", 1, 5, "", 0, 0, 4);
1132    test("abcde", 1, 5, "", 0, 1, 4);
1133    test("abcde", 1, 5, "", 1, 0, 0);
1134    test("abcde", 1, 5, "abcde", 0, 0, 4);
1135    test("abcde", 1, 5, "abcde", 0, 1, 1);
1136    test("abcde", 1, 5, "abcde", 0, 2, 1);
1137    test("abcde", 1, 5, "abcde", 0, 4, 1);
1138    test("abcde", 1, 5, "abcde", 0, 5, 1);
1139    test("abcde", 1, 5, "abcde", 0, 6, 1);
1140    test("abcde", 1, 5, "abcde", 1, 0, 4);
1141    test("abcde", 1, 5, "abcde", 1, 1, 3);
1142    test("abcde", 1, 5, "abcde", 1, 2, 2);
1143    test("abcde", 1, 5, "abcde", 1, 3, 1);
1144    test("abcde", 1, 5, "abcde", 1, 4, 0);
1145    test("abcde", 1, 5, "abcde", 1, 5, 0);
1146    test("abcde", 1, 5, "abcde", 2, 0, 4);
1147    test("abcde", 1, 5, "abcde", 2, 1, -1);
1148    test("abcde", 1, 5, "abcde", 2, 2, -1);
1149    test("abcde", 1, 5, "abcde", 2, 3, -1);
1150    test("abcde", 1, 5, "abcde", 2, 4, -1);
1151    test("abcde", 1, 5, "abcde", 4, 0, 4);
1152    test("abcde", 1, 5, "abcde", 4, 1, -3);
1153    test("abcde", 1, 5, "abcde", 4, 2, -3);
1154    test("abcde", 1, 5, "abcde", 5, 0, 4);
1155    test("abcde", 1, 5, "abcde", 5, 1, 4);
1156    test("abcde", 1, 5, "abcde", 6, 0, 0);
1157    test("abcde", 1, 5, "abcdefghij", 0, 0, 4);
1158    test("abcde", 1, 5, "abcdefghij", 0, 1, 1);
1159    test("abcde", 1, 5, "abcdefghij", 0, 5, 1);
1160    test("abcde", 1, 5, "abcdefghij", 0, 9, 1);
1161    test("abcde", 1, 5, "abcdefghij", 0, 10, 1);
1162    test("abcde", 1, 5, "abcdefghij", 0, 11, 1);
1163    test("abcde", 1, 5, "abcdefghij", 1, 0, 4);
1164    test("abcde", 1, 5, "abcdefghij", 1, 1, 3);
1165    test("abcde", 1, 5, "abcdefghij", 1, 4, 0);
1166    test("abcde", 1, 5, "abcdefghij", 1, 8, -4);
1167    test("abcde", 1, 5, "abcdefghij", 1, 9, -5);
1168    test("abcde", 1, 5, "abcdefghij", 1, 10, -5);
1169    test("abcde", 1, 5, "abcdefghij", 5, 0, 4);
1170    test("abcde", 1, 5, "abcdefghij", 5, 1, -4);
1171    test("abcde", 1, 5, "abcdefghij", 5, 2, -4);
1172    test("abcde", 1, 5, "abcdefghij", 5, 4, -4);
1173    test("abcde", 1, 5, "abcdefghij", 5, 5, -4);
1174    test("abcde", 1, 5, "abcdefghij", 5, 6, -4);
1175    test("abcde", 1, 5, "abcdefghij", 9, 0, 4);
1176    test("abcde", 1, 5, "abcdefghij", 9, 1, -8);
1177    test("abcde", 1, 5, "abcdefghij", 9, 2, -8);
1178    test("abcde", 1, 5, "abcdefghij", 10, 0, 4);
1179    test("abcde", 1, 5, "abcdefghij", 10, 1, 4);
1180    test("abcde", 1, 5, "abcdefghij", 11, 0, 0);
1181    test("abcde", 1, 5, "abcdefghijklmnopqrst", 0, 0, 4);
1182    test("abcde", 1, 5, "abcdefghijklmnopqrst", 0, 1, 1);
1183    test("abcde", 1, 5, "abcdefghijklmnopqrst", 0, 10, 1);
1184    test("abcde", 1, 5, "abcdefghijklmnopqrst", 0, 19, 1);
1185    test("abcde", 1, 5, "abcdefghijklmnopqrst", 0, 20, 1);
1186    test("abcde", 1, 5, "abcdefghijklmnopqrst", 0, 21, 1);
1187    test("abcde", 1, 5, "abcdefghijklmnopqrst", 1, 0, 4);
1188    test("abcde", 1, 5, "abcdefghijklmnopqrst", 1, 1, 3);
1189    test("abcde", 1, 5, "abcdefghijklmnopqrst", 1, 9, -5);
1190    test("abcde", 1, 5, "abcdefghijklmnopqrst", 1, 18, -14);
1191    test("abcde", 1, 5, "abcdefghijklmnopqrst", 1, 19, -15);
1192    test("abcde", 1, 5, "abcdefghijklmnopqrst", 1, 20, -15);
1193    test("abcde", 1, 5, "abcdefghijklmnopqrst", 10, 0, 4);
1194    test("abcde", 1, 5, "abcdefghijklmnopqrst", 10, 1, -9);
1195}
1196
1197void test11()
1198{
1199    test("abcde", 1, 5, "abcdefghijklmnopqrst", 10, 5, -9);
1200    test("abcde", 1, 5, "abcdefghijklmnopqrst", 10, 9, -9);
1201    test("abcde", 1, 5, "abcdefghijklmnopqrst", 10, 10, -9);
1202    test("abcde", 1, 5, "abcdefghijklmnopqrst", 10, 11, -9);
1203    test("abcde", 1, 5, "abcdefghijklmnopqrst", 19, 0, 4);
1204    test("abcde", 1, 5, "abcdefghijklmnopqrst", 19, 1, -18);
1205    test("abcde", 1, 5, "abcdefghijklmnopqrst", 19, 2, -18);
1206    test("abcde", 1, 5, "abcdefghijklmnopqrst", 20, 0, 4);
1207    test("abcde", 1, 5, "abcdefghijklmnopqrst", 20, 1, 4);
1208    test("abcde", 1, 5, "abcdefghijklmnopqrst", 21, 0, 0);
1209    test("abcde", 2, 0, "", 0, 0, 0);
1210    test("abcde", 2, 0, "", 0, 1, 0);
1211    test("abcde", 2, 0, "", 1, 0, 0);
1212    test("abcde", 2, 0, "abcde", 0, 0, 0);
1213    test("abcde", 2, 0, "abcde", 0, 1, -1);
1214    test("abcde", 2, 0, "abcde", 0, 2, -2);
1215    test("abcde", 2, 0, "abcde", 0, 4, -4);
1216    test("abcde", 2, 0, "abcde", 0, 5, -5);
1217    test("abcde", 2, 0, "abcde", 0, 6, -5);
1218    test("abcde", 2, 0, "abcde", 1, 0, 0);
1219    test("abcde", 2, 0, "abcde", 1, 1, -1);
1220    test("abcde", 2, 0, "abcde", 1, 2, -2);
1221    test("abcde", 2, 0, "abcde", 1, 3, -3);
1222    test("abcde", 2, 0, "abcde", 1, 4, -4);
1223    test("abcde", 2, 0, "abcde", 1, 5, -4);
1224    test("abcde", 2, 0, "abcde", 2, 0, 0);
1225    test("abcde", 2, 0, "abcde", 2, 1, -1);
1226    test("abcde", 2, 0, "abcde", 2, 2, -2);
1227    test("abcde", 2, 0, "abcde", 2, 3, -3);
1228    test("abcde", 2, 0, "abcde", 2, 4, -3);
1229    test("abcde", 2, 0, "abcde", 4, 0, 0);
1230    test("abcde", 2, 0, "abcde", 4, 1, -1);
1231    test("abcde", 2, 0, "abcde", 4, 2, -1);
1232    test("abcde", 2, 0, "abcde", 5, 0, 0);
1233    test("abcde", 2, 0, "abcde", 5, 1, 0);
1234    test("abcde", 2, 0, "abcde", 6, 0, 0);
1235    test("abcde", 2, 0, "abcdefghij", 0, 0, 0);
1236    test("abcde", 2, 0, "abcdefghij", 0, 1, -1);
1237    test("abcde", 2, 0, "abcdefghij", 0, 5, -5);
1238    test("abcde", 2, 0, "abcdefghij", 0, 9, -9);
1239    test("abcde", 2, 0, "abcdefghij", 0, 10, -10);
1240    test("abcde", 2, 0, "abcdefghij", 0, 11, -10);
1241    test("abcde", 2, 0, "abcdefghij", 1, 0, 0);
1242    test("abcde", 2, 0, "abcdefghij", 1, 1, -1);
1243    test("abcde", 2, 0, "abcdefghij", 1, 4, -4);
1244    test("abcde", 2, 0, "abcdefghij", 1, 8, -8);
1245    test("abcde", 2, 0, "abcdefghij", 1, 9, -9);
1246    test("abcde", 2, 0, "abcdefghij", 1, 10, -9);
1247    test("abcde", 2, 0, "abcdefghij", 5, 0, 0);
1248    test("abcde", 2, 0, "abcdefghij", 5, 1, -1);
1249    test("abcde", 2, 0, "abcdefghij", 5, 2, -2);
1250    test("abcde", 2, 0, "abcdefghij", 5, 4, -4);
1251    test("abcde", 2, 0, "abcdefghij", 5, 5, -5);
1252    test("abcde", 2, 0, "abcdefghij", 5, 6, -5);
1253    test("abcde", 2, 0, "abcdefghij", 9, 0, 0);
1254    test("abcde", 2, 0, "abcdefghij", 9, 1, -1);
1255    test("abcde", 2, 0, "abcdefghij", 9, 2, -1);
1256    test("abcde", 2, 0, "abcdefghij", 10, 0, 0);
1257    test("abcde", 2, 0, "abcdefghij", 10, 1, 0);
1258    test("abcde", 2, 0, "abcdefghij", 11, 0, 0);
1259    test("abcde", 2, 0, "abcdefghijklmnopqrst", 0, 0, 0);
1260    test("abcde", 2, 0, "abcdefghijklmnopqrst", 0, 1, -1);
1261    test("abcde", 2, 0, "abcdefghijklmnopqrst", 0, 10, -10);
1262    test("abcde", 2, 0, "abcdefghijklmnopqrst", 0, 19, -19);
1263    test("abcde", 2, 0, "abcdefghijklmnopqrst", 0, 20, -20);
1264    test("abcde", 2, 0, "abcdefghijklmnopqrst", 0, 21, -20);
1265    test("abcde", 2, 0, "abcdefghijklmnopqrst", 1, 0, 0);
1266    test("abcde", 2, 0, "abcdefghijklmnopqrst", 1, 1, -1);
1267    test("abcde", 2, 0, "abcdefghijklmnopqrst", 1, 9, -9);
1268    test("abcde", 2, 0, "abcdefghijklmnopqrst", 1, 18, -18);
1269    test("abcde", 2, 0, "abcdefghijklmnopqrst", 1, 19, -19);
1270    test("abcde", 2, 0, "abcdefghijklmnopqrst", 1, 20, -19);
1271    test("abcde", 2, 0, "abcdefghijklmnopqrst", 10, 0, 0);
1272    test("abcde", 2, 0, "abcdefghijklmnopqrst", 10, 1, -1);
1273    test("abcde", 2, 0, "abcdefghijklmnopqrst", 10, 5, -5);
1274    test("abcde", 2, 0, "abcdefghijklmnopqrst", 10, 9, -9);
1275    test("abcde", 2, 0, "abcdefghijklmnopqrst", 10, 10, -10);
1276    test("abcde", 2, 0, "abcdefghijklmnopqrst", 10, 11, -10);
1277    test("abcde", 2, 0, "abcdefghijklmnopqrst", 19, 0, 0);
1278    test("abcde", 2, 0, "abcdefghijklmnopqrst", 19, 1, -1);
1279    test("abcde", 2, 0, "abcdefghijklmnopqrst", 19, 2, -1);
1280    test("abcde", 2, 0, "abcdefghijklmnopqrst", 20, 0, 0);
1281    test("abcde", 2, 0, "abcdefghijklmnopqrst", 20, 1, 0);
1282    test("abcde", 2, 0, "abcdefghijklmnopqrst", 21, 0, 0);
1283    test("abcde", 2, 1, "", 0, 0, 1);
1284    test("abcde", 2, 1, "", 0, 1, 1);
1285    test("abcde", 2, 1, "", 1, 0, 0);
1286    test("abcde", 2, 1, "abcde", 0, 0, 1);
1287    test("abcde", 2, 1, "abcde", 0, 1, 2);
1288    test("abcde", 2, 1, "abcde", 0, 2, 2);
1289    test("abcde", 2, 1, "abcde", 0, 4, 2);
1290    test("abcde", 2, 1, "abcde", 0, 5, 2);
1291    test("abcde", 2, 1, "abcde", 0, 6, 2);
1292    test("abcde", 2, 1, "abcde", 1, 0, 1);
1293    test("abcde", 2, 1, "abcde", 1, 1, 1);
1294    test("abcde", 2, 1, "abcde", 1, 2, 1);
1295    test("abcde", 2, 1, "abcde", 1, 3, 1);
1296    test("abcde", 2, 1, "abcde", 1, 4, 1);
1297    test("abcde", 2, 1, "abcde", 1, 5, 1);
1298    test("abcde", 2, 1, "abcde", 2, 0, 1);
1299}
1300
1301void test12()
1302{
1303    test("abcde", 2, 1, "abcde", 2, 1, 0);
1304    test("abcde", 2, 1, "abcde", 2, 2, -1);
1305    test("abcde", 2, 1, "abcde", 2, 3, -2);
1306    test("abcde", 2, 1, "abcde", 2, 4, -2);
1307    test("abcde", 2, 1, "abcde", 4, 0, 1);
1308    test("abcde", 2, 1, "abcde", 4, 1, -2);
1309    test("abcde", 2, 1, "abcde", 4, 2, -2);
1310    test("abcde", 2, 1, "abcde", 5, 0, 1);
1311    test("abcde", 2, 1, "abcde", 5, 1, 1);
1312    test("abcde", 2, 1, "abcde", 6, 0, 0);
1313    test("abcde", 2, 1, "abcdefghij", 0, 0, 1);
1314    test("abcde", 2, 1, "abcdefghij", 0, 1, 2);
1315    test("abcde", 2, 1, "abcdefghij", 0, 5, 2);
1316    test("abcde", 2, 1, "abcdefghij", 0, 9, 2);
1317    test("abcde", 2, 1, "abcdefghij", 0, 10, 2);
1318    test("abcde", 2, 1, "abcdefghij", 0, 11, 2);
1319    test("abcde", 2, 1, "abcdefghij", 1, 0, 1);
1320    test("abcde", 2, 1, "abcdefghij", 1, 1, 1);
1321    test("abcde", 2, 1, "abcdefghij", 1, 4, 1);
1322    test("abcde", 2, 1, "abcdefghij", 1, 8, 1);
1323    test("abcde", 2, 1, "abcdefghij", 1, 9, 1);
1324    test("abcde", 2, 1, "abcdefghij", 1, 10, 1);
1325    test("abcde", 2, 1, "abcdefghij", 5, 0, 1);
1326    test("abcde", 2, 1, "abcdefghij", 5, 1, -3);
1327    test("abcde", 2, 1, "abcdefghij", 5, 2, -3);
1328    test("abcde", 2, 1, "abcdefghij", 5, 4, -3);
1329    test("abcde", 2, 1, "abcdefghij", 5, 5, -3);
1330    test("abcde", 2, 1, "abcdefghij", 5, 6, -3);
1331    test("abcde", 2, 1, "abcdefghij", 9, 0, 1);
1332    test("abcde", 2, 1, "abcdefghij", 9, 1, -7);
1333    test("abcde", 2, 1, "abcdefghij", 9, 2, -7);
1334    test("abcde", 2, 1, "abcdefghij", 10, 0, 1);
1335    test("abcde", 2, 1, "abcdefghij", 10, 1, 1);
1336    test("abcde", 2, 1, "abcdefghij", 11, 0, 0);
1337    test("abcde", 2, 1, "abcdefghijklmnopqrst", 0, 0, 1);
1338    test("abcde", 2, 1, "abcdefghijklmnopqrst", 0, 1, 2);
1339    test("abcde", 2, 1, "abcdefghijklmnopqrst", 0, 10, 2);
1340    test("abcde", 2, 1, "abcdefghijklmnopqrst", 0, 19, 2);
1341    test("abcde", 2, 1, "abcdefghijklmnopqrst", 0, 20, 2);
1342    test("abcde", 2, 1, "abcdefghijklmnopqrst", 0, 21, 2);
1343    test("abcde", 2, 1, "abcdefghijklmnopqrst", 1, 0, 1);
1344    test("abcde", 2, 1, "abcdefghijklmnopqrst", 1, 1, 1);
1345    test("abcde", 2, 1, "abcdefghijklmnopqrst", 1, 9, 1);
1346    test("abcde", 2, 1, "abcdefghijklmnopqrst", 1, 18, 1);
1347    test("abcde", 2, 1, "abcdefghijklmnopqrst", 1, 19, 1);
1348    test("abcde", 2, 1, "abcdefghijklmnopqrst", 1, 20, 1);
1349    test("abcde", 2, 1, "abcdefghijklmnopqrst", 10, 0, 1);
1350    test("abcde", 2, 1, "abcdefghijklmnopqrst", 10, 1, -8);
1351    test("abcde", 2, 1, "abcdefghijklmnopqrst", 10, 5, -8);
1352    test("abcde", 2, 1, "abcdefghijklmnopqrst", 10, 9, -8);
1353    test("abcde", 2, 1, "abcdefghijklmnopqrst", 10, 10, -8);
1354    test("abcde", 2, 1, "abcdefghijklmnopqrst", 10, 11, -8);
1355    test("abcde", 2, 1, "abcdefghijklmnopqrst", 19, 0, 1);
1356    test("abcde", 2, 1, "abcdefghijklmnopqrst", 19, 1, -17);
1357    test("abcde", 2, 1, "abcdefghijklmnopqrst", 19, 2, -17);
1358    test("abcde", 2, 1, "abcdefghijklmnopqrst", 20, 0, 1);
1359    test("abcde", 2, 1, "abcdefghijklmnopqrst", 20, 1, 1);
1360    test("abcde", 2, 1, "abcdefghijklmnopqrst", 21, 0, 0);
1361    test("abcde", 2, 2, "", 0, 0, 2);
1362    test("abcde", 2, 2, "", 0, 1, 2);
1363    test("abcde", 2, 2, "", 1, 0, 0);
1364    test("abcde", 2, 2, "abcde", 0, 0, 2);
1365    test("abcde", 2, 2, "abcde", 0, 1, 2);
1366    test("abcde", 2, 2, "abcde", 0, 2, 2);
1367    test("abcde", 2, 2, "abcde", 0, 4, 2);
1368    test("abcde", 2, 2, "abcde", 0, 5, 2);
1369    test("abcde", 2, 2, "abcde", 0, 6, 2);
1370    test("abcde", 2, 2, "abcde", 1, 0, 2);
1371    test("abcde", 2, 2, "abcde", 1, 1, 1);
1372    test("abcde", 2, 2, "abcde", 1, 2, 1);
1373    test("abcde", 2, 2, "abcde", 1, 3, 1);
1374    test("abcde", 2, 2, "abcde", 1, 4, 1);
1375    test("abcde", 2, 2, "abcde", 1, 5, 1);
1376    test("abcde", 2, 2, "abcde", 2, 0, 2);
1377    test("abcde", 2, 2, "abcde", 2, 1, 1);
1378    test("abcde", 2, 2, "abcde", 2, 2, 0);
1379    test("abcde", 2, 2, "abcde", 2, 3, -1);
1380    test("abcde", 2, 2, "abcde", 2, 4, -1);
1381    test("abcde", 2, 2, "abcde", 4, 0, 2);
1382    test("abcde", 2, 2, "abcde", 4, 1, -2);
1383    test("abcde", 2, 2, "abcde", 4, 2, -2);
1384    test("abcde", 2, 2, "abcde", 5, 0, 2);
1385    test("abcde", 2, 2, "abcde", 5, 1, 2);
1386    test("abcde", 2, 2, "abcde", 6, 0, 0);
1387    test("abcde", 2, 2, "abcdefghij", 0, 0, 2);
1388    test("abcde", 2, 2, "abcdefghij", 0, 1, 2);
1389    test("abcde", 2, 2, "abcdefghij", 0, 5, 2);
1390    test("abcde", 2, 2, "abcdefghij", 0, 9, 2);
1391    test("abcde", 2, 2, "abcdefghij", 0, 10, 2);
1392    test("abcde", 2, 2, "abcdefghij", 0, 11, 2);
1393    test("abcde", 2, 2, "abcdefghij", 1, 0, 2);
1394    test("abcde", 2, 2, "abcdefghij", 1, 1, 1);
1395    test("abcde", 2, 2, "abcdefghij", 1, 4, 1);
1396    test("abcde", 2, 2, "abcdefghij", 1, 8, 1);
1397    test("abcde", 2, 2, "abcdefghij", 1, 9, 1);
1398    test("abcde", 2, 2, "abcdefghij", 1, 10, 1);
1399    test("abcde", 2, 2, "abcdefghij", 5, 0, 2);
1400    test("abcde", 2, 2, "abcdefghij", 5, 1, -3);
1401    test("abcde", 2, 2, "abcdefghij", 5, 2, -3);
1402    test("abcde", 2, 2, "abcdefghij", 5, 4, -3);
1403}
1404
1405void test13()
1406{
1407    test("abcde", 2, 2, "abcdefghij", 5, 5, -3);
1408    test("abcde", 2, 2, "abcdefghij", 5, 6, -3);
1409    test("abcde", 2, 2, "abcdefghij", 9, 0, 2);
1410    test("abcde", 2, 2, "abcdefghij", 9, 1, -7);
1411    test("abcde", 2, 2, "abcdefghij", 9, 2, -7);
1412    test("abcde", 2, 2, "abcdefghij", 10, 0, 2);
1413    test("abcde", 2, 2, "abcdefghij", 10, 1, 2);
1414    test("abcde", 2, 2, "abcdefghij", 11, 0, 0);
1415    test("abcde", 2, 2, "abcdefghijklmnopqrst", 0, 0, 2);
1416    test("abcde", 2, 2, "abcdefghijklmnopqrst", 0, 1, 2);
1417    test("abcde", 2, 2, "abcdefghijklmnopqrst", 0, 10, 2);
1418    test("abcde", 2, 2, "abcdefghijklmnopqrst", 0, 19, 2);
1419    test("abcde", 2, 2, "abcdefghijklmnopqrst", 0, 20, 2);
1420    test("abcde", 2, 2, "abcdefghijklmnopqrst", 0, 21, 2);
1421    test("abcde", 2, 2, "abcdefghijklmnopqrst", 1, 0, 2);
1422    test("abcde", 2, 2, "abcdefghijklmnopqrst", 1, 1, 1);
1423    test("abcde", 2, 2, "abcdefghijklmnopqrst", 1, 9, 1);
1424    test("abcde", 2, 2, "abcdefghijklmnopqrst", 1, 18, 1);
1425    test("abcde", 2, 2, "abcdefghijklmnopqrst", 1, 19, 1);
1426    test("abcde", 2, 2, "abcdefghijklmnopqrst", 1, 20, 1);
1427    test("abcde", 2, 2, "abcdefghijklmnopqrst", 10, 0, 2);
1428    test("abcde", 2, 2, "abcdefghijklmnopqrst", 10, 1, -8);
1429    test("abcde", 2, 2, "abcdefghijklmnopqrst", 10, 5, -8);
1430    test("abcde", 2, 2, "abcdefghijklmnopqrst", 10, 9, -8);
1431    test("abcde", 2, 2, "abcdefghijklmnopqrst", 10, 10, -8);
1432    test("abcde", 2, 2, "abcdefghijklmnopqrst", 10, 11, -8);
1433    test("abcde", 2, 2, "abcdefghijklmnopqrst", 19, 0, 2);
1434    test("abcde", 2, 2, "abcdefghijklmnopqrst", 19, 1, -17);
1435    test("abcde", 2, 2, "abcdefghijklmnopqrst", 19, 2, -17);
1436    test("abcde", 2, 2, "abcdefghijklmnopqrst", 20, 0, 2);
1437    test("abcde", 2, 2, "abcdefghijklmnopqrst", 20, 1, 2);
1438    test("abcde", 2, 2, "abcdefghijklmnopqrst", 21, 0, 0);
1439    test("abcde", 2, 3, "", 0, 0, 3);
1440    test("abcde", 2, 3, "", 0, 1, 3);
1441    test("abcde", 2, 3, "", 1, 0, 0);
1442    test("abcde", 2, 3, "abcde", 0, 0, 3);
1443    test("abcde", 2, 3, "abcde", 0, 1, 2);
1444    test("abcde", 2, 3, "abcde", 0, 2, 2);
1445    test("abcde", 2, 3, "abcde", 0, 4, 2);
1446    test("abcde", 2, 3, "abcde", 0, 5, 2);
1447    test("abcde", 2, 3, "abcde", 0, 6, 2);
1448    test("abcde", 2, 3, "abcde", 1, 0, 3);
1449    test("abcde", 2, 3, "abcde", 1, 1, 1);
1450    test("abcde", 2, 3, "abcde", 1, 2, 1);
1451    test("abcde", 2, 3, "abcde", 1, 3, 1);
1452    test("abcde", 2, 3, "abcde", 1, 4, 1);
1453    test("abcde", 2, 3, "abcde", 1, 5, 1);
1454    test("abcde", 2, 3, "abcde", 2, 0, 3);
1455    test("abcde", 2, 3, "abcde", 2, 1, 2);
1456    test("abcde", 2, 3, "abcde", 2, 2, 1);
1457    test("abcde", 2, 3, "abcde", 2, 3, 0);
1458    test("abcde", 2, 3, "abcde", 2, 4, 0);
1459    test("abcde", 2, 3, "abcde", 4, 0, 3);
1460    test("abcde", 2, 3, "abcde", 4, 1, -2);
1461    test("abcde", 2, 3, "abcde", 4, 2, -2);
1462    test("abcde", 2, 3, "abcde", 5, 0, 3);
1463    test("abcde", 2, 3, "abcde", 5, 1, 3);
1464    test("abcde", 2, 3, "abcde", 6, 0, 0);
1465    test("abcde", 2, 3, "abcdefghij", 0, 0, 3);
1466    test("abcde", 2, 3, "abcdefghij", 0, 1, 2);
1467    test("abcde", 2, 3, "abcdefghij", 0, 5, 2);
1468    test("abcde", 2, 3, "abcdefghij", 0, 9, 2);
1469    test("abcde", 2, 3, "abcdefghij", 0, 10, 2);
1470    test("abcde", 2, 3, "abcdefghij", 0, 11, 2);
1471    test("abcde", 2, 3, "abcdefghij", 1, 0, 3);
1472    test("abcde", 2, 3, "abcdefghij", 1, 1, 1);
1473    test("abcde", 2, 3, "abcdefghij", 1, 4, 1);
1474    test("abcde", 2, 3, "abcdefghij", 1, 8, 1);
1475    test("abcde", 2, 3, "abcdefghij", 1, 9, 1);
1476    test("abcde", 2, 3, "abcdefghij", 1, 10, 1);
1477    test("abcde", 2, 3, "abcdefghij", 5, 0, 3);
1478    test("abcde", 2, 3, "abcdefghij", 5, 1, -3);
1479    test("abcde", 2, 3, "abcdefghij", 5, 2, -3);
1480    test("abcde", 2, 3, "abcdefghij", 5, 4, -3);
1481    test("abcde", 2, 3, "abcdefghij", 5, 5, -3);
1482    test("abcde", 2, 3, "abcdefghij", 5, 6, -3);
1483    test("abcde", 2, 3, "abcdefghij", 9, 0, 3);
1484    test("abcde", 2, 3, "abcdefghij", 9, 1, -7);
1485    test("abcde", 2, 3, "abcdefghij", 9, 2, -7);
1486    test("abcde", 2, 3, "abcdefghij", 10, 0, 3);
1487    test("abcde", 2, 3, "abcdefghij", 10, 1, 3);
1488    test("abcde", 2, 3, "abcdefghij", 11, 0, 0);
1489    test("abcde", 2, 3, "abcdefghijklmnopqrst", 0, 0, 3);
1490    test("abcde", 2, 3, "abcdefghijklmnopqrst", 0, 1, 2);
1491    test("abcde", 2, 3, "abcdefghijklmnopqrst", 0, 10, 2);
1492    test("abcde", 2, 3, "abcdefghijklmnopqrst", 0, 19, 2);
1493    test("abcde", 2, 3, "abcdefghijklmnopqrst", 0, 20, 2);
1494    test("abcde", 2, 3, "abcdefghijklmnopqrst", 0, 21, 2);
1495    test("abcde", 2, 3, "abcdefghijklmnopqrst", 1, 0, 3);
1496    test("abcde", 2, 3, "abcdefghijklmnopqrst", 1, 1, 1);
1497    test("abcde", 2, 3, "abcdefghijklmnopqrst", 1, 9, 1);
1498    test("abcde", 2, 3, "abcdefghijklmnopqrst", 1, 18, 1);
1499    test("abcde", 2, 3, "abcdefghijklmnopqrst", 1, 19, 1);
1500    test("abcde", 2, 3, "abcdefghijklmnopqrst", 1, 20, 1);
1501    test("abcde", 2, 3, "abcdefghijklmnopqrst", 10, 0, 3);
1502    test("abcde", 2, 3, "abcdefghijklmnopqrst", 10, 1, -8);
1503    test("abcde", 2, 3, "abcdefghijklmnopqrst", 10, 5, -8);
1504    test("abcde", 2, 3, "abcdefghijklmnopqrst", 10, 9, -8);
1505    test("abcde", 2, 3, "abcdefghijklmnopqrst", 10, 10, -8);
1506    test("abcde", 2, 3, "abcdefghijklmnopqrst", 10, 11, -8);
1507}
1508
1509void test14()
1510{
1511    test("abcde", 2, 3, "abcdefghijklmnopqrst", 19, 0, 3);
1512    test("abcde", 2, 3, "abcdefghijklmnopqrst", 19, 1, -17);
1513    test("abcde", 2, 3, "abcdefghijklmnopqrst", 19, 2, -17);
1514    test("abcde", 2, 3, "abcdefghijklmnopqrst", 20, 0, 3);
1515    test("abcde", 2, 3, "abcdefghijklmnopqrst", 20, 1, 3);
1516    test("abcde", 2, 3, "abcdefghijklmnopqrst", 21, 0, 0);
1517    test("abcde", 2, 4, "", 0, 0, 3);
1518    test("abcde", 2, 4, "", 0, 1, 3);
1519    test("abcde", 2, 4, "", 1, 0, 0);
1520    test("abcde", 2, 4, "abcde", 0, 0, 3);
1521    test("abcde", 2, 4, "abcde", 0, 1, 2);
1522    test("abcde", 2, 4, "abcde", 0, 2, 2);
1523    test("abcde", 2, 4, "abcde", 0, 4, 2);
1524    test("abcde", 2, 4, "abcde", 0, 5, 2);
1525    test("abcde", 2, 4, "abcde", 0, 6, 2);
1526    test("abcde", 2, 4, "abcde", 1, 0, 3);
1527    test("abcde", 2, 4, "abcde", 1, 1, 1);
1528    test("abcde", 2, 4, "abcde", 1, 2, 1);
1529    test("abcde", 2, 4, "abcde", 1, 3, 1);
1530    test("abcde", 2, 4, "abcde", 1, 4, 1);
1531    test("abcde", 2, 4, "abcde", 1, 5, 1);
1532    test("abcde", 2, 4, "abcde", 2, 0, 3);
1533    test("abcde", 2, 4, "abcde", 2, 1, 2);
1534    test("abcde", 2, 4, "abcde", 2, 2, 1);
1535    test("abcde", 2, 4, "abcde", 2, 3, 0);
1536    test("abcde", 2, 4, "abcde", 2, 4, 0);
1537    test("abcde", 2, 4, "abcde", 4, 0, 3);
1538    test("abcde", 2, 4, "abcde", 4, 1, -2);
1539    test("abcde", 2, 4, "abcde", 4, 2, -2);
1540    test("abcde", 2, 4, "abcde", 5, 0, 3);
1541    test("abcde", 2, 4, "abcde", 5, 1, 3);
1542    test("abcde", 2, 4, "abcde", 6, 0, 0);
1543    test("abcde", 2, 4, "abcdefghij", 0, 0, 3);
1544    test("abcde", 2, 4, "abcdefghij", 0, 1, 2);
1545    test("abcde", 2, 4, "abcdefghij", 0, 5, 2);
1546    test("abcde", 2, 4, "abcdefghij", 0, 9, 2);
1547    test("abcde", 2, 4, "abcdefghij", 0, 10, 2);
1548    test("abcde", 2, 4, "abcdefghij", 0, 11, 2);
1549    test("abcde", 2, 4, "abcdefghij", 1, 0, 3);
1550    test("abcde", 2, 4, "abcdefghij", 1, 1, 1);
1551    test("abcde", 2, 4, "abcdefghij", 1, 4, 1);
1552    test("abcde", 2, 4, "abcdefghij", 1, 8, 1);
1553    test("abcde", 2, 4, "abcdefghij", 1, 9, 1);
1554    test("abcde", 2, 4, "abcdefghij", 1, 10, 1);
1555    test("abcde", 2, 4, "abcdefghij", 5, 0, 3);
1556    test("abcde", 2, 4, "abcdefghij", 5, 1, -3);
1557    test("abcde", 2, 4, "abcdefghij", 5, 2, -3);
1558    test("abcde", 2, 4, "abcdefghij", 5, 4, -3);
1559    test("abcde", 2, 4, "abcdefghij", 5, 5, -3);
1560    test("abcde", 2, 4, "abcdefghij", 5, 6, -3);
1561    test("abcde", 2, 4, "abcdefghij", 9, 0, 3);
1562    test("abcde", 2, 4, "abcdefghij", 9, 1, -7);
1563    test("abcde", 2, 4, "abcdefghij", 9, 2, -7);
1564    test("abcde", 2, 4, "abcdefghij", 10, 0, 3);
1565    test("abcde", 2, 4, "abcdefghij", 10, 1, 3);
1566    test("abcde", 2, 4, "abcdefghij", 11, 0, 0);
1567    test("abcde", 2, 4, "abcdefghijklmnopqrst", 0, 0, 3);
1568    test("abcde", 2, 4, "abcdefghijklmnopqrst", 0, 1, 2);
1569    test("abcde", 2, 4, "abcdefghijklmnopqrst", 0, 10, 2);
1570    test("abcde", 2, 4, "abcdefghijklmnopqrst", 0, 19, 2);
1571    test("abcde", 2, 4, "abcdefghijklmnopqrst", 0, 20, 2);
1572    test("abcde", 2, 4, "abcdefghijklmnopqrst", 0, 21, 2);
1573    test("abcde", 2, 4, "abcdefghijklmnopqrst", 1, 0, 3);
1574    test("abcde", 2, 4, "abcdefghijklmnopqrst", 1, 1, 1);
1575    test("abcde", 2, 4, "abcdefghijklmnopqrst", 1, 9, 1);
1576    test("abcde", 2, 4, "abcdefghijklmnopqrst", 1, 18, 1);
1577    test("abcde", 2, 4, "abcdefghijklmnopqrst", 1, 19, 1);
1578    test("abcde", 2, 4, "abcdefghijklmnopqrst", 1, 20, 1);
1579    test("abcde", 2, 4, "abcdefghijklmnopqrst", 10, 0, 3);
1580    test("abcde", 2, 4, "abcdefghijklmnopqrst", 10, 1, -8);
1581    test("abcde", 2, 4, "abcdefghijklmnopqrst", 10, 5, -8);
1582    test("abcde", 2, 4, "abcdefghijklmnopqrst", 10, 9, -8);
1583    test("abcde", 2, 4, "abcdefghijklmnopqrst", 10, 10, -8);
1584    test("abcde", 2, 4, "abcdefghijklmnopqrst", 10, 11, -8);
1585    test("abcde", 2, 4, "abcdefghijklmnopqrst", 19, 0, 3);
1586    test("abcde", 2, 4, "abcdefghijklmnopqrst", 19, 1, -17);
1587    test("abcde", 2, 4, "abcdefghijklmnopqrst", 19, 2, -17);
1588    test("abcde", 2, 4, "abcdefghijklmnopqrst", 20, 0, 3);
1589    test("abcde", 2, 4, "abcdefghijklmnopqrst", 20, 1, 3);
1590    test("abcde", 2, 4, "abcdefghijklmnopqrst", 21, 0, 0);
1591    test("abcde", 4, 0, "", 0, 0, 0);
1592    test("abcde", 4, 0, "", 0, 1, 0);
1593    test("abcde", 4, 0, "", 1, 0, 0);
1594    test("abcde", 4, 0, "abcde", 0, 0, 0);
1595    test("abcde", 4, 0, "abcde", 0, 1, -1);
1596    test("abcde", 4, 0, "abcde", 0, 2, -2);
1597    test("abcde", 4, 0, "abcde", 0, 4, -4);
1598    test("abcde", 4, 0, "abcde", 0, 5, -5);
1599    test("abcde", 4, 0, "abcde", 0, 6, -5);
1600    test("abcde", 4, 0, "abcde", 1, 0, 0);
1601    test("abcde", 4, 0, "abcde", 1, 1, -1);
1602    test("abcde", 4, 0, "abcde", 1, 2, -2);
1603    test("abcde", 4, 0, "abcde", 1, 3, -3);
1604    test("abcde", 4, 0, "abcde", 1, 4, -4);
1605    test("abcde", 4, 0, "abcde", 1, 5, -4);
1606    test("abcde", 4, 0, "abcde", 2, 0, 0);
1607    test("abcde", 4, 0, "abcde", 2, 1, -1);
1608    test("abcde", 4, 0, "abcde", 2, 2, -2);
1609    test("abcde", 4, 0, "abcde", 2, 3, -3);
1610    test("abcde", 4, 0, "abcde", 2, 4, -3);
1611}
1612
1613void test15()
1614{
1615    test("abcde", 4, 0, "abcde", 4, 0, 0);
1616    test("abcde", 4, 0, "abcde", 4, 1, -1);
1617    test("abcde", 4, 0, "abcde", 4, 2, -1);
1618    test("abcde", 4, 0, "abcde", 5, 0, 0);
1619    test("abcde", 4, 0, "abcde", 5, 1, 0);
1620    test("abcde", 4, 0, "abcde", 6, 0, 0);
1621    test("abcde", 4, 0, "abcdefghij", 0, 0, 0);
1622    test("abcde", 4, 0, "abcdefghij", 0, 1, -1);
1623    test("abcde", 4, 0, "abcdefghij", 0, 5, -5);
1624    test("abcde", 4, 0, "abcdefghij", 0, 9, -9);
1625    test("abcde", 4, 0, "abcdefghij", 0, 10, -10);
1626    test("abcde", 4, 0, "abcdefghij", 0, 11, -10);
1627    test("abcde", 4, 0, "abcdefghij", 1, 0, 0);
1628    test("abcde", 4, 0, "abcdefghij", 1, 1, -1);
1629    test("abcde", 4, 0, "abcdefghij", 1, 4, -4);
1630    test("abcde", 4, 0, "abcdefghij", 1, 8, -8);
1631    test("abcde", 4, 0, "abcdefghij", 1, 9, -9);
1632    test("abcde", 4, 0, "abcdefghij", 1, 10, -9);
1633    test("abcde", 4, 0, "abcdefghij", 5, 0, 0);
1634    test("abcde", 4, 0, "abcdefghij", 5, 1, -1);
1635    test("abcde", 4, 0, "abcdefghij", 5, 2, -2);
1636    test("abcde", 4, 0, "abcdefghij", 5, 4, -4);
1637    test("abcde", 4, 0, "abcdefghij", 5, 5, -5);
1638    test("abcde", 4, 0, "abcdefghij", 5, 6, -5);
1639    test("abcde", 4, 0, "abcdefghij", 9, 0, 0);
1640    test("abcde", 4, 0, "abcdefghij", 9, 1, -1);
1641    test("abcde", 4, 0, "abcdefghij", 9, 2, -1);
1642    test("abcde", 4, 0, "abcdefghij", 10, 0, 0);
1643    test("abcde", 4, 0, "abcdefghij", 10, 1, 0);
1644    test("abcde", 4, 0, "abcdefghij", 11, 0, 0);
1645    test("abcde", 4, 0, "abcdefghijklmnopqrst", 0, 0, 0);
1646    test("abcde", 4, 0, "abcdefghijklmnopqrst", 0, 1, -1);
1647    test("abcde", 4, 0, "abcdefghijklmnopqrst", 0, 10, -10);
1648    test("abcde", 4, 0, "abcdefghijklmnopqrst", 0, 19, -19);
1649    test("abcde", 4, 0, "abcdefghijklmnopqrst", 0, 20, -20);
1650    test("abcde", 4, 0, "abcdefghijklmnopqrst", 0, 21, -20);
1651    test("abcde", 4, 0, "abcdefghijklmnopqrst", 1, 0, 0);
1652    test("abcde", 4, 0, "abcdefghijklmnopqrst", 1, 1, -1);
1653    test("abcde", 4, 0, "abcdefghijklmnopqrst", 1, 9, -9);
1654    test("abcde", 4, 0, "abcdefghijklmnopqrst", 1, 18, -18);
1655    test("abcde", 4, 0, "abcdefghijklmnopqrst", 1, 19, -19);
1656    test("abcde", 4, 0, "abcdefghijklmnopqrst", 1, 20, -19);
1657    test("abcde", 4, 0, "abcdefghijklmnopqrst", 10, 0, 0);
1658    test("abcde", 4, 0, "abcdefghijklmnopqrst", 10, 1, -1);
1659    test("abcde", 4, 0, "abcdefghijklmnopqrst", 10, 5, -5);
1660    test("abcde", 4, 0, "abcdefghijklmnopqrst", 10, 9, -9);
1661    test("abcde", 4, 0, "abcdefghijklmnopqrst", 10, 10, -10);
1662    test("abcde", 4, 0, "abcdefghijklmnopqrst", 10, 11, -10);
1663    test("abcde", 4, 0, "abcdefghijklmnopqrst", 19, 0, 0);
1664    test("abcde", 4, 0, "abcdefghijklmnopqrst", 19, 1, -1);
1665    test("abcde", 4, 0, "abcdefghijklmnopqrst", 19, 2, -1);
1666    test("abcde", 4, 0, "abcdefghijklmnopqrst", 20, 0, 0);
1667    test("abcde", 4, 0, "abcdefghijklmnopqrst", 20, 1, 0);
1668    test("abcde", 4, 0, "abcdefghijklmnopqrst", 21, 0, 0);
1669    test("abcde", 4, 1, "", 0, 0, 1);
1670    test("abcde", 4, 1, "", 0, 1, 1);
1671    test("abcde", 4, 1, "", 1, 0, 0);
1672    test("abcde", 4, 1, "abcde", 0, 0, 1);
1673    test("abcde", 4, 1, "abcde", 0, 1, 4);
1674    test("abcde", 4, 1, "abcde", 0, 2, 4);
1675    test("abcde", 4, 1, "abcde", 0, 4, 4);
1676    test("abcde", 4, 1, "abcde", 0, 5, 4);
1677    test("abcde", 4, 1, "abcde", 0, 6, 4);
1678    test("abcde", 4, 1, "abcde", 1, 0, 1);
1679    test("abcde", 4, 1, "abcde", 1, 1, 3);
1680    test("abcde", 4, 1, "abcde", 1, 2, 3);
1681    test("abcde", 4, 1, "abcde", 1, 3, 3);
1682    test("abcde", 4, 1, "abcde", 1, 4, 3);
1683    test("abcde", 4, 1, "abcde", 1, 5, 3);
1684    test("abcde", 4, 1, "abcde", 2, 0, 1);
1685    test("abcde", 4, 1, "abcde", 2, 1, 2);
1686    test("abcde", 4, 1, "abcde", 2, 2, 2);
1687    test("abcde", 4, 1, "abcde", 2, 3, 2);
1688    test("abcde", 4, 1, "abcde", 2, 4, 2);
1689    test("abcde", 4, 1, "abcde", 4, 0, 1);
1690    test("abcde", 4, 1, "abcde", 4, 1, 0);
1691    test("abcde", 4, 1, "abcde", 4, 2, 0);
1692    test("abcde", 4, 1, "abcde", 5, 0, 1);
1693    test("abcde", 4, 1, "abcde", 5, 1, 1);
1694    test("abcde", 4, 1, "abcde", 6, 0, 0);
1695    test("abcde", 4, 1, "abcdefghij", 0, 0, 1);
1696    test("abcde", 4, 1, "abcdefghij", 0, 1, 4);
1697    test("abcde", 4, 1, "abcdefghij", 0, 5, 4);
1698    test("abcde", 4, 1, "abcdefghij", 0, 9, 4);
1699    test("abcde", 4, 1, "abcdefghij", 0, 10, 4);
1700    test("abcde", 4, 1, "abcdefghij", 0, 11, 4);
1701    test("abcde", 4, 1, "abcdefghij", 1, 0, 1);
1702    test("abcde", 4, 1, "abcdefghij", 1, 1, 3);
1703    test("abcde", 4, 1, "abcdefghij", 1, 4, 3);
1704    test("abcde", 4, 1, "abcdefghij", 1, 8, 3);
1705    test("abcde", 4, 1, "abcdefghij", 1, 9, 3);
1706    test("abcde", 4, 1, "abcdefghij", 1, 10, 3);
1707    test("abcde", 4, 1, "abcdefghij", 5, 0, 1);
1708    test("abcde", 4, 1, "abcdefghij", 5, 1, -1);
1709    test("abcde", 4, 1, "abcdefghij", 5, 2, -1);
1710    test("abcde", 4, 1, "abcdefghij", 5, 4, -1);
1711    test("abcde", 4, 1, "abcdefghij", 5, 5, -1);
1712    test("abcde", 4, 1, "abcdefghij", 5, 6, -1);
1713    test("abcde", 4, 1, "abcdefghij", 9, 0, 1);
1714    test("abcde", 4, 1, "abcdefghij", 9, 1, -5);
1715}
1716
1717void test16()
1718{
1719    test("abcde", 4, 1, "abcdefghij", 9, 2, -5);
1720    test("abcde", 4, 1, "abcdefghij", 10, 0, 1);
1721    test("abcde", 4, 1, "abcdefghij", 10, 1, 1);
1722    test("abcde", 4, 1, "abcdefghij", 11, 0, 0);
1723    test("abcde", 4, 1, "abcdefghijklmnopqrst", 0, 0, 1);
1724    test("abcde", 4, 1, "abcdefghijklmnopqrst", 0, 1, 4);
1725    test("abcde", 4, 1, "abcdefghijklmnopqrst", 0, 10, 4);
1726    test("abcde", 4, 1, "abcdefghijklmnopqrst", 0, 19, 4);
1727    test("abcde", 4, 1, "abcdefghijklmnopqrst", 0, 20, 4);
1728    test("abcde", 4, 1, "abcdefghijklmnopqrst", 0, 21, 4);
1729    test("abcde", 4, 1, "abcdefghijklmnopqrst", 1, 0, 1);
1730    test("abcde", 4, 1, "abcdefghijklmnopqrst", 1, 1, 3);
1731    test("abcde", 4, 1, "abcdefghijklmnopqrst", 1, 9, 3);
1732    test("abcde", 4, 1, "abcdefghijklmnopqrst", 1, 18, 3);
1733    test("abcde", 4, 1, "abcdefghijklmnopqrst", 1, 19, 3);
1734    test("abcde", 4, 1, "abcdefghijklmnopqrst", 1, 20, 3);
1735    test("abcde", 4, 1, "abcdefghijklmnopqrst", 10, 0, 1);
1736    test("abcde", 4, 1, "abcdefghijklmnopqrst", 10, 1, -6);
1737    test("abcde", 4, 1, "abcdefghijklmnopqrst", 10, 5, -6);
1738    test("abcde", 4, 1, "abcdefghijklmnopqrst", 10, 9, -6);
1739    test("abcde", 4, 1, "abcdefghijklmnopqrst", 10, 10, -6);
1740    test("abcde", 4, 1, "abcdefghijklmnopqrst", 10, 11, -6);
1741    test("abcde", 4, 1, "abcdefghijklmnopqrst", 19, 0, 1);
1742    test("abcde", 4, 1, "abcdefghijklmnopqrst", 19, 1, -15);
1743    test("abcde", 4, 1, "abcdefghijklmnopqrst", 19, 2, -15);
1744    test("abcde", 4, 1, "abcdefghijklmnopqrst", 20, 0, 1);
1745    test("abcde", 4, 1, "abcdefghijklmnopqrst", 20, 1, 1);
1746    test("abcde", 4, 1, "abcdefghijklmnopqrst", 21, 0, 0);
1747    test("abcde", 4, 2, "", 0, 0, 1);
1748    test("abcde", 4, 2, "", 0, 1, 1);
1749    test("abcde", 4, 2, "", 1, 0, 0);
1750    test("abcde", 4, 2, "abcde", 0, 0, 1);
1751    test("abcde", 4, 2, "abcde", 0, 1, 4);
1752    test("abcde", 4, 2, "abcde", 0, 2, 4);
1753    test("abcde", 4, 2, "abcde", 0, 4, 4);
1754    test("abcde", 4, 2, "abcde", 0, 5, 4);
1755    test("abcde", 4, 2, "abcde", 0, 6, 4);
1756    test("abcde", 4, 2, "abcde", 1, 0, 1);
1757    test("abcde", 4, 2, "abcde", 1, 1, 3);
1758    test("abcde", 4, 2, "abcde", 1, 2, 3);
1759    test("abcde", 4, 2, "abcde", 1, 3, 3);
1760    test("abcde", 4, 2, "abcde", 1, 4, 3);
1761    test("abcde", 4, 2, "abcde", 1, 5, 3);
1762    test("abcde", 4, 2, "abcde", 2, 0, 1);
1763    test("abcde", 4, 2, "abcde", 2, 1, 2);
1764    test("abcde", 4, 2, "abcde", 2, 2, 2);
1765    test("abcde", 4, 2, "abcde", 2, 3, 2);
1766    test("abcde", 4, 2, "abcde", 2, 4, 2);
1767    test("abcde", 4, 2, "abcde", 4, 0, 1);
1768    test("abcde", 4, 2, "abcde", 4, 1, 0);
1769    test("abcde", 4, 2, "abcde", 4, 2, 0);
1770    test("abcde", 4, 2, "abcde", 5, 0, 1);
1771    test("abcde", 4, 2, "abcde", 5, 1, 1);
1772    test("abcde", 4, 2, "abcde", 6, 0, 0);
1773    test("abcde", 4, 2, "abcdefghij", 0, 0, 1);
1774    test("abcde", 4, 2, "abcdefghij", 0, 1, 4);
1775    test("abcde", 4, 2, "abcdefghij", 0, 5, 4);
1776    test("abcde", 4, 2, "abcdefghij", 0, 9, 4);
1777    test("abcde", 4, 2, "abcdefghij", 0, 10, 4);
1778    test("abcde", 4, 2, "abcdefghij", 0, 11, 4);
1779    test("abcde", 4, 2, "abcdefghij", 1, 0, 1);
1780    test("abcde", 4, 2, "abcdefghij", 1, 1, 3);
1781    test("abcde", 4, 2, "abcdefghij", 1, 4, 3);
1782    test("abcde", 4, 2, "abcdefghij", 1, 8, 3);
1783    test("abcde", 4, 2, "abcdefghij", 1, 9, 3);
1784    test("abcde", 4, 2, "abcdefghij", 1, 10, 3);
1785    test("abcde", 4, 2, "abcdefghij", 5, 0, 1);
1786    test("abcde", 4, 2, "abcdefghij", 5, 1, -1);
1787    test("abcde", 4, 2, "abcdefghij", 5, 2, -1);
1788    test("abcde", 4, 2, "abcdefghij", 5, 4, -1);
1789    test("abcde", 4, 2, "abcdefghij", 5, 5, -1);
1790    test("abcde", 4, 2, "abcdefghij", 5, 6, -1);
1791    test("abcde", 4, 2, "abcdefghij", 9, 0, 1);
1792    test("abcde", 4, 2, "abcdefghij", 9, 1, -5);
1793    test("abcde", 4, 2, "abcdefghij", 9, 2, -5);
1794    test("abcde", 4, 2, "abcdefghij", 10, 0, 1);
1795    test("abcde", 4, 2, "abcdefghij", 10, 1, 1);
1796    test("abcde", 4, 2, "abcdefghij", 11, 0, 0);
1797    test("abcde", 4, 2, "abcdefghijklmnopqrst", 0, 0, 1);
1798    test("abcde", 4, 2, "abcdefghijklmnopqrst", 0, 1, 4);
1799    test("abcde", 4, 2, "abcdefghijklmnopqrst", 0, 10, 4);
1800    test("abcde", 4, 2, "abcdefghijklmnopqrst", 0, 19, 4);
1801    test("abcde", 4, 2, "abcdefghijklmnopqrst", 0, 20, 4);
1802    test("abcde", 4, 2, "abcdefghijklmnopqrst", 0, 21, 4);
1803    test("abcde", 4, 2, "abcdefghijklmnopqrst", 1, 0, 1);
1804    test("abcde", 4, 2, "abcdefghijklmnopqrst", 1, 1, 3);
1805    test("abcde", 4, 2, "abcdefghijklmnopqrst", 1, 9, 3);
1806    test("abcde", 4, 2, "abcdefghijklmnopqrst", 1, 18, 3);
1807    test("abcde", 4, 2, "abcdefghijklmnopqrst", 1, 19, 3);
1808    test("abcde", 4, 2, "abcdefghijklmnopqrst", 1, 20, 3);
1809    test("abcde", 4, 2, "abcdefghijklmnopqrst", 10, 0, 1);
1810    test("abcde", 4, 2, "abcdefghijklmnopqrst", 10, 1, -6);
1811    test("abcde", 4, 2, "abcdefghijklmnopqrst", 10, 5, -6);
1812    test("abcde", 4, 2, "abcdefghijklmnopqrst", 10, 9, -6);
1813    test("abcde", 4, 2, "abcdefghijklmnopqrst", 10, 10, -6);
1814    test("abcde", 4, 2, "abcdefghijklmnopqrst", 10, 11, -6);
1815    test("abcde", 4, 2, "abcdefghijklmnopqrst", 19, 0, 1);
1816    test("abcde", 4, 2, "abcdefghijklmnopqrst", 19, 1, -15);
1817    test("abcde", 4, 2, "abcdefghijklmnopqrst", 19, 2, -15);
1818    test("abcde", 4, 2, "abcdefghijklmnopqrst", 20, 0, 1);
1819}
1820
1821void test17()
1822{
1823    test("abcde", 4, 2, "abcdefghijklmnopqrst", 20, 1, 1);
1824    test("abcde", 4, 2, "abcdefghijklmnopqrst", 21, 0, 0);
1825    test("abcde", 5, 0, "", 0, 0, 0);
1826    test("abcde", 5, 0, "", 0, 1, 0);
1827    test("abcde", 5, 0, "", 1, 0, 0);
1828    test("abcde", 5, 0, "abcde", 0, 0, 0);
1829    test("abcde", 5, 0, "abcde", 0, 1, -1);
1830    test("abcde", 5, 0, "abcde", 0, 2, -2);
1831    test("abcde", 5, 0, "abcde", 0, 4, -4);
1832    test("abcde", 5, 0, "abcde", 0, 5, -5);
1833    test("abcde", 5, 0, "abcde", 0, 6, -5);
1834    test("abcde", 5, 0, "abcde", 1, 0, 0);
1835    test("abcde", 5, 0, "abcde", 1, 1, -1);
1836    test("abcde", 5, 0, "abcde", 1, 2, -2);
1837    test("abcde", 5, 0, "abcde", 1, 3, -3);
1838    test("abcde", 5, 0, "abcde", 1, 4, -4);
1839    test("abcde", 5, 0, "abcde", 1, 5, -4);
1840    test("abcde", 5, 0, "abcde", 2, 0, 0);
1841    test("abcde", 5, 0, "abcde", 2, 1, -1);
1842    test("abcde", 5, 0, "abcde", 2, 2, -2);
1843    test("abcde", 5, 0, "abcde", 2, 3, -3);
1844    test("abcde", 5, 0, "abcde", 2, 4, -3);
1845    test("abcde", 5, 0, "abcde", 4, 0, 0);
1846    test("abcde", 5, 0, "abcde", 4, 1, -1);
1847    test("abcde", 5, 0, "abcde", 4, 2, -1);
1848    test("abcde", 5, 0, "abcde", 5, 0, 0);
1849    test("abcde", 5, 0, "abcde", 5, 1, 0);
1850    test("abcde", 5, 0, "abcde", 6, 0, 0);
1851    test("abcde", 5, 0, "abcdefghij", 0, 0, 0);
1852    test("abcde", 5, 0, "abcdefghij", 0, 1, -1);
1853    test("abcde", 5, 0, "abcdefghij", 0, 5, -5);
1854    test("abcde", 5, 0, "abcdefghij", 0, 9, -9);
1855    test("abcde", 5, 0, "abcdefghij", 0, 10, -10);
1856    test("abcde", 5, 0, "abcdefghij", 0, 11, -10);
1857    test("abcde", 5, 0, "abcdefghij", 1, 0, 0);
1858    test("abcde", 5, 0, "abcdefghij", 1, 1, -1);
1859    test("abcde", 5, 0, "abcdefghij", 1, 4, -4);
1860    test("abcde", 5, 0, "abcdefghij", 1, 8, -8);
1861    test("abcde", 5, 0, "abcdefghij", 1, 9, -9);
1862    test("abcde", 5, 0, "abcdefghij", 1, 10, -9);
1863    test("abcde", 5, 0, "abcdefghij", 5, 0, 0);
1864    test("abcde", 5, 0, "abcdefghij", 5, 1, -1);
1865    test("abcde", 5, 0, "abcdefghij", 5, 2, -2);
1866    test("abcde", 5, 0, "abcdefghij", 5, 4, -4);
1867    test("abcde", 5, 0, "abcdefghij", 5, 5, -5);
1868    test("abcde", 5, 0, "abcdefghij", 5, 6, -5);
1869    test("abcde", 5, 0, "abcdefghij", 9, 0, 0);
1870    test("abcde", 5, 0, "abcdefghij", 9, 1, -1);
1871    test("abcde", 5, 0, "abcdefghij", 9, 2, -1);
1872    test("abcde", 5, 0, "abcdefghij", 10, 0, 0);
1873    test("abcde", 5, 0, "abcdefghij", 10, 1, 0);
1874    test("abcde", 5, 0, "abcdefghij", 11, 0, 0);
1875    test("abcde", 5, 0, "abcdefghijklmnopqrst", 0, 0, 0);
1876    test("abcde", 5, 0, "abcdefghijklmnopqrst", 0, 1, -1);
1877    test("abcde", 5, 0, "abcdefghijklmnopqrst", 0, 10, -10);
1878    test("abcde", 5, 0, "abcdefghijklmnopqrst", 0, 19, -19);
1879    test("abcde", 5, 0, "abcdefghijklmnopqrst", 0, 20, -20);
1880    test("abcde", 5, 0, "abcdefghijklmnopqrst", 0, 21, -20);
1881    test("abcde", 5, 0, "abcdefghijklmnopqrst", 1, 0, 0);
1882    test("abcde", 5, 0, "abcdefghijklmnopqrst", 1, 1, -1);
1883    test("abcde", 5, 0, "abcdefghijklmnopqrst", 1, 9, -9);
1884    test("abcde", 5, 0, "abcdefghijklmnopqrst", 1, 18, -18);
1885    test("abcde", 5, 0, "abcdefghijklmnopqrst", 1, 19, -19);
1886    test("abcde", 5, 0, "abcdefghijklmnopqrst", 1, 20, -19);
1887    test("abcde", 5, 0, "abcdefghijklmnopqrst", 10, 0, 0);
1888    test("abcde", 5, 0, "abcdefghijklmnopqrst", 10, 1, -1);
1889    test("abcde", 5, 0, "abcdefghijklmnopqrst", 10, 5, -5);
1890    test("abcde", 5, 0, "abcdefghijklmnopqrst", 10, 9, -9);
1891    test("abcde", 5, 0, "abcdefghijklmnopqrst", 10, 10, -10);
1892    test("abcde", 5, 0, "abcdefghijklmnopqrst", 10, 11, -10);
1893    test("abcde", 5, 0, "abcdefghijklmnopqrst", 19, 0, 0);
1894    test("abcde", 5, 0, "abcdefghijklmnopqrst", 19, 1, -1);
1895    test("abcde", 5, 0, "abcdefghijklmnopqrst", 19, 2, -1);
1896    test("abcde", 5, 0, "abcdefghijklmnopqrst", 20, 0, 0);
1897    test("abcde", 5, 0, "abcdefghijklmnopqrst", 20, 1, 0);
1898    test("abcde", 5, 0, "abcdefghijklmnopqrst", 21, 0, 0);
1899    test("abcde", 5, 1, "", 0, 0, 0);
1900    test("abcde", 5, 1, "", 0, 1, 0);
1901    test("abcde", 5, 1, "", 1, 0, 0);
1902    test("abcde", 5, 1, "abcde", 0, 0, 0);
1903    test("abcde", 5, 1, "abcde", 0, 1, -1);
1904    test("abcde", 5, 1, "abcde", 0, 2, -2);
1905    test("abcde", 5, 1, "abcde", 0, 4, -4);
1906    test("abcde", 5, 1, "abcde", 0, 5, -5);
1907    test("abcde", 5, 1, "abcde", 0, 6, -5);
1908    test("abcde", 5, 1, "abcde", 1, 0, 0);
1909    test("abcde", 5, 1, "abcde", 1, 1, -1);
1910    test("abcde", 5, 1, "abcde", 1, 2, -2);
1911    test("abcde", 5, 1, "abcde", 1, 3, -3);
1912    test("abcde", 5, 1, "abcde", 1, 4, -4);
1913    test("abcde", 5, 1, "abcde", 1, 5, -4);
1914    test("abcde", 5, 1, "abcde", 2, 0, 0);
1915    test("abcde", 5, 1, "abcde", 2, 1, -1);
1916    test("abcde", 5, 1, "abcde", 2, 2, -2);
1917    test("abcde", 5, 1, "abcde", 2, 3, -3);
1918    test("abcde", 5, 1, "abcde", 2, 4, -3);
1919    test("abcde", 5, 1, "abcde", 4, 0, 0);
1920    test("abcde", 5, 1, "abcde", 4, 1, -1);
1921    test("abcde", 5, 1, "abcde", 4, 2, -1);
1922    test("abcde", 5, 1, "abcde", 5, 0, 0);
1923}
1924
1925void test18()
1926{
1927    test("abcde", 5, 1, "abcde", 5, 1, 0);
1928    test("abcde", 5, 1, "abcde", 6, 0, 0);
1929    test("abcde", 5, 1, "abcdefghij", 0, 0, 0);
1930    test("abcde", 5, 1, "abcdefghij", 0, 1, -1);
1931    test("abcde", 5, 1, "abcdefghij", 0, 5, -5);
1932    test("abcde", 5, 1, "abcdefghij", 0, 9, -9);
1933    test("abcde", 5, 1, "abcdefghij", 0, 10, -10);
1934    test("abcde", 5, 1, "abcdefghij", 0, 11, -10);
1935    test("abcde", 5, 1, "abcdefghij", 1, 0, 0);
1936    test("abcde", 5, 1, "abcdefghij", 1, 1, -1);
1937    test("abcde", 5, 1, "abcdefghij", 1, 4, -4);
1938    test("abcde", 5, 1, "abcdefghij", 1, 8, -8);
1939    test("abcde", 5, 1, "abcdefghij", 1, 9, -9);
1940    test("abcde", 5, 1, "abcdefghij", 1, 10, -9);
1941    test("abcde", 5, 1, "abcdefghij", 5, 0, 0);
1942    test("abcde", 5, 1, "abcdefghij", 5, 1, -1);
1943    test("abcde", 5, 1, "abcdefghij", 5, 2, -2);
1944    test("abcde", 5, 1, "abcdefghij", 5, 4, -4);
1945    test("abcde", 5, 1, "abcdefghij", 5, 5, -5);
1946    test("abcde", 5, 1, "abcdefghij", 5, 6, -5);
1947    test("abcde", 5, 1, "abcdefghij", 9, 0, 0);
1948    test("abcde", 5, 1, "abcdefghij", 9, 1, -1);
1949    test("abcde", 5, 1, "abcdefghij", 9, 2, -1);
1950    test("abcde", 5, 1, "abcdefghij", 10, 0, 0);
1951    test("abcde", 5, 1, "abcdefghij", 10, 1, 0);
1952    test("abcde", 5, 1, "abcdefghij", 11, 0, 0);
1953    test("abcde", 5, 1, "abcdefghijklmnopqrst", 0, 0, 0);
1954    test("abcde", 5, 1, "abcdefghijklmnopqrst", 0, 1, -1);
1955    test("abcde", 5, 1, "abcdefghijklmnopqrst", 0, 10, -10);
1956    test("abcde", 5, 1, "abcdefghijklmnopqrst", 0, 19, -19);
1957    test("abcde", 5, 1, "abcdefghijklmnopqrst", 0, 20, -20);
1958    test("abcde", 5, 1, "abcdefghijklmnopqrst", 0, 21, -20);
1959    test("abcde", 5, 1, "abcdefghijklmnopqrst", 1, 0, 0);
1960    test("abcde", 5, 1, "abcdefghijklmnopqrst", 1, 1, -1);
1961    test("abcde", 5, 1, "abcdefghijklmnopqrst", 1, 9, -9);
1962    test("abcde", 5, 1, "abcdefghijklmnopqrst", 1, 18, -18);
1963    test("abcde", 5, 1, "abcdefghijklmnopqrst", 1, 19, -19);
1964    test("abcde", 5, 1, "abcdefghijklmnopqrst", 1, 20, -19);
1965    test("abcde", 5, 1, "abcdefghijklmnopqrst", 10, 0, 0);
1966    test("abcde", 5, 1, "abcdefghijklmnopqrst", 10, 1, -1);
1967    test("abcde", 5, 1, "abcdefghijklmnopqrst", 10, 5, -5);
1968    test("abcde", 5, 1, "abcdefghijklmnopqrst", 10, 9, -9);
1969    test("abcde", 5, 1, "abcdefghijklmnopqrst", 10, 10, -10);
1970    test("abcde", 5, 1, "abcdefghijklmnopqrst", 10, 11, -10);
1971    test("abcde", 5, 1, "abcdefghijklmnopqrst", 19, 0, 0);
1972    test("abcde", 5, 1, "abcdefghijklmnopqrst", 19, 1, -1);
1973    test("abcde", 5, 1, "abcdefghijklmnopqrst", 19, 2, -1);
1974    test("abcde", 5, 1, "abcdefghijklmnopqrst", 20, 0, 0);
1975    test("abcde", 5, 1, "abcdefghijklmnopqrst", 20, 1, 0);
1976    test("abcde", 5, 1, "abcdefghijklmnopqrst", 21, 0, 0);
1977    test("abcde", 6, 0, "", 0, 0, 0);
1978    test("abcde", 6, 0, "", 0, 1, 0);
1979    test("abcde", 6, 0, "", 1, 0, 0);
1980    test("abcde", 6, 0, "abcde", 0, 0, 0);
1981    test("abcde", 6, 0, "abcde", 0, 1, 0);
1982    test("abcde", 6, 0, "abcde", 0, 2, 0);
1983    test("abcde", 6, 0, "abcde", 0, 4, 0);
1984    test("abcde", 6, 0, "abcde", 0, 5, 0);
1985    test("abcde", 6, 0, "abcde", 0, 6, 0);
1986    test("abcde", 6, 0, "abcde", 1, 0, 0);
1987    test("abcde", 6, 0, "abcde", 1, 1, 0);
1988    test("abcde", 6, 0, "abcde", 1, 2, 0);
1989    test("abcde", 6, 0, "abcde", 1, 3, 0);
1990    test("abcde", 6, 0, "abcde", 1, 4, 0);
1991    test("abcde", 6, 0, "abcde", 1, 5, 0);
1992    test("abcde", 6, 0, "abcde", 2, 0, 0);
1993    test("abcde", 6, 0, "abcde", 2, 1, 0);
1994    test("abcde", 6, 0, "abcde", 2, 2, 0);
1995    test("abcde", 6, 0, "abcde", 2, 3, 0);
1996    test("abcde", 6, 0, "abcde", 2, 4, 0);
1997    test("abcde", 6, 0, "abcde", 4, 0, 0);
1998    test("abcde", 6, 0, "abcde", 4, 1, 0);
1999    test("abcde", 6, 0, "abcde", 4, 2, 0);
2000    test("abcde", 6, 0, "abcde", 5, 0, 0);
2001    test("abcde", 6, 0, "abcde", 5, 1, 0);
2002    test("abcde", 6, 0, "abcde", 6, 0, 0);
2003    test("abcde", 6, 0, "abcdefghij", 0, 0, 0);
2004    test("abcde", 6, 0, "abcdefghij", 0, 1, 0);
2005    test("abcde", 6, 0, "abcdefghij", 0, 5, 0);
2006    test("abcde", 6, 0, "abcdefghij", 0, 9, 0);
2007    test("abcde", 6, 0, "abcdefghij", 0, 10, 0);
2008    test("abcde", 6, 0, "abcdefghij", 0, 11, 0);
2009    test("abcde", 6, 0, "abcdefghij", 1, 0, 0);
2010    test("abcde", 6, 0, "abcdefghij", 1, 1, 0);
2011    test("abcde", 6, 0, "abcdefghij", 1, 4, 0);
2012    test("abcde", 6, 0, "abcdefghij", 1, 8, 0);
2013    test("abcde", 6, 0, "abcdefghij", 1, 9, 0);
2014    test("abcde", 6, 0, "abcdefghij", 1, 10, 0);
2015    test("abcde", 6, 0, "abcdefghij", 5, 0, 0);
2016    test("abcde", 6, 0, "abcdefghij", 5, 1, 0);
2017    test("abcde", 6, 0, "abcdefghij", 5, 2, 0);
2018    test("abcde", 6, 0, "abcdefghij", 5, 4, 0);
2019    test("abcde", 6, 0, "abcdefghij", 5, 5, 0);
2020    test("abcde", 6, 0, "abcdefghij", 5, 6, 0);
2021    test("abcde", 6, 0, "abcdefghij", 9, 0, 0);
2022    test("abcde", 6, 0, "abcdefghij", 9, 1, 0);
2023    test("abcde", 6, 0, "abcdefghij", 9, 2, 0);
2024    test("abcde", 6, 0, "abcdefghij", 10, 0, 0);
2025    test("abcde", 6, 0, "abcdefghij", 10, 1, 0);
2026    test("abcde", 6, 0, "abcdefghij", 11, 0, 0);
2027}
2028
2029void test19()
2030{
2031    test("abcde", 6, 0, "abcdefghijklmnopqrst", 0, 0, 0);
2032    test("abcde", 6, 0, "abcdefghijklmnopqrst", 0, 1, 0);
2033    test("abcde", 6, 0, "abcdefghijklmnopqrst", 0, 10, 0);
2034    test("abcde", 6, 0, "abcdefghijklmnopqrst", 0, 19, 0);
2035    test("abcde", 6, 0, "abcdefghijklmnopqrst", 0, 20, 0);
2036    test("abcde", 6, 0, "abcdefghijklmnopqrst", 0, 21, 0);
2037    test("abcde", 6, 0, "abcdefghijklmnopqrst", 1, 0, 0);
2038    test("abcde", 6, 0, "abcdefghijklmnopqrst", 1, 1, 0);
2039    test("abcde", 6, 0, "abcdefghijklmnopqrst", 1, 9, 0);
2040    test("abcde", 6, 0, "abcdefghijklmnopqrst", 1, 18, 0);
2041    test("abcde", 6, 0, "abcdefghijklmnopqrst", 1, 19, 0);
2042    test("abcde", 6, 0, "abcdefghijklmnopqrst", 1, 20, 0);
2043    test("abcde", 6, 0, "abcdefghijklmnopqrst", 10, 0, 0);
2044    test("abcde", 6, 0, "abcdefghijklmnopqrst", 10, 1, 0);
2045    test("abcde", 6, 0, "abcdefghijklmnopqrst", 10, 5, 0);
2046    test("abcde", 6, 0, "abcdefghijklmnopqrst", 10, 9, 0);
2047    test("abcde", 6, 0, "abcdefghijklmnopqrst", 10, 10, 0);
2048    test("abcde", 6, 0, "abcdefghijklmnopqrst", 10, 11, 0);
2049    test("abcde", 6, 0, "abcdefghijklmnopqrst", 19, 0, 0);
2050    test("abcde", 6, 0, "abcdefghijklmnopqrst", 19, 1, 0);
2051    test("abcde", 6, 0, "abcdefghijklmnopqrst", 19, 2, 0);
2052    test("abcde", 6, 0, "abcdefghijklmnopqrst", 20, 0, 0);
2053    test("abcde", 6, 0, "abcdefghijklmnopqrst", 20, 1, 0);
2054    test("abcde", 6, 0, "abcdefghijklmnopqrst", 21, 0, 0);
2055    test("abcdefghij", 0, 0, "", 0, 0, 0);
2056    test("abcdefghij", 0, 0, "", 0, 1, 0);
2057    test("abcdefghij", 0, 0, "", 1, 0, 0);
2058    test("abcdefghij", 0, 0, "abcde", 0, 0, 0);
2059    test("abcdefghij", 0, 0, "abcde", 0, 1, -1);
2060    test("abcdefghij", 0, 0, "abcde", 0, 2, -2);
2061    test("abcdefghij", 0, 0, "abcde", 0, 4, -4);
2062    test("abcdefghij", 0, 0, "abcde", 0, 5, -5);
2063    test("abcdefghij", 0, 0, "abcde", 0, 6, -5);
2064    test("abcdefghij", 0, 0, "abcde", 1, 0, 0);
2065    test("abcdefghij", 0, 0, "abcde", 1, 1, -1);
2066    test("abcdefghij", 0, 0, "abcde", 1, 2, -2);
2067    test("abcdefghij", 0, 0, "abcde", 1, 3, -3);
2068    test("abcdefghij", 0, 0, "abcde", 1, 4, -4);
2069    test("abcdefghij", 0, 0, "abcde", 1, 5, -4);
2070    test("abcdefghij", 0, 0, "abcde", 2, 0, 0);
2071    test("abcdefghij", 0, 0, "abcde", 2, 1, -1);
2072    test("abcdefghij", 0, 0, "abcde", 2, 2, -2);
2073    test("abcdefghij", 0, 0, "abcde", 2, 3, -3);
2074    test("abcdefghij", 0, 0, "abcde", 2, 4, -3);
2075    test("abcdefghij", 0, 0, "abcde", 4, 0, 0);
2076    test("abcdefghij", 0, 0, "abcde", 4, 1, -1);
2077    test("abcdefghij", 0, 0, "abcde", 4, 2, -1);
2078    test("abcdefghij", 0, 0, "abcde", 5, 0, 0);
2079    test("abcdefghij", 0, 0, "abcde", 5, 1, 0);
2080    test("abcdefghij", 0, 0, "abcde", 6, 0, 0);
2081    test("abcdefghij", 0, 0, "abcdefghij", 0, 0, 0);
2082    test("abcdefghij", 0, 0, "abcdefghij", 0, 1, -1);
2083    test("abcdefghij", 0, 0, "abcdefghij", 0, 5, -5);
2084    test("abcdefghij", 0, 0, "abcdefghij", 0, 9, -9);
2085    test("abcdefghij", 0, 0, "abcdefghij", 0, 10, -10);
2086    test("abcdefghij", 0, 0, "abcdefghij", 0, 11, -10);
2087    test("abcdefghij", 0, 0, "abcdefghij", 1, 0, 0);
2088    test("abcdefghij", 0, 0, "abcdefghij", 1, 1, -1);
2089    test("abcdefghij", 0, 0, "abcdefghij", 1, 4, -4);
2090    test("abcdefghij", 0, 0, "abcdefghij", 1, 8, -8);
2091    test("abcdefghij", 0, 0, "abcdefghij", 1, 9, -9);
2092    test("abcdefghij", 0, 0, "abcdefghij", 1, 10, -9);
2093    test("abcdefghij", 0, 0, "abcdefghij", 5, 0, 0);
2094    test("abcdefghij", 0, 0, "abcdefghij", 5, 1, -1);
2095    test("abcdefghij", 0, 0, "abcdefghij", 5, 2, -2);
2096    test("abcdefghij", 0, 0, "abcdefghij", 5, 4, -4);
2097    test("abcdefghij", 0, 0, "abcdefghij", 5, 5, -5);
2098    test("abcdefghij", 0, 0, "abcdefghij", 5, 6, -5);
2099    test("abcdefghij", 0, 0, "abcdefghij", 9, 0, 0);
2100    test("abcdefghij", 0, 0, "abcdefghij", 9, 1, -1);
2101    test("abcdefghij", 0, 0, "abcdefghij", 9, 2, -1);
2102    test("abcdefghij", 0, 0, "abcdefghij", 10, 0, 0);
2103    test("abcdefghij", 0, 0, "abcdefghij", 10, 1, 0);
2104    test("abcdefghij", 0, 0, "abcdefghij", 11, 0, 0);
2105    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 0, 0, 0);
2106    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 0, 1, -1);
2107    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 0, 10, -10);
2108    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 0, 19, -19);
2109    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 0, 20, -20);
2110    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 0, 21, -20);
2111    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 1, 0, 0);
2112    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 1, 1, -1);
2113    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 1, 9, -9);
2114    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 1, 18, -18);
2115    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 1, 19, -19);
2116    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 1, 20, -19);
2117    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 10, 0, 0);
2118    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 10, 1, -1);
2119    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 10, 5, -5);
2120    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 10, 9, -9);
2121    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 10, 10, -10);
2122    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 10, 11, -10);
2123    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 19, 0, 0);
2124    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 19, 1, -1);
2125    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 19, 2, -1);
2126    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 20, 0, 0);
2127    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 20, 1, 0);
2128    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 21, 0, 0);
2129    test("abcdefghij", 0, 1, "", 0, 0, 1);
2130    test("abcdefghij", 0, 1, "", 0, 1, 1);
2131}
2132
2133void test20()
2134{
2135    test("abcdefghij", 0, 1, "", 1, 0, 0);
2136    test("abcdefghij", 0, 1, "abcde", 0, 0, 1);
2137    test("abcdefghij", 0, 1, "abcde", 0, 1, 0);
2138    test("abcdefghij", 0, 1, "abcde", 0, 2, -1);
2139    test("abcdefghij", 0, 1, "abcde", 0, 4, -3);
2140    test("abcdefghij", 0, 1, "abcde", 0, 5, -4);
2141    test("abcdefghij", 0, 1, "abcde", 0, 6, -4);
2142    test("abcdefghij", 0, 1, "abcde", 1, 0, 1);
2143    test("abcdefghij", 0, 1, "abcde", 1, 1, -1);
2144    test("abcdefghij", 0, 1, "abcde", 1, 2, -1);
2145    test("abcdefghij", 0, 1, "abcde", 1, 3, -1);
2146    test("abcdefghij", 0, 1, "abcde", 1, 4, -1);
2147    test("abcdefghij", 0, 1, "abcde", 1, 5, -1);
2148    test("abcdefghij", 0, 1, "abcde", 2, 0, 1);
2149    test("abcdefghij", 0, 1, "abcde", 2, 1, -2);
2150    test("abcdefghij", 0, 1, "abcde", 2, 2, -2);
2151    test("abcdefghij", 0, 1, "abcde", 2, 3, -2);
2152    test("abcdefghij", 0, 1, "abcde", 2, 4, -2);
2153    test("abcdefghij", 0, 1, "abcde", 4, 0, 1);
2154    test("abcdefghij", 0, 1, "abcde", 4, 1, -4);
2155    test("abcdefghij", 0, 1, "abcde", 4, 2, -4);
2156    test("abcdefghij", 0, 1, "abcde", 5, 0, 1);
2157    test("abcdefghij", 0, 1, "abcde", 5, 1, 1);
2158    test("abcdefghij", 0, 1, "abcde", 6, 0, 0);
2159    test("abcdefghij", 0, 1, "abcdefghij", 0, 0, 1);
2160    test("abcdefghij", 0, 1, "abcdefghij", 0, 1, 0);
2161    test("abcdefghij", 0, 1, "abcdefghij", 0, 5, -4);
2162    test("abcdefghij", 0, 1, "abcdefghij", 0, 9, -8);
2163    test("abcdefghij", 0, 1, "abcdefghij", 0, 10, -9);
2164    test("abcdefghij", 0, 1, "abcdefghij", 0, 11, -9);
2165    test("abcdefghij", 0, 1, "abcdefghij", 1, 0, 1);
2166    test("abcdefghij", 0, 1, "abcdefghij", 1, 1, -1);
2167    test("abcdefghij", 0, 1, "abcdefghij", 1, 4, -1);
2168    test("abcdefghij", 0, 1, "abcdefghij", 1, 8, -1);
2169    test("abcdefghij", 0, 1, "abcdefghij", 1, 9, -1);
2170    test("abcdefghij", 0, 1, "abcdefghij", 1, 10, -1);
2171    test("abcdefghij", 0, 1, "abcdefghij", 5, 0, 1);
2172    test("abcdefghij", 0, 1, "abcdefghij", 5, 1, -5);
2173    test("abcdefghij", 0, 1, "abcdefghij", 5, 2, -5);
2174    test("abcdefghij", 0, 1, "abcdefghij", 5, 4, -5);
2175    test("abcdefghij", 0, 1, "abcdefghij", 5, 5, -5);
2176    test("abcdefghij", 0, 1, "abcdefghij", 5, 6, -5);
2177    test("abcdefghij", 0, 1, "abcdefghij", 9, 0, 1);
2178    test("abcdefghij", 0, 1, "abcdefghij", 9, 1, -9);
2179    test("abcdefghij", 0, 1, "abcdefghij", 9, 2, -9);
2180    test("abcdefghij", 0, 1, "abcdefghij", 10, 0, 1);
2181    test("abcdefghij", 0, 1, "abcdefghij", 10, 1, 1);
2182    test("abcdefghij", 0, 1, "abcdefghij", 11, 0, 0);
2183    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 0, 0, 1);
2184    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 0, 1, 0);
2185    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 0, 10, -9);
2186    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 0, 19, -18);
2187    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 0, 20, -19);
2188    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 0, 21, -19);
2189    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 1, 0, 1);
2190    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 1, 1, -1);
2191    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 1, 9, -1);
2192    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 1, 18, -1);
2193    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 1, 19, -1);
2194    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 1, 20, -1);
2195    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 10, 0, 1);
2196    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 10, 1, -10);
2197    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 10, 5, -10);
2198    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 10, 9, -10);
2199    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 10, 10, -10);
2200    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 10, 11, -10);
2201    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 19, 0, 1);
2202    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 19, 1, -19);
2203    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 19, 2, -19);
2204    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 20, 0, 1);
2205    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 20, 1, 1);
2206    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 21, 0, 0);
2207    test("abcdefghij", 0, 5, "", 0, 0, 5);
2208    test("abcdefghij", 0, 5, "", 0, 1, 5);
2209    test("abcdefghij", 0, 5, "", 1, 0, 0);
2210    test("abcdefghij", 0, 5, "abcde", 0, 0, 5);
2211    test("abcdefghij", 0, 5, "abcde", 0, 1, 4);
2212    test("abcdefghij", 0, 5, "abcde", 0, 2, 3);
2213    test("abcdefghij", 0, 5, "abcde", 0, 4, 1);
2214    test("abcdefghij", 0, 5, "abcde", 0, 5, 0);
2215    test("abcdefghij", 0, 5, "abcde", 0, 6, 0);
2216    test("abcdefghij", 0, 5, "abcde", 1, 0, 5);
2217    test("abcdefghij", 0, 5, "abcde", 1, 1, -1);
2218    test("abcdefghij", 0, 5, "abcde", 1, 2, -1);
2219    test("abcdefghij", 0, 5, "abcde", 1, 3, -1);
2220    test("abcdefghij", 0, 5, "abcde", 1, 4, -1);
2221    test("abcdefghij", 0, 5, "abcde", 1, 5, -1);
2222    test("abcdefghij", 0, 5, "abcde", 2, 0, 5);
2223    test("abcdefghij", 0, 5, "abcde", 2, 1, -2);
2224    test("abcdefghij", 0, 5, "abcde", 2, 2, -2);
2225    test("abcdefghij", 0, 5, "abcde", 2, 3, -2);
2226    test("abcdefghij", 0, 5, "abcde", 2, 4, -2);
2227    test("abcdefghij", 0, 5, "abcde", 4, 0, 5);
2228    test("abcdefghij", 0, 5, "abcde", 4, 1, -4);
2229    test("abcdefghij", 0, 5, "abcde", 4, 2, -4);
2230    test("abcdefghij", 0, 5, "abcde", 5, 0, 5);
2231    test("abcdefghij", 0, 5, "abcde", 5, 1, 5);
2232    test("abcdefghij", 0, 5, "abcde", 6, 0, 0);
2233    test("abcdefghij", 0, 5, "abcdefghij", 0, 0, 5);
2234    test("abcdefghij", 0, 5, "abcdefghij", 0, 1, 4);
2235}
2236
2237void test21()
2238{
2239    test("abcdefghij", 0, 5, "abcdefghij", 0, 5, 0);
2240    test("abcdefghij", 0, 5, "abcdefghij", 0, 9, -4);
2241    test("abcdefghij", 0, 5, "abcdefghij", 0, 10, -5);
2242    test("abcdefghij", 0, 5, "abcdefghij", 0, 11, -5);
2243    test("abcdefghij", 0, 5, "abcdefghij", 1, 0, 5);
2244    test("abcdefghij", 0, 5, "abcdefghij", 1, 1, -1);
2245    test("abcdefghij", 0, 5, "abcdefghij", 1, 4, -1);
2246    test("abcdefghij", 0, 5, "abcdefghij", 1, 8, -1);
2247    test("abcdefghij", 0, 5, "abcdefghij", 1, 9, -1);
2248    test("abcdefghij", 0, 5, "abcdefghij", 1, 10, -1);
2249    test("abcdefghij", 0, 5, "abcdefghij", 5, 0, 5);
2250    test("abcdefghij", 0, 5, "abcdefghij", 5, 1, -5);
2251    test("abcdefghij", 0, 5, "abcdefghij", 5, 2, -5);
2252    test("abcdefghij", 0, 5, "abcdefghij", 5, 4, -5);
2253    test("abcdefghij", 0, 5, "abcdefghij", 5, 5, -5);
2254    test("abcdefghij", 0, 5, "abcdefghij", 5, 6, -5);
2255    test("abcdefghij", 0, 5, "abcdefghij", 9, 0, 5);
2256    test("abcdefghij", 0, 5, "abcdefghij", 9, 1, -9);
2257    test("abcdefghij", 0, 5, "abcdefghij", 9, 2, -9);
2258    test("abcdefghij", 0, 5, "abcdefghij", 10, 0, 5);
2259    test("abcdefghij", 0, 5, "abcdefghij", 10, 1, 5);
2260    test("abcdefghij", 0, 5, "abcdefghij", 11, 0, 0);
2261    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 0, 0, 5);
2262    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 0, 1, 4);
2263    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 0, 10, -5);
2264    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 0, 19, -14);
2265    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 0, 20, -15);
2266    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 0, 21, -15);
2267    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 1, 0, 5);
2268    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 1, 1, -1);
2269    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 1, 9, -1);
2270    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 1, 18, -1);
2271    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 1, 19, -1);
2272    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 1, 20, -1);
2273    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 10, 0, 5);
2274    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 10, 1, -10);
2275    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 10, 5, -10);
2276    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 10, 9, -10);
2277    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 10, 10, -10);
2278    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 10, 11, -10);
2279    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 19, 0, 5);
2280    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 19, 1, -19);
2281    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 19, 2, -19);
2282    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 20, 0, 5);
2283    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 20, 1, 5);
2284    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 21, 0, 0);
2285    test("abcdefghij", 0, 9, "", 0, 0, 9);
2286    test("abcdefghij", 0, 9, "", 0, 1, 9);
2287    test("abcdefghij", 0, 9, "", 1, 0, 0);
2288    test("abcdefghij", 0, 9, "abcde", 0, 0, 9);
2289    test("abcdefghij", 0, 9, "abcde", 0, 1, 8);
2290    test("abcdefghij", 0, 9, "abcde", 0, 2, 7);
2291    test("abcdefghij", 0, 9, "abcde", 0, 4, 5);
2292    test("abcdefghij", 0, 9, "abcde", 0, 5, 4);
2293    test("abcdefghij", 0, 9, "abcde", 0, 6, 4);
2294    test("abcdefghij", 0, 9, "abcde", 1, 0, 9);
2295    test("abcdefghij", 0, 9, "abcde", 1, 1, -1);
2296    test("abcdefghij", 0, 9, "abcde", 1, 2, -1);
2297    test("abcdefghij", 0, 9, "abcde", 1, 3, -1);
2298    test("abcdefghij", 0, 9, "abcde", 1, 4, -1);
2299    test("abcdefghij", 0, 9, "abcde", 1, 5, -1);
2300    test("abcdefghij", 0, 9, "abcde", 2, 0, 9);
2301    test("abcdefghij", 0, 9, "abcde", 2, 1, -2);
2302    test("abcdefghij", 0, 9, "abcde", 2, 2, -2);
2303    test("abcdefghij", 0, 9, "abcde", 2, 3, -2);
2304    test("abcdefghij", 0, 9, "abcde", 2, 4, -2);
2305    test("abcdefghij", 0, 9, "abcde", 4, 0, 9);
2306    test("abcdefghij", 0, 9, "abcde", 4, 1, -4);
2307    test("abcdefghij", 0, 9, "abcde", 4, 2, -4);
2308    test("abcdefghij", 0, 9, "abcde", 5, 0, 9);
2309    test("abcdefghij", 0, 9, "abcde", 5, 1, 9);
2310    test("abcdefghij", 0, 9, "abcde", 6, 0, 0);
2311    test("abcdefghij", 0, 9, "abcdefghij", 0, 0, 9);
2312    test("abcdefghij", 0, 9, "abcdefghij", 0, 1, 8);
2313    test("abcdefghij", 0, 9, "abcdefghij", 0, 5, 4);
2314    test("abcdefghij", 0, 9, "abcdefghij", 0, 9, 0);
2315    test("abcdefghij", 0, 9, "abcdefghij", 0, 10, -1);
2316    test("abcdefghij", 0, 9, "abcdefghij", 0, 11, -1);
2317    test("abcdefghij", 0, 9, "abcdefghij", 1, 0, 9);
2318    test("abcdefghij", 0, 9, "abcdefghij", 1, 1, -1);
2319    test("abcdefghij", 0, 9, "abcdefghij", 1, 4, -1);
2320    test("abcdefghij", 0, 9, "abcdefghij", 1, 8, -1);
2321    test("abcdefghij", 0, 9, "abcdefghij", 1, 9, -1);
2322    test("abcdefghij", 0, 9, "abcdefghij", 1, 10, -1);
2323    test("abcdefghij", 0, 9, "abcdefghij", 5, 0, 9);
2324    test("abcdefghij", 0, 9, "abcdefghij", 5, 1, -5);
2325    test("abcdefghij", 0, 9, "abcdefghij", 5, 2, -5);
2326    test("abcdefghij", 0, 9, "abcdefghij", 5, 4, -5);
2327    test("abcdefghij", 0, 9, "abcdefghij", 5, 5, -5);
2328    test("abcdefghij", 0, 9, "abcdefghij", 5, 6, -5);
2329    test("abcdefghij", 0, 9, "abcdefghij", 9, 0, 9);
2330    test("abcdefghij", 0, 9, "abcdefghij", 9, 1, -9);
2331    test("abcdefghij", 0, 9, "abcdefghij", 9, 2, -9);
2332    test("abcdefghij", 0, 9, "abcdefghij", 10, 0, 9);
2333    test("abcdefghij", 0, 9, "abcdefghij", 10, 1, 9);
2334    test("abcdefghij", 0, 9, "abcdefghij", 11, 0, 0);
2335    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 0, 0, 9);
2336    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 0, 1, 8);
2337    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 0, 10, -1);
2338    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 0, 19, -10);
2339}
2340
2341void test22()
2342{
2343    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 0, 20, -11);
2344    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 0, 21, -11);
2345    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 1, 0, 9);
2346    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 1, 1, -1);
2347    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 1, 9, -1);
2348    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 1, 18, -1);
2349    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 1, 19, -1);
2350    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 1, 20, -1);
2351    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 10, 0, 9);
2352    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 10, 1, -10);
2353    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 10, 5, -10);
2354    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 10, 9, -10);
2355    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 10, 10, -10);
2356    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 10, 11, -10);
2357    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 19, 0, 9);
2358    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 19, 1, -19);
2359    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 19, 2, -19);
2360    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 20, 0, 9);
2361    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 20, 1, 9);
2362    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 21, 0, 0);
2363    test("abcdefghij", 0, 10, "", 0, 0, 10);
2364    test("abcdefghij", 0, 10, "", 0, 1, 10);
2365    test("abcdefghij", 0, 10, "", 1, 0, 0);
2366    test("abcdefghij", 0, 10, "abcde", 0, 0, 10);
2367    test("abcdefghij", 0, 10, "abcde", 0, 1, 9);
2368    test("abcdefghij", 0, 10, "abcde", 0, 2, 8);
2369    test("abcdefghij", 0, 10, "abcde", 0, 4, 6);
2370    test("abcdefghij", 0, 10, "abcde", 0, 5, 5);
2371    test("abcdefghij", 0, 10, "abcde", 0, 6, 5);
2372    test("abcdefghij", 0, 10, "abcde", 1, 0, 10);
2373    test("abcdefghij", 0, 10, "abcde", 1, 1, -1);
2374    test("abcdefghij", 0, 10, "abcde", 1, 2, -1);
2375    test("abcdefghij", 0, 10, "abcde", 1, 3, -1);
2376    test("abcdefghij", 0, 10, "abcde", 1, 4, -1);
2377    test("abcdefghij", 0, 10, "abcde", 1, 5, -1);
2378    test("abcdefghij", 0, 10, "abcde", 2, 0, 10);
2379    test("abcdefghij", 0, 10, "abcde", 2, 1, -2);
2380    test("abcdefghij", 0, 10, "abcde", 2, 2, -2);
2381    test("abcdefghij", 0, 10, "abcde", 2, 3, -2);
2382    test("abcdefghij", 0, 10, "abcde", 2, 4, -2);
2383    test("abcdefghij", 0, 10, "abcde", 4, 0, 10);
2384    test("abcdefghij", 0, 10, "abcde", 4, 1, -4);
2385    test("abcdefghij", 0, 10, "abcde", 4, 2, -4);
2386    test("abcdefghij", 0, 10, "abcde", 5, 0, 10);
2387    test("abcdefghij", 0, 10, "abcde", 5, 1, 10);
2388    test("abcdefghij", 0, 10, "abcde", 6, 0, 0);
2389    test("abcdefghij", 0, 10, "abcdefghij", 0, 0, 10);
2390    test("abcdefghij", 0, 10, "abcdefghij", 0, 1, 9);
2391    test("abcdefghij", 0, 10, "abcdefghij", 0, 5, 5);
2392    test("abcdefghij", 0, 10, "abcdefghij", 0, 9, 1);
2393    test("abcdefghij", 0, 10, "abcdefghij", 0, 10, 0);
2394    test("abcdefghij", 0, 10, "abcdefghij", 0, 11, 0);
2395    test("abcdefghij", 0, 10, "abcdefghij", 1, 0, 10);
2396    test("abcdefghij", 0, 10, "abcdefghij", 1, 1, -1);
2397    test("abcdefghij", 0, 10, "abcdefghij", 1, 4, -1);
2398    test("abcdefghij", 0, 10, "abcdefghij", 1, 8, -1);
2399    test("abcdefghij", 0, 10, "abcdefghij", 1, 9, -1);
2400    test("abcdefghij", 0, 10, "abcdefghij", 1, 10, -1);
2401    test("abcdefghij", 0, 10, "abcdefghij", 5, 0, 10);
2402    test("abcdefghij", 0, 10, "abcdefghij", 5, 1, -5);
2403    test("abcdefghij", 0, 10, "abcdefghij", 5, 2, -5);
2404    test("abcdefghij", 0, 10, "abcdefghij", 5, 4, -5);
2405    test("abcdefghij", 0, 10, "abcdefghij", 5, 5, -5);
2406    test("abcdefghij", 0, 10, "abcdefghij", 5, 6, -5);
2407    test("abcdefghij", 0, 10, "abcdefghij", 9, 0, 10);
2408    test("abcdefghij", 0, 10, "abcdefghij", 9, 1, -9);
2409    test("abcdefghij", 0, 10, "abcdefghij", 9, 2, -9);
2410    test("abcdefghij", 0, 10, "abcdefghij", 10, 0, 10);
2411    test("abcdefghij", 0, 10, "abcdefghij", 10, 1, 10);
2412    test("abcdefghij", 0, 10, "abcdefghij", 11, 0, 0);
2413    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 0, 0, 10);
2414    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 0, 1, 9);
2415    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 0, 10, 0);
2416    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 0, 19, -9);
2417    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 0, 20, -10);
2418    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 0, 21, -10);
2419    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 1, 0, 10);
2420    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 1, 1, -1);
2421    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 1, 9, -1);
2422    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 1, 18, -1);
2423    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 1, 19, -1);
2424    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 1, 20, -1);
2425    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 10, 0, 10);
2426    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 10, 1, -10);
2427    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 10, 5, -10);
2428    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 10, 9, -10);
2429    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 10, 10, -10);
2430    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 10, 11, -10);
2431    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 19, 0, 10);
2432    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 19, 1, -19);
2433    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 19, 2, -19);
2434    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 20, 0, 10);
2435    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 20, 1, 10);
2436    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 21, 0, 0);
2437    test("abcdefghij", 0, 11, "", 0, 0, 10);
2438    test("abcdefghij", 0, 11, "", 0, 1, 10);
2439    test("abcdefghij", 0, 11, "", 1, 0, 0);
2440    test("abcdefghij", 0, 11, "abcde", 0, 0, 10);
2441    test("abcdefghij", 0, 11, "abcde", 0, 1, 9);
2442    test("abcdefghij", 0, 11, "abcde", 0, 2, 8);
2443}
2444
2445void test23()
2446{
2447    test("abcdefghij", 0, 11, "abcde", 0, 4, 6);
2448    test("abcdefghij", 0, 11, "abcde", 0, 5, 5);
2449    test("abcdefghij", 0, 11, "abcde", 0, 6, 5);
2450    test("abcdefghij", 0, 11, "abcde", 1, 0, 10);
2451    test("abcdefghij", 0, 11, "abcde", 1, 1, -1);
2452    test("abcdefghij", 0, 11, "abcde", 1, 2, -1);
2453    test("abcdefghij", 0, 11, "abcde", 1, 3, -1);
2454    test("abcdefghij", 0, 11, "abcde", 1, 4, -1);
2455    test("abcdefghij", 0, 11, "abcde", 1, 5, -1);
2456    test("abcdefghij", 0, 11, "abcde", 2, 0, 10);
2457    test("abcdefghij", 0, 11, "abcde", 2, 1, -2);
2458    test("abcdefghij", 0, 11, "abcde", 2, 2, -2);
2459    test("abcdefghij", 0, 11, "abcde", 2, 3, -2);
2460    test("abcdefghij", 0, 11, "abcde", 2, 4, -2);
2461    test("abcdefghij", 0, 11, "abcde", 4, 0, 10);
2462    test("abcdefghij", 0, 11, "abcde", 4, 1, -4);
2463    test("abcdefghij", 0, 11, "abcde", 4, 2, -4);
2464    test("abcdefghij", 0, 11, "abcde", 5, 0, 10);
2465    test("abcdefghij", 0, 11, "abcde", 5, 1, 10);
2466    test("abcdefghij", 0, 11, "abcde", 6, 0, 0);
2467    test("abcdefghij", 0, 11, "abcdefghij", 0, 0, 10);
2468    test("abcdefghij", 0, 11, "abcdefghij", 0, 1, 9);
2469    test("abcdefghij", 0, 11, "abcdefghij", 0, 5, 5);
2470    test("abcdefghij", 0, 11, "abcdefghij", 0, 9, 1);
2471    test("abcdefghij", 0, 11, "abcdefghij", 0, 10, 0);
2472    test("abcdefghij", 0, 11, "abcdefghij", 0, 11, 0);
2473    test("abcdefghij", 0, 11, "abcdefghij", 1, 0, 10);
2474    test("abcdefghij", 0, 11, "abcdefghij", 1, 1, -1);
2475    test("abcdefghij", 0, 11, "abcdefghij", 1, 4, -1);
2476    test("abcdefghij", 0, 11, "abcdefghij", 1, 8, -1);
2477    test("abcdefghij", 0, 11, "abcdefghij", 1, 9, -1);
2478    test("abcdefghij", 0, 11, "abcdefghij", 1, 10, -1);
2479    test("abcdefghij", 0, 11, "abcdefghij", 5, 0, 10);
2480    test("abcdefghij", 0, 11, "abcdefghij", 5, 1, -5);
2481    test("abcdefghij", 0, 11, "abcdefghij", 5, 2, -5);
2482    test("abcdefghij", 0, 11, "abcdefghij", 5, 4, -5);
2483    test("abcdefghij", 0, 11, "abcdefghij", 5, 5, -5);
2484    test("abcdefghij", 0, 11, "abcdefghij", 5, 6, -5);
2485    test("abcdefghij", 0, 11, "abcdefghij", 9, 0, 10);
2486    test("abcdefghij", 0, 11, "abcdefghij", 9, 1, -9);
2487    test("abcdefghij", 0, 11, "abcdefghij", 9, 2, -9);
2488    test("abcdefghij", 0, 11, "abcdefghij", 10, 0, 10);
2489    test("abcdefghij", 0, 11, "abcdefghij", 10, 1, 10);
2490    test("abcdefghij", 0, 11, "abcdefghij", 11, 0, 0);
2491    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 0, 0, 10);
2492    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 0, 1, 9);
2493    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 0, 10, 0);
2494    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 0, 19, -9);
2495    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 0, 20, -10);
2496    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 0, 21, -10);
2497    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 1, 0, 10);
2498    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 1, 1, -1);
2499    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 1, 9, -1);
2500    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 1, 18, -1);
2501    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 1, 19, -1);
2502    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 1, 20, -1);
2503    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 10, 0, 10);
2504    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 10, 1, -10);
2505    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 10, 5, -10);
2506    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 10, 9, -10);
2507    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 10, 10, -10);
2508    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 10, 11, -10);
2509    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 19, 0, 10);
2510    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 19, 1, -19);
2511    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 19, 2, -19);
2512    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 20, 0, 10);
2513    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 20, 1, 10);
2514    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 21, 0, 0);
2515    test("abcdefghij", 1, 0, "", 0, 0, 0);
2516    test("abcdefghij", 1, 0, "", 0, 1, 0);
2517    test("abcdefghij", 1, 0, "", 1, 0, 0);
2518    test("abcdefghij", 1, 0, "abcde", 0, 0, 0);
2519    test("abcdefghij", 1, 0, "abcde", 0, 1, -1);
2520    test("abcdefghij", 1, 0, "abcde", 0, 2, -2);
2521    test("abcdefghij", 1, 0, "abcde", 0, 4, -4);
2522    test("abcdefghij", 1, 0, "abcde", 0, 5, -5);
2523    test("abcdefghij", 1, 0, "abcde", 0, 6, -5);
2524    test("abcdefghij", 1, 0, "abcde", 1, 0, 0);
2525    test("abcdefghij", 1, 0, "abcde", 1, 1, -1);
2526    test("abcdefghij", 1, 0, "abcde", 1, 2, -2);
2527    test("abcdefghij", 1, 0, "abcde", 1, 3, -3);
2528    test("abcdefghij", 1, 0, "abcde", 1, 4, -4);
2529    test("abcdefghij", 1, 0, "abcde", 1, 5, -4);
2530    test("abcdefghij", 1, 0, "abcde", 2, 0, 0);
2531    test("abcdefghij", 1, 0, "abcde", 2, 1, -1);
2532    test("abcdefghij", 1, 0, "abcde", 2, 2, -2);
2533    test("abcdefghij", 1, 0, "abcde", 2, 3, -3);
2534    test("abcdefghij", 1, 0, "abcde", 2, 4, -3);
2535    test("abcdefghij", 1, 0, "abcde", 4, 0, 0);
2536    test("abcdefghij", 1, 0, "abcde", 4, 1, -1);
2537    test("abcdefghij", 1, 0, "abcde", 4, 2, -1);
2538    test("abcdefghij", 1, 0, "abcde", 5, 0, 0);
2539    test("abcdefghij", 1, 0, "abcde", 5, 1, 0);
2540    test("abcdefghij", 1, 0, "abcde", 6, 0, 0);
2541    test("abcdefghij", 1, 0, "abcdefghij", 0, 0, 0);
2542    test("abcdefghij", 1, 0, "abcdefghij", 0, 1, -1);
2543    test("abcdefghij", 1, 0, "abcdefghij", 0, 5, -5);
2544    test("abcdefghij", 1, 0, "abcdefghij", 0, 9, -9);
2545    test("abcdefghij", 1, 0, "abcdefghij", 0, 10, -10);
2546    test("abcdefghij", 1, 0, "abcdefghij", 0, 11, -10);
2547}
2548
2549void test24()
2550{
2551    test("abcdefghij", 1, 0, "abcdefghij", 1, 0, 0);
2552    test("abcdefghij", 1, 0, "abcdefghij", 1, 1, -1);
2553    test("abcdefghij", 1, 0, "abcdefghij", 1, 4, -4);
2554    test("abcdefghij", 1, 0, "abcdefghij", 1, 8, -8);
2555    test("abcdefghij", 1, 0, "abcdefghij", 1, 9, -9);
2556    test("abcdefghij", 1, 0, "abcdefghij", 1, 10, -9);
2557    test("abcdefghij", 1, 0, "abcdefghij", 5, 0, 0);
2558    test("abcdefghij", 1, 0, "abcdefghij", 5, 1, -1);
2559    test("abcdefghij", 1, 0, "abcdefghij", 5, 2, -2);
2560    test("abcdefghij", 1, 0, "abcdefghij", 5, 4, -4);
2561    test("abcdefghij", 1, 0, "abcdefghij", 5, 5, -5);
2562    test("abcdefghij", 1, 0, "abcdefghij", 5, 6, -5);
2563    test("abcdefghij", 1, 0, "abcdefghij", 9, 0, 0);
2564    test("abcdefghij", 1, 0, "abcdefghij", 9, 1, -1);
2565    test("abcdefghij", 1, 0, "abcdefghij", 9, 2, -1);
2566    test("abcdefghij", 1, 0, "abcdefghij", 10, 0, 0);
2567    test("abcdefghij", 1, 0, "abcdefghij", 10, 1, 0);
2568    test("abcdefghij", 1, 0, "abcdefghij", 11, 0, 0);
2569    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 0, 0, 0);
2570    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 0, 1, -1);
2571    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 0, 10, -10);
2572    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 0, 19, -19);
2573    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 0, 20, -20);
2574    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 0, 21, -20);
2575    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 1, 0, 0);
2576    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 1, 1, -1);
2577    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 1, 9, -9);
2578    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 1, 18, -18);
2579    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 1, 19, -19);
2580    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 1, 20, -19);
2581    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 10, 0, 0);
2582    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 10, 1, -1);
2583    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 10, 5, -5);
2584    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 10, 9, -9);
2585    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 10, 10, -10);
2586    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 10, 11, -10);
2587    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 19, 0, 0);
2588    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 19, 1, -1);
2589    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 19, 2, -1);
2590    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 20, 0, 0);
2591    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 20, 1, 0);
2592    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 21, 0, 0);
2593    test("abcdefghij", 1, 1, "", 0, 0, 1);
2594    test("abcdefghij", 1, 1, "", 0, 1, 1);
2595    test("abcdefghij", 1, 1, "", 1, 0, 0);
2596    test("abcdefghij", 1, 1, "abcde", 0, 0, 1);
2597    test("abcdefghij", 1, 1, "abcde", 0, 1, 1);
2598    test("abcdefghij", 1, 1, "abcde", 0, 2, 1);
2599    test("abcdefghij", 1, 1, "abcde", 0, 4, 1);
2600    test("abcdefghij", 1, 1, "abcde", 0, 5, 1);
2601    test("abcdefghij", 1, 1, "abcde", 0, 6, 1);
2602    test("abcdefghij", 1, 1, "abcde", 1, 0, 1);
2603    test("abcdefghij", 1, 1, "abcde", 1, 1, 0);
2604    test("abcdefghij", 1, 1, "abcde", 1, 2, -1);
2605    test("abcdefghij", 1, 1, "abcde", 1, 3, -2);
2606    test("abcdefghij", 1, 1, "abcde", 1, 4, -3);
2607    test("abcdefghij", 1, 1, "abcde", 1, 5, -3);
2608    test("abcdefghij", 1, 1, "abcde", 2, 0, 1);
2609    test("abcdefghij", 1, 1, "abcde", 2, 1, -1);
2610    test("abcdefghij", 1, 1, "abcde", 2, 2, -1);
2611    test("abcdefghij", 1, 1, "abcde", 2, 3, -1);
2612    test("abcdefghij", 1, 1, "abcde", 2, 4, -1);
2613    test("abcdefghij", 1, 1, "abcde", 4, 0, 1);
2614    test("abcdefghij", 1, 1, "abcde", 4, 1, -3);
2615    test("abcdefghij", 1, 1, "abcde", 4, 2, -3);
2616    test("abcdefghij", 1, 1, "abcde", 5, 0, 1);
2617    test("abcdefghij", 1, 1, "abcde", 5, 1, 1);
2618    test("abcdefghij", 1, 1, "abcde", 6, 0, 0);
2619    test("abcdefghij", 1, 1, "abcdefghij", 0, 0, 1);
2620    test("abcdefghij", 1, 1, "abcdefghij", 0, 1, 1);
2621    test("abcdefghij", 1, 1, "abcdefghij", 0, 5, 1);
2622    test("abcdefghij", 1, 1, "abcdefghij", 0, 9, 1);
2623    test("abcdefghij", 1, 1, "abcdefghij", 0, 10, 1);
2624    test("abcdefghij", 1, 1, "abcdefghij", 0, 11, 1);
2625    test("abcdefghij", 1, 1, "abcdefghij", 1, 0, 1);
2626    test("abcdefghij", 1, 1, "abcdefghij", 1, 1, 0);
2627    test("abcdefghij", 1, 1, "abcdefghij", 1, 4, -3);
2628    test("abcdefghij", 1, 1, "abcdefghij", 1, 8, -7);
2629    test("abcdefghij", 1, 1, "abcdefghij", 1, 9, -8);
2630    test("abcdefghij", 1, 1, "abcdefghij", 1, 10, -8);
2631    test("abcdefghij", 1, 1, "abcdefghij", 5, 0, 1);
2632    test("abcdefghij", 1, 1, "abcdefghij", 5, 1, -4);
2633    test("abcdefghij", 1, 1, "abcdefghij", 5, 2, -4);
2634    test("abcdefghij", 1, 1, "abcdefghij", 5, 4, -4);
2635    test("abcdefghij", 1, 1, "abcdefghij", 5, 5, -4);
2636    test("abcdefghij", 1, 1, "abcdefghij", 5, 6, -4);
2637    test("abcdefghij", 1, 1, "abcdefghij", 9, 0, 1);
2638    test("abcdefghij", 1, 1, "abcdefghij", 9, 1, -8);
2639    test("abcdefghij", 1, 1, "abcdefghij", 9, 2, -8);
2640    test("abcdefghij", 1, 1, "abcdefghij", 10, 0, 1);
2641    test("abcdefghij", 1, 1, "abcdefghij", 10, 1, 1);
2642    test("abcdefghij", 1, 1, "abcdefghij", 11, 0, 0);
2643    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 0, 0, 1);
2644    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 0, 1, 1);
2645    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 0, 10, 1);
2646    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 0, 19, 1);
2647    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 0, 20, 1);
2648    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 0, 21, 1);
2649    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1, 0, 1);
2650    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1, 1, 0);
2651}
2652
2653void test25()
2654{
2655    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1, 9, -8);
2656    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1, 18, -17);
2657    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1, 19, -18);
2658    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1, 20, -18);
2659    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 10, 0, 1);
2660    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 10, 1, -9);
2661    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 10, 5, -9);
2662    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 10, 9, -9);
2663    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 10, 10, -9);
2664    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 10, 11, -9);
2665    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 19, 0, 1);
2666    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 19, 1, -18);
2667    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 19, 2, -18);
2668    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 20, 0, 1);
2669    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 20, 1, 1);
2670    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 21, 0, 0);
2671    test("abcdefghij", 1, 4, "", 0, 0, 4);
2672    test("abcdefghij", 1, 4, "", 0, 1, 4);
2673    test("abcdefghij", 1, 4, "", 1, 0, 0);
2674    test("abcdefghij", 1, 4, "abcde", 0, 0, 4);
2675    test("abcdefghij", 1, 4, "abcde", 0, 1, 1);
2676    test("abcdefghij", 1, 4, "abcde", 0, 2, 1);
2677    test("abcdefghij", 1, 4, "abcde", 0, 4, 1);
2678    test("abcdefghij", 1, 4, "abcde", 0, 5, 1);
2679    test("abcdefghij", 1, 4, "abcde", 0, 6, 1);
2680    test("abcdefghij", 1, 4, "abcde", 1, 0, 4);
2681    test("abcdefghij", 1, 4, "abcde", 1, 1, 3);
2682    test("abcdefghij", 1, 4, "abcde", 1, 2, 2);
2683    test("abcdefghij", 1, 4, "abcde", 1, 3, 1);
2684    test("abcdefghij", 1, 4, "abcde", 1, 4, 0);
2685    test("abcdefghij", 1, 4, "abcde", 1, 5, 0);
2686    test("abcdefghij", 1, 4, "abcde", 2, 0, 4);
2687    test("abcdefghij", 1, 4, "abcde", 2, 1, -1);
2688    test("abcdefghij", 1, 4, "abcde", 2, 2, -1);
2689    test("abcdefghij", 1, 4, "abcde", 2, 3, -1);
2690    test("abcdefghij", 1, 4, "abcde", 2, 4, -1);
2691    test("abcdefghij", 1, 4, "abcde", 4, 0, 4);
2692    test("abcdefghij", 1, 4, "abcde", 4, 1, -3);
2693    test("abcdefghij", 1, 4, "abcde", 4, 2, -3);
2694    test("abcdefghij", 1, 4, "abcde", 5, 0, 4);
2695    test("abcdefghij", 1, 4, "abcde", 5, 1, 4);
2696    test("abcdefghij", 1, 4, "abcde", 6, 0, 0);
2697    test("abcdefghij", 1, 4, "abcdefghij", 0, 0, 4);
2698    test("abcdefghij", 1, 4, "abcdefghij", 0, 1, 1);
2699    test("abcdefghij", 1, 4, "abcdefghij", 0, 5, 1);
2700    test("abcdefghij", 1, 4, "abcdefghij", 0, 9, 1);
2701    test("abcdefghij", 1, 4, "abcdefghij", 0, 10, 1);
2702    test("abcdefghij", 1, 4, "abcdefghij", 0, 11, 1);
2703    test("abcdefghij", 1, 4, "abcdefghij", 1, 0, 4);
2704    test("abcdefghij", 1, 4, "abcdefghij", 1, 1, 3);
2705    test("abcdefghij", 1, 4, "abcdefghij", 1, 4, 0);
2706    test("abcdefghij", 1, 4, "abcdefghij", 1, 8, -4);
2707    test("abcdefghij", 1, 4, "abcdefghij", 1, 9, -5);
2708    test("abcdefghij", 1, 4, "abcdefghij", 1, 10, -5);
2709    test("abcdefghij", 1, 4, "abcdefghij", 5, 0, 4);
2710    test("abcdefghij", 1, 4, "abcdefghij", 5, 1, -4);
2711    test("abcdefghij", 1, 4, "abcdefghij", 5, 2, -4);
2712    test("abcdefghij", 1, 4, "abcdefghij", 5, 4, -4);
2713    test("abcdefghij", 1, 4, "abcdefghij", 5, 5, -4);
2714    test("abcdefghij", 1, 4, "abcdefghij", 5, 6, -4);
2715    test("abcdefghij", 1, 4, "abcdefghij", 9, 0, 4);
2716    test("abcdefghij", 1, 4, "abcdefghij", 9, 1, -8);
2717    test("abcdefghij", 1, 4, "abcdefghij", 9, 2, -8);
2718    test("abcdefghij", 1, 4, "abcdefghij", 10, 0, 4);
2719    test("abcdefghij", 1, 4, "abcdefghij", 10, 1, 4);
2720    test("abcdefghij", 1, 4, "abcdefghij", 11, 0, 0);
2721    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 0, 0, 4);
2722    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 0, 1, 1);
2723    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 0, 10, 1);
2724    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 0, 19, 1);
2725    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 0, 20, 1);
2726    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 0, 21, 1);
2727    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1, 0, 4);
2728    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1, 1, 3);
2729    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1, 9, -5);
2730    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1, 18, -14);
2731    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1, 19, -15);
2732    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1, 20, -15);
2733    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 10, 0, 4);
2734    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 10, 1, -9);
2735    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 10, 5, -9);
2736    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 10, 9, -9);
2737    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 10, 10, -9);
2738    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 10, 11, -9);
2739    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 19, 0, 4);
2740    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 19, 1, -18);
2741    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 19, 2, -18);
2742    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 20, 0, 4);
2743    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 20, 1, 4);
2744    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 21, 0, 0);
2745    test("abcdefghij", 1, 8, "", 0, 0, 8);
2746    test("abcdefghij", 1, 8, "", 0, 1, 8);
2747    test("abcdefghij", 1, 8, "", 1, 0, 0);
2748    test("abcdefghij", 1, 8, "abcde", 0, 0, 8);
2749    test("abcdefghij", 1, 8, "abcde", 0, 1, 1);
2750    test("abcdefghij", 1, 8, "abcde", 0, 2, 1);
2751    test("abcdefghij", 1, 8, "abcde", 0, 4, 1);
2752    test("abcdefghij", 1, 8, "abcde", 0, 5, 1);
2753    test("abcdefghij", 1, 8, "abcde", 0, 6, 1);
2754    test("abcdefghij", 1, 8, "abcde", 1, 0, 8);
2755}
2756
2757void test26()
2758{
2759    test("abcdefghij", 1, 8, "abcde", 1, 1, 7);
2760    test("abcdefghij", 1, 8, "abcde", 1, 2, 6);
2761    test("abcdefghij", 1, 8, "abcde", 1, 3, 5);
2762    test("abcdefghij", 1, 8, "abcde", 1, 4, 4);
2763    test("abcdefghij", 1, 8, "abcde", 1, 5, 4);
2764    test("abcdefghij", 1, 8, "abcde", 2, 0, 8);
2765    test("abcdefghij", 1, 8, "abcde", 2, 1, -1);
2766    test("abcdefghij", 1, 8, "abcde", 2, 2, -1);
2767    test("abcdefghij", 1, 8, "abcde", 2, 3, -1);
2768    test("abcdefghij", 1, 8, "abcde", 2, 4, -1);
2769    test("abcdefghij", 1, 8, "abcde", 4, 0, 8);
2770    test("abcdefghij", 1, 8, "abcde", 4, 1, -3);
2771    test("abcdefghij", 1, 8, "abcde", 4, 2, -3);
2772    test("abcdefghij", 1, 8, "abcde", 5, 0, 8);
2773    test("abcdefghij", 1, 8, "abcde", 5, 1, 8);
2774    test("abcdefghij", 1, 8, "abcde", 6, 0, 0);
2775    test("abcdefghij", 1, 8, "abcdefghij", 0, 0, 8);
2776    test("abcdefghij", 1, 8, "abcdefghij", 0, 1, 1);
2777    test("abcdefghij", 1, 8, "abcdefghij", 0, 5, 1);
2778    test("abcdefghij", 1, 8, "abcdefghij", 0, 9, 1);
2779    test("abcdefghij", 1, 8, "abcdefghij", 0, 10, 1);
2780    test("abcdefghij", 1, 8, "abcdefghij", 0, 11, 1);
2781    test("abcdefghij", 1, 8, "abcdefghij", 1, 0, 8);
2782    test("abcdefghij", 1, 8, "abcdefghij", 1, 1, 7);
2783    test("abcdefghij", 1, 8, "abcdefghij", 1, 4, 4);
2784    test("abcdefghij", 1, 8, "abcdefghij", 1, 8, 0);
2785    test("abcdefghij", 1, 8, "abcdefghij", 1, 9, -1);
2786    test("abcdefghij", 1, 8, "abcdefghij", 1, 10, -1);
2787    test("abcdefghij", 1, 8, "abcdefghij", 5, 0, 8);
2788    test("abcdefghij", 1, 8, "abcdefghij", 5, 1, -4);
2789    test("abcdefghij", 1, 8, "abcdefghij", 5, 2, -4);
2790    test("abcdefghij", 1, 8, "abcdefghij", 5, 4, -4);
2791    test("abcdefghij", 1, 8, "abcdefghij", 5, 5, -4);
2792    test("abcdefghij", 1, 8, "abcdefghij", 5, 6, -4);
2793    test("abcdefghij", 1, 8, "abcdefghij", 9, 0, 8);
2794    test("abcdefghij", 1, 8, "abcdefghij", 9, 1, -8);
2795    test("abcdefghij", 1, 8, "abcdefghij", 9, 2, -8);
2796    test("abcdefghij", 1, 8, "abcdefghij", 10, 0, 8);
2797    test("abcdefghij", 1, 8, "abcdefghij", 10, 1, 8);
2798    test("abcdefghij", 1, 8, "abcdefghij", 11, 0, 0);
2799    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 0, 0, 8);
2800    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 0, 1, 1);
2801    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 0, 10, 1);
2802    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 0, 19, 1);
2803    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 0, 20, 1);
2804    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 0, 21, 1);
2805    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1, 0, 8);
2806    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1, 1, 7);
2807    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1, 9, -1);
2808    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1, 18, -10);
2809    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1, 19, -11);
2810    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1, 20, -11);
2811    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 10, 0, 8);
2812    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 10, 1, -9);
2813    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 10, 5, -9);
2814    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 10, 9, -9);
2815    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 10, 10, -9);
2816    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 10, 11, -9);
2817    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 19, 0, 8);
2818    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 19, 1, -18);
2819    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 19, 2, -18);
2820    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 20, 0, 8);
2821    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 20, 1, 8);
2822    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 21, 0, 0);
2823    test("abcdefghij", 1, 9, "", 0, 0, 9);
2824    test("abcdefghij", 1, 9, "", 0, 1, 9);
2825    test("abcdefghij", 1, 9, "", 1, 0, 0);
2826    test("abcdefghij", 1, 9, "abcde", 0, 0, 9);
2827    test("abcdefghij", 1, 9, "abcde", 0, 1, 1);
2828    test("abcdefghij", 1, 9, "abcde", 0, 2, 1);
2829    test("abcdefghij", 1, 9, "abcde", 0, 4, 1);
2830    test("abcdefghij", 1, 9, "abcde", 0, 5, 1);
2831    test("abcdefghij", 1, 9, "abcde", 0, 6, 1);
2832    test("abcdefghij", 1, 9, "abcde", 1, 0, 9);
2833    test("abcdefghij", 1, 9, "abcde", 1, 1, 8);
2834    test("abcdefghij", 1, 9, "abcde", 1, 2, 7);
2835    test("abcdefghij", 1, 9, "abcde", 1, 3, 6);
2836    test("abcdefghij", 1, 9, "abcde", 1, 4, 5);
2837    test("abcdefghij", 1, 9, "abcde", 1, 5, 5);
2838    test("abcdefghij", 1, 9, "abcde", 2, 0, 9);
2839    test("abcdefghij", 1, 9, "abcde", 2, 1, -1);
2840    test("abcdefghij", 1, 9, "abcde", 2, 2, -1);
2841    test("abcdefghij", 1, 9, "abcde", 2, 3, -1);
2842    test("abcdefghij", 1, 9, "abcde", 2, 4, -1);
2843    test("abcdefghij", 1, 9, "abcde", 4, 0, 9);
2844    test("abcdefghij", 1, 9, "abcde", 4, 1, -3);
2845    test("abcdefghij", 1, 9, "abcde", 4, 2, -3);
2846    test("abcdefghij", 1, 9, "abcde", 5, 0, 9);
2847    test("abcdefghij", 1, 9, "abcde", 5, 1, 9);
2848    test("abcdefghij", 1, 9, "abcde", 6, 0, 0);
2849    test("abcdefghij", 1, 9, "abcdefghij", 0, 0, 9);
2850    test("abcdefghij", 1, 9, "abcdefghij", 0, 1, 1);
2851    test("abcdefghij", 1, 9, "abcdefghij", 0, 5, 1);
2852    test("abcdefghij", 1, 9, "abcdefghij", 0, 9, 1);
2853    test("abcdefghij", 1, 9, "abcdefghij", 0, 10, 1);
2854    test("abcdefghij", 1, 9, "abcdefghij", 0, 11, 1);
2855    test("abcdefghij", 1, 9, "abcdefghij", 1, 0, 9);
2856    test("abcdefghij", 1, 9, "abcdefghij", 1, 1, 8);
2857    test("abcdefghij", 1, 9, "abcdefghij", 1, 4, 5);
2858    test("abcdefghij", 1, 9, "abcdefghij", 1, 8, 1);
2859}
2860
2861void test27()
2862{
2863    test("abcdefghij", 1, 9, "abcdefghij", 1, 9, 0);
2864    test("abcdefghij", 1, 9, "abcdefghij", 1, 10, 0);
2865    test("abcdefghij", 1, 9, "abcdefghij", 5, 0, 9);
2866    test("abcdefghij", 1, 9, "abcdefghij", 5, 1, -4);
2867    test("abcdefghij", 1, 9, "abcdefghij", 5, 2, -4);
2868    test("abcdefghij", 1, 9, "abcdefghij", 5, 4, -4);
2869    test("abcdefghij", 1, 9, "abcdefghij", 5, 5, -4);
2870    test("abcdefghij", 1, 9, "abcdefghij", 5, 6, -4);
2871    test("abcdefghij", 1, 9, "abcdefghij", 9, 0, 9);
2872    test("abcdefghij", 1, 9, "abcdefghij", 9, 1, -8);
2873    test("abcdefghij", 1, 9, "abcdefghij", 9, 2, -8);
2874    test("abcdefghij", 1, 9, "abcdefghij", 10, 0, 9);
2875    test("abcdefghij", 1, 9, "abcdefghij", 10, 1, 9);
2876    test("abcdefghij", 1, 9, "abcdefghij", 11, 0, 0);
2877    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 0, 0, 9);
2878    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 0, 1, 1);
2879    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 0, 10, 1);
2880    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 0, 19, 1);
2881    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 0, 20, 1);
2882    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 0, 21, 1);
2883    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1, 0, 9);
2884    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1, 1, 8);
2885    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1, 9, 0);
2886    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1, 18, -9);
2887    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1, 19, -10);
2888    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1, 20, -10);
2889    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 10, 0, 9);
2890    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 10, 1, -9);
2891    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 10, 5, -9);
2892    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 10, 9, -9);
2893    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 10, 10, -9);
2894    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 10, 11, -9);
2895    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 19, 0, 9);
2896    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 19, 1, -18);
2897    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 19, 2, -18);
2898    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 20, 0, 9);
2899    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 20, 1, 9);
2900    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 21, 0, 0);
2901    test("abcdefghij", 1, 10, "", 0, 0, 9);
2902    test("abcdefghij", 1, 10, "", 0, 1, 9);
2903    test("abcdefghij", 1, 10, "", 1, 0, 0);
2904    test("abcdefghij", 1, 10, "abcde", 0, 0, 9);
2905    test("abcdefghij", 1, 10, "abcde", 0, 1, 1);
2906    test("abcdefghij", 1, 10, "abcde", 0, 2, 1);
2907    test("abcdefghij", 1, 10, "abcde", 0, 4, 1);
2908    test("abcdefghij", 1, 10, "abcde", 0, 5, 1);
2909    test("abcdefghij", 1, 10, "abcde", 0, 6, 1);
2910    test("abcdefghij", 1, 10, "abcde", 1, 0, 9);
2911    test("abcdefghij", 1, 10, "abcde", 1, 1, 8);
2912    test("abcdefghij", 1, 10, "abcde", 1, 2, 7);
2913    test("abcdefghij", 1, 10, "abcde", 1, 3, 6);
2914    test("abcdefghij", 1, 10, "abcde", 1, 4, 5);
2915    test("abcdefghij", 1, 10, "abcde", 1, 5, 5);
2916    test("abcdefghij", 1, 10, "abcde", 2, 0, 9);
2917    test("abcdefghij", 1, 10, "abcde", 2, 1, -1);
2918    test("abcdefghij", 1, 10, "abcde", 2, 2, -1);
2919    test("abcdefghij", 1, 10, "abcde", 2, 3, -1);
2920    test("abcdefghij", 1, 10, "abcde", 2, 4, -1);
2921    test("abcdefghij", 1, 10, "abcde", 4, 0, 9);
2922    test("abcdefghij", 1, 10, "abcde", 4, 1, -3);
2923    test("abcdefghij", 1, 10, "abcde", 4, 2, -3);
2924    test("abcdefghij", 1, 10, "abcde", 5, 0, 9);
2925    test("abcdefghij", 1, 10, "abcde", 5, 1, 9);
2926    test("abcdefghij", 1, 10, "abcde", 6, 0, 0);
2927    test("abcdefghij", 1, 10, "abcdefghij", 0, 0, 9);
2928    test("abcdefghij", 1, 10, "abcdefghij", 0, 1, 1);
2929    test("abcdefghij", 1, 10, "abcdefghij", 0, 5, 1);
2930    test("abcdefghij", 1, 10, "abcdefghij", 0, 9, 1);
2931    test("abcdefghij", 1, 10, "abcdefghij", 0, 10, 1);
2932    test("abcdefghij", 1, 10, "abcdefghij", 0, 11, 1);
2933    test("abcdefghij", 1, 10, "abcdefghij", 1, 0, 9);
2934    test("abcdefghij", 1, 10, "abcdefghij", 1, 1, 8);
2935    test("abcdefghij", 1, 10, "abcdefghij", 1, 4, 5);
2936    test("abcdefghij", 1, 10, "abcdefghij", 1, 8, 1);
2937    test("abcdefghij", 1, 10, "abcdefghij", 1, 9, 0);
2938    test("abcdefghij", 1, 10, "abcdefghij", 1, 10, 0);
2939    test("abcdefghij", 1, 10, "abcdefghij", 5, 0, 9);
2940    test("abcdefghij", 1, 10, "abcdefghij", 5, 1, -4);
2941    test("abcdefghij", 1, 10, "abcdefghij", 5, 2, -4);
2942    test("abcdefghij", 1, 10, "abcdefghij", 5, 4, -4);
2943    test("abcdefghij", 1, 10, "abcdefghij", 5, 5, -4);
2944    test("abcdefghij", 1, 10, "abcdefghij", 5, 6, -4);
2945    test("abcdefghij", 1, 10, "abcdefghij", 9, 0, 9);
2946    test("abcdefghij", 1, 10, "abcdefghij", 9, 1, -8);
2947    test("abcdefghij", 1, 10, "abcdefghij", 9, 2, -8);
2948    test("abcdefghij", 1, 10, "abcdefghij", 10, 0, 9);
2949    test("abcdefghij", 1, 10, "abcdefghij", 10, 1, 9);
2950    test("abcdefghij", 1, 10, "abcdefghij", 11, 0, 0);
2951    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 0, 0, 9);
2952    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 0, 1, 1);
2953    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 0, 10, 1);
2954    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 0, 19, 1);
2955    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 0, 20, 1);
2956    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 0, 21, 1);
2957    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1, 0, 9);
2958    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1, 1, 8);
2959    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1, 9, 0);
2960    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1, 18, -9);
2961    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1, 19, -10);
2962    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1, 20, -10);
2963}
2964
2965void test28()
2966{
2967    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 10, 0, 9);
2968    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 10, 1, -9);
2969    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 10, 5, -9);
2970    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 10, 9, -9);
2971    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 10, 10, -9);
2972    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 10, 11, -9);
2973    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 19, 0, 9);
2974    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 19, 1, -18);
2975    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 19, 2, -18);
2976    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 20, 0, 9);
2977    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 20, 1, 9);
2978    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 21, 0, 0);
2979    test("abcdefghij", 5, 0, "", 0, 0, 0);
2980    test("abcdefghij", 5, 0, "", 0, 1, 0);
2981    test("abcdefghij", 5, 0, "", 1, 0, 0);
2982    test("abcdefghij", 5, 0, "abcde", 0, 0, 0);
2983    test("abcdefghij", 5, 0, "abcde", 0, 1, -1);
2984    test("abcdefghij", 5, 0, "abcde", 0, 2, -2);
2985    test("abcdefghij", 5, 0, "abcde", 0, 4, -4);
2986    test("abcdefghij", 5, 0, "abcde", 0, 5, -5);
2987    test("abcdefghij", 5, 0, "abcde", 0, 6, -5);
2988    test("abcdefghij", 5, 0, "abcde", 1, 0, 0);
2989    test("abcdefghij", 5, 0, "abcde", 1, 1, -1);
2990    test("abcdefghij", 5, 0, "abcde", 1, 2, -2);
2991    test("abcdefghij", 5, 0, "abcde", 1, 3, -3);
2992    test("abcdefghij", 5, 0, "abcde", 1, 4, -4);
2993    test("abcdefghij", 5, 0, "abcde", 1, 5, -4);
2994    test("abcdefghij", 5, 0, "abcde", 2, 0, 0);
2995    test("abcdefghij", 5, 0, "abcde", 2, 1, -1);
2996    test("abcdefghij", 5, 0, "abcde", 2, 2, -2);
2997    test("abcdefghij", 5, 0, "abcde", 2, 3, -3);
2998    test("abcdefghij", 5, 0, "abcde", 2, 4, -3);
2999    test("abcdefghij", 5, 0, "abcde", 4, 0, 0);
3000    test("abcdefghij", 5, 0, "abcde", 4, 1, -1);
3001    test("abcdefghij", 5, 0, "abcde", 4, 2, -1);
3002    test("abcdefghij", 5, 0, "abcde", 5, 0, 0);
3003    test("abcdefghij", 5, 0, "abcde", 5, 1, 0);
3004    test("abcdefghij", 5, 0, "abcde", 6, 0, 0);
3005    test("abcdefghij", 5, 0, "abcdefghij", 0, 0, 0);
3006    test("abcdefghij", 5, 0, "abcdefghij", 0, 1, -1);
3007    test("abcdefghij", 5, 0, "abcdefghij", 0, 5, -5);
3008    test("abcdefghij", 5, 0, "abcdefghij", 0, 9, -9);
3009    test("abcdefghij", 5, 0, "abcdefghij", 0, 10, -10);
3010    test("abcdefghij", 5, 0, "abcdefghij", 0, 11, -10);
3011    test("abcdefghij", 5, 0, "abcdefghij", 1, 0, 0);
3012    test("abcdefghij", 5, 0, "abcdefghij", 1, 1, -1);
3013    test("abcdefghij", 5, 0, "abcdefghij", 1, 4, -4);
3014    test("abcdefghij", 5, 0, "abcdefghij", 1, 8, -8);
3015    test("abcdefghij", 5, 0, "abcdefghij", 1, 9, -9);
3016    test("abcdefghij", 5, 0, "abcdefghij", 1, 10, -9);
3017    test("abcdefghij", 5, 0, "abcdefghij", 5, 0, 0);
3018    test("abcdefghij", 5, 0, "abcdefghij", 5, 1, -1);
3019    test("abcdefghij", 5, 0, "abcdefghij", 5, 2, -2);
3020    test("abcdefghij", 5, 0, "abcdefghij", 5, 4, -4);
3021    test("abcdefghij", 5, 0, "abcdefghij", 5, 5, -5);
3022    test("abcdefghij", 5, 0, "abcdefghij", 5, 6, -5);
3023    test("abcdefghij", 5, 0, "abcdefghij", 9, 0, 0);
3024    test("abcdefghij", 5, 0, "abcdefghij", 9, 1, -1);
3025    test("abcdefghij", 5, 0, "abcdefghij", 9, 2, -1);
3026    test("abcdefghij", 5, 0, "abcdefghij", 10, 0, 0);
3027    test("abcdefghij", 5, 0, "abcdefghij", 10, 1, 0);
3028    test("abcdefghij", 5, 0, "abcdefghij", 11, 0, 0);
3029    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 0, 0, 0);
3030    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 0, 1, -1);
3031    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 0, 10, -10);
3032    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 0, 19, -19);
3033    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 0, 20, -20);
3034    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 0, 21, -20);
3035    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 1, 0, 0);
3036    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 1, 1, -1);
3037    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 1, 9, -9);
3038    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 1, 18, -18);
3039    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 1, 19, -19);
3040    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 1, 20, -19);
3041    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 10, 0, 0);
3042    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 10, 1, -1);
3043    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 10, 5, -5);
3044    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 10, 9, -9);
3045    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 10, 10, -10);
3046    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 10, 11, -10);
3047    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 19, 0, 0);
3048    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 19, 1, -1);
3049    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 19, 2, -1);
3050    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 20, 0, 0);
3051    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 20, 1, 0);
3052    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 21, 0, 0);
3053    test("abcdefghij", 5, 1, "", 0, 0, 1);
3054    test("abcdefghij", 5, 1, "", 0, 1, 1);
3055    test("abcdefghij", 5, 1, "", 1, 0, 0);
3056    test("abcdefghij", 5, 1, "abcde", 0, 0, 1);
3057    test("abcdefghij", 5, 1, "abcde", 0, 1, 5);
3058    test("abcdefghij", 5, 1, "abcde", 0, 2, 5);
3059    test("abcdefghij", 5, 1, "abcde", 0, 4, 5);
3060    test("abcdefghij", 5, 1, "abcde", 0, 5, 5);
3061    test("abcdefghij", 5, 1, "abcde", 0, 6, 5);
3062    test("abcdefghij", 5, 1, "abcde", 1, 0, 1);
3063    test("abcdefghij", 5, 1, "abcde", 1, 1, 4);
3064    test("abcdefghij", 5, 1, "abcde", 1, 2, 4);
3065    test("abcdefghij", 5, 1, "abcde", 1, 3, 4);
3066    test("abcdefghij", 5, 1, "abcde", 1, 4, 4);
3067}
3068
3069void test29()
3070{
3071    test("abcdefghij", 5, 1, "abcde", 1, 5, 4);
3072    test("abcdefghij", 5, 1, "abcde", 2, 0, 1);
3073    test("abcdefghij", 5, 1, "abcde", 2, 1, 3);
3074    test("abcdefghij", 5, 1, "abcde", 2, 2, 3);
3075    test("abcdefghij", 5, 1, "abcde", 2, 3, 3);
3076    test("abcdefghij", 5, 1, "abcde", 2, 4, 3);
3077    test("abcdefghij", 5, 1, "abcde", 4, 0, 1);
3078    test("abcdefghij", 5, 1, "abcde", 4, 1, 1);
3079    test("abcdefghij", 5, 1, "abcde", 4, 2, 1);
3080    test("abcdefghij", 5, 1, "abcde", 5, 0, 1);
3081    test("abcdefghij", 5, 1, "abcde", 5, 1, 1);
3082    test("abcdefghij", 5, 1, "abcde", 6, 0, 0);
3083    test("abcdefghij", 5, 1, "abcdefghij", 0, 0, 1);
3084    test("abcdefghij", 5, 1, "abcdefghij", 0, 1, 5);
3085    test("abcdefghij", 5, 1, "abcdefghij", 0, 5, 5);
3086    test("abcdefghij", 5, 1, "abcdefghij", 0, 9, 5);
3087    test("abcdefghij", 5, 1, "abcdefghij", 0, 10, 5);
3088    test("abcdefghij", 5, 1, "abcdefghij", 0, 11, 5);
3089    test("abcdefghij", 5, 1, "abcdefghij", 1, 0, 1);
3090    test("abcdefghij", 5, 1, "abcdefghij", 1, 1, 4);
3091    test("abcdefghij", 5, 1, "abcdefghij", 1, 4, 4);
3092    test("abcdefghij", 5, 1, "abcdefghij", 1, 8, 4);
3093    test("abcdefghij", 5, 1, "abcdefghij", 1, 9, 4);
3094    test("abcdefghij", 5, 1, "abcdefghij", 1, 10, 4);
3095    test("abcdefghij", 5, 1, "abcdefghij", 5, 0, 1);
3096    test("abcdefghij", 5, 1, "abcdefghij", 5, 1, 0);
3097    test("abcdefghij", 5, 1, "abcdefghij", 5, 2, -1);
3098    test("abcdefghij", 5, 1, "abcdefghij", 5, 4, -3);
3099    test("abcdefghij", 5, 1, "abcdefghij", 5, 5, -4);
3100    test("abcdefghij", 5, 1, "abcdefghij", 5, 6, -4);
3101    test("abcdefghij", 5, 1, "abcdefghij", 9, 0, 1);
3102    test("abcdefghij", 5, 1, "abcdefghij", 9, 1, -4);
3103    test("abcdefghij", 5, 1, "abcdefghij", 9, 2, -4);
3104    test("abcdefghij", 5, 1, "abcdefghij", 10, 0, 1);
3105    test("abcdefghij", 5, 1, "abcdefghij", 10, 1, 1);
3106    test("abcdefghij", 5, 1, "abcdefghij", 11, 0, 0);
3107    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 0, 0, 1);
3108    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 0, 1, 5);
3109    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 0, 10, 5);
3110    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 0, 19, 5);
3111    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 0, 20, 5);
3112    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 0, 21, 5);
3113    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 1, 0, 1);
3114    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 1, 1, 4);
3115    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 1, 9, 4);
3116    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 1, 18, 4);
3117    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 1, 19, 4);
3118    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 1, 20, 4);
3119    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 10, 0, 1);
3120    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 10, 1, -5);
3121    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 10, 5, -5);
3122    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 10, 9, -5);
3123    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 10, 10, -5);
3124    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 10, 11, -5);
3125    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 19, 0, 1);
3126    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 19, 1, -14);
3127    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 19, 2, -14);
3128    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 20, 0, 1);
3129    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 20, 1, 1);
3130    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 21, 0, 0);
3131    test("abcdefghij", 5, 2, "", 0, 0, 2);
3132    test("abcdefghij", 5, 2, "", 0, 1, 2);
3133    test("abcdefghij", 5, 2, "", 1, 0, 0);
3134    test("abcdefghij", 5, 2, "abcde", 0, 0, 2);
3135    test("abcdefghij", 5, 2, "abcde", 0, 1, 5);
3136    test("abcdefghij", 5, 2, "abcde", 0, 2, 5);
3137    test("abcdefghij", 5, 2, "abcde", 0, 4, 5);
3138    test("abcdefghij", 5, 2, "abcde", 0, 5, 5);
3139    test("abcdefghij", 5, 2, "abcde", 0, 6, 5);
3140    test("abcdefghij", 5, 2, "abcde", 1, 0, 2);
3141    test("abcdefghij", 5, 2, "abcde", 1, 1, 4);
3142    test("abcdefghij", 5, 2, "abcde", 1, 2, 4);
3143    test("abcdefghij", 5, 2, "abcde", 1, 3, 4);
3144    test("abcdefghij", 5, 2, "abcde", 1, 4, 4);
3145    test("abcdefghij", 5, 2, "abcde", 1, 5, 4);
3146    test("abcdefghij", 5, 2, "abcde", 2, 0, 2);
3147    test("abcdefghij", 5, 2, "abcde", 2, 1, 3);
3148    test("abcdefghij", 5, 2, "abcde", 2, 2, 3);
3149    test("abcdefghij", 5, 2, "abcde", 2, 3, 3);
3150    test("abcdefghij", 5, 2, "abcde", 2, 4, 3);
3151    test("abcdefghij", 5, 2, "abcde", 4, 0, 2);
3152    test("abcdefghij", 5, 2, "abcde", 4, 1, 1);
3153    test("abcdefghij", 5, 2, "abcde", 4, 2, 1);
3154    test("abcdefghij", 5, 2, "abcde", 5, 0, 2);
3155    test("abcdefghij", 5, 2, "abcde", 5, 1, 2);
3156    test("abcdefghij", 5, 2, "abcde", 6, 0, 0);
3157    test("abcdefghij", 5, 2, "abcdefghij", 0, 0, 2);
3158    test("abcdefghij", 5, 2, "abcdefghij", 0, 1, 5);
3159    test("abcdefghij", 5, 2, "abcdefghij", 0, 5, 5);
3160    test("abcdefghij", 5, 2, "abcdefghij", 0, 9, 5);
3161    test("abcdefghij", 5, 2, "abcdefghij", 0, 10, 5);
3162    test("abcdefghij", 5, 2, "abcdefghij", 0, 11, 5);
3163    test("abcdefghij", 5, 2, "abcdefghij", 1, 0, 2);
3164    test("abcdefghij", 5, 2, "abcdefghij", 1, 1, 4);
3165    test("abcdefghij", 5, 2, "abcdefghij", 1, 4, 4);
3166    test("abcdefghij", 5, 2, "abcdefghij", 1, 8, 4);
3167    test("abcdefghij", 5, 2, "abcdefghij", 1, 9, 4);
3168    test("abcdefghij", 5, 2, "abcdefghij", 1, 10, 4);
3169    test("abcdefghij", 5, 2, "abcdefghij", 5, 0, 2);
3170    test("abcdefghij", 5, 2, "abcdefghij", 5, 1, 1);
3171}
3172
3173void test30()
3174{
3175    test("abcdefghij", 5, 2, "abcdefghij", 5, 2, 0);
3176    test("abcdefghij", 5, 2, "abcdefghij", 5, 4, -2);
3177    test("abcdefghij", 5, 2, "abcdefghij", 5, 5, -3);
3178    test("abcdefghij", 5, 2, "abcdefghij", 5, 6, -3);
3179    test("abcdefghij", 5, 2, "abcdefghij", 9, 0, 2);
3180    test("abcdefghij", 5, 2, "abcdefghij", 9, 1, -4);
3181    test("abcdefghij", 5, 2, "abcdefghij", 9, 2, -4);
3182    test("abcdefghij", 5, 2, "abcdefghij", 10, 0, 2);
3183    test("abcdefghij", 5, 2, "abcdefghij", 10, 1, 2);
3184    test("abcdefghij", 5, 2, "abcdefghij", 11, 0, 0);
3185    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 0, 0, 2);
3186    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 0, 1, 5);
3187    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 0, 10, 5);
3188    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 0, 19, 5);
3189    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 0, 20, 5);
3190    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 0, 21, 5);
3191    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 1, 0, 2);
3192    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 1, 1, 4);
3193    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 1, 9, 4);
3194    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 1, 18, 4);
3195    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 1, 19, 4);
3196    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 1, 20, 4);
3197    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 10, 0, 2);
3198    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 10, 1, -5);
3199    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 10, 5, -5);
3200    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 10, 9, -5);
3201    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 10, 10, -5);
3202    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 10, 11, -5);
3203    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 19, 0, 2);
3204    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 19, 1, -14);
3205    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 19, 2, -14);
3206    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 20, 0, 2);
3207    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 20, 1, 2);
3208    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 21, 0, 0);
3209    test("abcdefghij", 5, 4, "", 0, 0, 4);
3210    test("abcdefghij", 5, 4, "", 0, 1, 4);
3211    test("abcdefghij", 5, 4, "", 1, 0, 0);
3212    test("abcdefghij", 5, 4, "abcde", 0, 0, 4);
3213    test("abcdefghij", 5, 4, "abcde", 0, 1, 5);
3214    test("abcdefghij", 5, 4, "abcde", 0, 2, 5);
3215    test("abcdefghij", 5, 4, "abcde", 0, 4, 5);
3216    test("abcdefghij", 5, 4, "abcde", 0, 5, 5);
3217    test("abcdefghij", 5, 4, "abcde", 0, 6, 5);
3218    test("abcdefghij", 5, 4, "abcde", 1, 0, 4);
3219    test("abcdefghij", 5, 4, "abcde", 1, 1, 4);
3220    test("abcdefghij", 5, 4, "abcde", 1, 2, 4);
3221    test("abcdefghij", 5, 4, "abcde", 1, 3, 4);
3222    test("abcdefghij", 5, 4, "abcde", 1, 4, 4);
3223    test("abcdefghij", 5, 4, "abcde", 1, 5, 4);
3224    test("abcdefghij", 5, 4, "abcde", 2, 0, 4);
3225    test("abcdefghij", 5, 4, "abcde", 2, 1, 3);
3226    test("abcdefghij", 5, 4, "abcde", 2, 2, 3);
3227    test("abcdefghij", 5, 4, "abcde", 2, 3, 3);
3228    test("abcdefghij", 5, 4, "abcde", 2, 4, 3);
3229    test("abcdefghij", 5, 4, "abcde", 4, 0, 4);
3230    test("abcdefghij", 5, 4, "abcde", 4, 1, 1);
3231    test("abcdefghij", 5, 4, "abcde", 4, 2, 1);
3232    test("abcdefghij", 5, 4, "abcde", 5, 0, 4);
3233    test("abcdefghij", 5, 4, "abcde", 5, 1, 4);
3234    test("abcdefghij", 5, 4, "abcde", 6, 0, 0);
3235    test("abcdefghij", 5, 4, "abcdefghij", 0, 0, 4);
3236    test("abcdefghij", 5, 4, "abcdefghij", 0, 1, 5);
3237    test("abcdefghij", 5, 4, "abcdefghij", 0, 5, 5);
3238    test("abcdefghij", 5, 4, "abcdefghij", 0, 9, 5);
3239    test("abcdefghij", 5, 4, "abcdefghij", 0, 10, 5);
3240    test("abcdefghij", 5, 4, "abcdefghij", 0, 11, 5);
3241    test("abcdefghij", 5, 4, "abcdefghij", 1, 0, 4);
3242    test("abcdefghij", 5, 4, "abcdefghij", 1, 1, 4);
3243    test("abcdefghij", 5, 4, "abcdefghij", 1, 4, 4);
3244    test("abcdefghij", 5, 4, "abcdefghij", 1, 8, 4);
3245    test("abcdefghij", 5, 4, "abcdefghij", 1, 9, 4);
3246    test("abcdefghij", 5, 4, "abcdefghij", 1, 10, 4);
3247    test("abcdefghij", 5, 4, "abcdefghij", 5, 0, 4);
3248    test("abcdefghij", 5, 4, "abcdefghij", 5, 1, 3);
3249    test("abcdefghij", 5, 4, "abcdefghij", 5, 2, 2);
3250    test("abcdefghij", 5, 4, "abcdefghij", 5, 4, 0);
3251    test("abcdefghij", 5, 4, "abcdefghij", 5, 5, -1);
3252    test("abcdefghij", 5, 4, "abcdefghij", 5, 6, -1);
3253    test("abcdefghij", 5, 4, "abcdefghij", 9, 0, 4);
3254    test("abcdefghij", 5, 4, "abcdefghij", 9, 1, -4);
3255    test("abcdefghij", 5, 4, "abcdefghij", 9, 2, -4);
3256    test("abcdefghij", 5, 4, "abcdefghij", 10, 0, 4);
3257    test("abcdefghij", 5, 4, "abcdefghij", 10, 1, 4);
3258    test("abcdefghij", 5, 4, "abcdefghij", 11, 0, 0);
3259    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 0, 0, 4);
3260    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 0, 1, 5);
3261    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 0, 10, 5);
3262    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 0, 19, 5);
3263    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 0, 20, 5);
3264    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 0, 21, 5);
3265    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 1, 0, 4);
3266    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 1, 1, 4);
3267    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 1, 9, 4);
3268    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 1, 18, 4);
3269    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 1, 19, 4);
3270    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 1, 20, 4);
3271    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 10, 0, 4);
3272    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 10, 1, -5);
3273    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 10, 5, -5);
3274    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 10, 9, -5);
3275}
3276
3277void test31()
3278{
3279    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 10, 10, -5);
3280    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 10, 11, -5);
3281    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 19, 0, 4);
3282    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 19, 1, -14);
3283    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 19, 2, -14);
3284    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 20, 0, 4);
3285    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 20, 1, 4);
3286    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 21, 0, 0);
3287    test("abcdefghij", 5, 5, "", 0, 0, 5);
3288    test("abcdefghij", 5, 5, "", 0, 1, 5);
3289    test("abcdefghij", 5, 5, "", 1, 0, 0);
3290    test("abcdefghij", 5, 5, "abcde", 0, 0, 5);
3291    test("abcdefghij", 5, 5, "abcde", 0, 1, 5);
3292    test("abcdefghij", 5, 5, "abcde", 0, 2, 5);
3293    test("abcdefghij", 5, 5, "abcde", 0, 4, 5);
3294    test("abcdefghij", 5, 5, "abcde", 0, 5, 5);
3295    test("abcdefghij", 5, 5, "abcde", 0, 6, 5);
3296    test("abcdefghij", 5, 5, "abcde", 1, 0, 5);
3297    test("abcdefghij", 5, 5, "abcde", 1, 1, 4);
3298    test("abcdefghij", 5, 5, "abcde", 1, 2, 4);
3299    test("abcdefghij", 5, 5, "abcde", 1, 3, 4);
3300    test("abcdefghij", 5, 5, "abcde", 1, 4, 4);
3301    test("abcdefghij", 5, 5, "abcde", 1, 5, 4);
3302    test("abcdefghij", 5, 5, "abcde", 2, 0, 5);
3303    test("abcdefghij", 5, 5, "abcde", 2, 1, 3);
3304    test("abcdefghij", 5, 5, "abcde", 2, 2, 3);
3305    test("abcdefghij", 5, 5, "abcde", 2, 3, 3);
3306    test("abcdefghij", 5, 5, "abcde", 2, 4, 3);
3307    test("abcdefghij", 5, 5, "abcde", 4, 0, 5);
3308    test("abcdefghij", 5, 5, "abcde", 4, 1, 1);
3309    test("abcdefghij", 5, 5, "abcde", 4, 2, 1);
3310    test("abcdefghij", 5, 5, "abcde", 5, 0, 5);
3311    test("abcdefghij", 5, 5, "abcde", 5, 1, 5);
3312    test("abcdefghij", 5, 5, "abcde", 6, 0, 0);
3313    test("abcdefghij", 5, 5, "abcdefghij", 0, 0, 5);
3314    test("abcdefghij", 5, 5, "abcdefghij", 0, 1, 5);
3315    test("abcdefghij", 5, 5, "abcdefghij", 0, 5, 5);
3316    test("abcdefghij", 5, 5, "abcdefghij", 0, 9, 5);
3317    test("abcdefghij", 5, 5, "abcdefghij", 0, 10, 5);
3318    test("abcdefghij", 5, 5, "abcdefghij", 0, 11, 5);
3319    test("abcdefghij", 5, 5, "abcdefghij", 1, 0, 5);
3320    test("abcdefghij", 5, 5, "abcdefghij", 1, 1, 4);
3321    test("abcdefghij", 5, 5, "abcdefghij", 1, 4, 4);
3322    test("abcdefghij", 5, 5, "abcdefghij", 1, 8, 4);
3323    test("abcdefghij", 5, 5, "abcdefghij", 1, 9, 4);
3324    test("abcdefghij", 5, 5, "abcdefghij", 1, 10, 4);
3325    test("abcdefghij", 5, 5, "abcdefghij", 5, 0, 5);
3326    test("abcdefghij", 5, 5, "abcdefghij", 5, 1, 4);
3327    test("abcdefghij", 5, 5, "abcdefghij", 5, 2, 3);
3328    test("abcdefghij", 5, 5, "abcdefghij", 5, 4, 1);
3329    test("abcdefghij", 5, 5, "abcdefghij", 5, 5, 0);
3330    test("abcdefghij", 5, 5, "abcdefghij", 5, 6, 0);
3331    test("abcdefghij", 5, 5, "abcdefghij", 9, 0, 5);
3332    test("abcdefghij", 5, 5, "abcdefghij", 9, 1, -4);
3333    test("abcdefghij", 5, 5, "abcdefghij", 9, 2, -4);
3334    test("abcdefghij", 5, 5, "abcdefghij", 10, 0, 5);
3335    test("abcdefghij", 5, 5, "abcdefghij", 10, 1, 5);
3336    test("abcdefghij", 5, 5, "abcdefghij", 11, 0, 0);
3337    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 0, 0, 5);
3338    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 0, 1, 5);
3339    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 0, 10, 5);
3340    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 0, 19, 5);
3341    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 0, 20, 5);
3342    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 0, 21, 5);
3343    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 1, 0, 5);
3344    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 1, 1, 4);
3345    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 1, 9, 4);
3346    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 1, 18, 4);
3347    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 1, 19, 4);
3348    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 1, 20, 4);
3349    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 10, 0, 5);
3350    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 10, 1, -5);
3351    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 10, 5, -5);
3352    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 10, 9, -5);
3353    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 10, 10, -5);
3354    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 10, 11, -5);
3355    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 19, 0, 5);
3356    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 19, 1, -14);
3357    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 19, 2, -14);
3358    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 20, 0, 5);
3359    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 20, 1, 5);
3360    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 21, 0, 0);
3361    test("abcdefghij", 5, 6, "", 0, 0, 5);
3362    test("abcdefghij", 5, 6, "", 0, 1, 5);
3363    test("abcdefghij", 5, 6, "", 1, 0, 0);
3364    test("abcdefghij", 5, 6, "abcde", 0, 0, 5);
3365    test("abcdefghij", 5, 6, "abcde", 0, 1, 5);
3366    test("abcdefghij", 5, 6, "abcde", 0, 2, 5);
3367    test("abcdefghij", 5, 6, "abcde", 0, 4, 5);
3368    test("abcdefghij", 5, 6, "abcde", 0, 5, 5);
3369    test("abcdefghij", 5, 6, "abcde", 0, 6, 5);
3370    test("abcdefghij", 5, 6, "abcde", 1, 0, 5);
3371    test("abcdefghij", 5, 6, "abcde", 1, 1, 4);
3372    test("abcdefghij", 5, 6, "abcde", 1, 2, 4);
3373    test("abcdefghij", 5, 6, "abcde", 1, 3, 4);
3374    test("abcdefghij", 5, 6, "abcde", 1, 4, 4);
3375    test("abcdefghij", 5, 6, "abcde", 1, 5, 4);
3376    test("abcdefghij", 5, 6, "abcde", 2, 0, 5);
3377    test("abcdefghij", 5, 6, "abcde", 2, 1, 3);
3378    test("abcdefghij", 5, 6, "abcde", 2, 2, 3);
3379}
3380
3381void test32()
3382{
3383    test("abcdefghij", 5, 6, "abcde", 2, 3, 3);
3384    test("abcdefghij", 5, 6, "abcde", 2, 4, 3);
3385    test("abcdefghij", 5, 6, "abcde", 4, 0, 5);
3386    test("abcdefghij", 5, 6, "abcde", 4, 1, 1);
3387    test("abcdefghij", 5, 6, "abcde", 4, 2, 1);
3388    test("abcdefghij", 5, 6, "abcde", 5, 0, 5);
3389    test("abcdefghij", 5, 6, "abcde", 5, 1, 5);
3390    test("abcdefghij", 5, 6, "abcde", 6, 0, 0);
3391    test("abcdefghij", 5, 6, "abcdefghij", 0, 0, 5);
3392    test("abcdefghij", 5, 6, "abcdefghij", 0, 1, 5);
3393    test("abcdefghij", 5, 6, "abcdefghij", 0, 5, 5);
3394    test("abcdefghij", 5, 6, "abcdefghij", 0, 9, 5);
3395    test("abcdefghij", 5, 6, "abcdefghij", 0, 10, 5);
3396    test("abcdefghij", 5, 6, "abcdefghij", 0, 11, 5);
3397    test("abcdefghij", 5, 6, "abcdefghij", 1, 0, 5);
3398    test("abcdefghij", 5, 6, "abcdefghij", 1, 1, 4);
3399    test("abcdefghij", 5, 6, "abcdefghij", 1, 4, 4);
3400    test("abcdefghij", 5, 6, "abcdefghij", 1, 8, 4);
3401    test("abcdefghij", 5, 6, "abcdefghij", 1, 9, 4);
3402    test("abcdefghij", 5, 6, "abcdefghij", 1, 10, 4);
3403    test("abcdefghij", 5, 6, "abcdefghij", 5, 0, 5);
3404    test("abcdefghij", 5, 6, "abcdefghij", 5, 1, 4);
3405    test("abcdefghij", 5, 6, "abcdefghij", 5, 2, 3);
3406    test("abcdefghij", 5, 6, "abcdefghij", 5, 4, 1);
3407    test("abcdefghij", 5, 6, "abcdefghij", 5, 5, 0);
3408    test("abcdefghij", 5, 6, "abcdefghij", 5, 6, 0);
3409    test("abcdefghij", 5, 6, "abcdefghij", 9, 0, 5);
3410    test("abcdefghij", 5, 6, "abcdefghij", 9, 1, -4);
3411    test("abcdefghij", 5, 6, "abcdefghij", 9, 2, -4);
3412    test("abcdefghij", 5, 6, "abcdefghij", 10, 0, 5);
3413    test("abcdefghij", 5, 6, "abcdefghij", 10, 1, 5);
3414    test("abcdefghij", 5, 6, "abcdefghij", 11, 0, 0);
3415    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 0, 0, 5);
3416    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 0, 1, 5);
3417    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 0, 10, 5);
3418    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 0, 19, 5);
3419    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 0, 20, 5);
3420    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 0, 21, 5);
3421    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 1, 0, 5);
3422    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 1, 1, 4);
3423    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 1, 9, 4);
3424    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 1, 18, 4);
3425    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 1, 19, 4);
3426    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 1, 20, 4);
3427    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 10, 0, 5);
3428    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 10, 1, -5);
3429    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 10, 5, -5);
3430    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 10, 9, -5);
3431    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 10, 10, -5);
3432    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 10, 11, -5);
3433    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 19, 0, 5);
3434    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 19, 1, -14);
3435    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 19, 2, -14);
3436    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 20, 0, 5);
3437    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 20, 1, 5);
3438    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 21, 0, 0);
3439    test("abcdefghij", 9, 0, "", 0, 0, 0);
3440    test("abcdefghij", 9, 0, "", 0, 1, 0);
3441    test("abcdefghij", 9, 0, "", 1, 0, 0);
3442    test("abcdefghij", 9, 0, "abcde", 0, 0, 0);
3443    test("abcdefghij", 9, 0, "abcde", 0, 1, -1);
3444    test("abcdefghij", 9, 0, "abcde", 0, 2, -2);
3445    test("abcdefghij", 9, 0, "abcde", 0, 4, -4);
3446    test("abcdefghij", 9, 0, "abcde", 0, 5, -5);
3447    test("abcdefghij", 9, 0, "abcde", 0, 6, -5);
3448    test("abcdefghij", 9, 0, "abcde", 1, 0, 0);
3449    test("abcdefghij", 9, 0, "abcde", 1, 1, -1);
3450    test("abcdefghij", 9, 0, "abcde", 1, 2, -2);
3451    test("abcdefghij", 9, 0, "abcde", 1, 3, -3);
3452    test("abcdefghij", 9, 0, "abcde", 1, 4, -4);
3453    test("abcdefghij", 9, 0, "abcde", 1, 5, -4);
3454    test("abcdefghij", 9, 0, "abcde", 2, 0, 0);
3455    test("abcdefghij", 9, 0, "abcde", 2, 1, -1);
3456    test("abcdefghij", 9, 0, "abcde", 2, 2, -2);
3457    test("abcdefghij", 9, 0, "abcde", 2, 3, -3);
3458    test("abcdefghij", 9, 0, "abcde", 2, 4, -3);
3459    test("abcdefghij", 9, 0, "abcde", 4, 0, 0);
3460    test("abcdefghij", 9, 0, "abcde", 4, 1, -1);
3461    test("abcdefghij", 9, 0, "abcde", 4, 2, -1);
3462    test("abcdefghij", 9, 0, "abcde", 5, 0, 0);
3463    test("abcdefghij", 9, 0, "abcde", 5, 1, 0);
3464    test("abcdefghij", 9, 0, "abcde", 6, 0, 0);
3465    test("abcdefghij", 9, 0, "abcdefghij", 0, 0, 0);
3466    test("abcdefghij", 9, 0, "abcdefghij", 0, 1, -1);
3467    test("abcdefghij", 9, 0, "abcdefghij", 0, 5, -5);
3468    test("abcdefghij", 9, 0, "abcdefghij", 0, 9, -9);
3469    test("abcdefghij", 9, 0, "abcdefghij", 0, 10, -10);
3470    test("abcdefghij", 9, 0, "abcdefghij", 0, 11, -10);
3471    test("abcdefghij", 9, 0, "abcdefghij", 1, 0, 0);
3472    test("abcdefghij", 9, 0, "abcdefghij", 1, 1, -1);
3473    test("abcdefghij", 9, 0, "abcdefghij", 1, 4, -4);
3474    test("abcdefghij", 9, 0, "abcdefghij", 1, 8, -8);
3475    test("abcdefghij", 9, 0, "abcdefghij", 1, 9, -9);
3476    test("abcdefghij", 9, 0, "abcdefghij", 1, 10, -9);
3477    test("abcdefghij", 9, 0, "abcdefghij", 5, 0, 0);
3478    test("abcdefghij", 9, 0, "abcdefghij", 5, 1, -1);
3479    test("abcdefghij", 9, 0, "abcdefghij", 5, 2, -2);
3480    test("abcdefghij", 9, 0, "abcdefghij", 5, 4, -4);
3481    test("abcdefghij", 9, 0, "abcdefghij", 5, 5, -5);
3482    test("abcdefghij", 9, 0, "abcdefghij", 5, 6, -5);
3483}
3484
3485void test33()
3486{
3487    test("abcdefghij", 9, 0, "abcdefghij", 9, 0, 0);
3488    test("abcdefghij", 9, 0, "abcdefghij", 9, 1, -1);
3489    test("abcdefghij", 9, 0, "abcdefghij", 9, 2, -1);
3490    test("abcdefghij", 9, 0, "abcdefghij", 10, 0, 0);
3491    test("abcdefghij", 9, 0, "abcdefghij", 10, 1, 0);
3492    test("abcdefghij", 9, 0, "abcdefghij", 11, 0, 0);
3493    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 0, 0, 0);
3494    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 0, 1, -1);
3495    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 0, 10, -10);
3496    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 0, 19, -19);
3497    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 0, 20, -20);
3498    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 0, 21, -20);
3499    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 1, 0, 0);
3500    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 1, 1, -1);
3501    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 1, 9, -9);
3502    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 1, 18, -18);
3503    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 1, 19, -19);
3504    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 1, 20, -19);
3505    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 10, 0, 0);
3506    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 10, 1, -1);
3507    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 10, 5, -5);
3508    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 10, 9, -9);
3509    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 10, 10, -10);
3510    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 10, 11, -10);
3511    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 19, 0, 0);
3512    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 19, 1, -1);
3513    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 19, 2, -1);
3514    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 20, 0, 0);
3515    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 20, 1, 0);
3516    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 21, 0, 0);
3517    test("abcdefghij", 9, 1, "", 0, 0, 1);
3518    test("abcdefghij", 9, 1, "", 0, 1, 1);
3519    test("abcdefghij", 9, 1, "", 1, 0, 0);
3520    test("abcdefghij", 9, 1, "abcde", 0, 0, 1);
3521    test("abcdefghij", 9, 1, "abcde", 0, 1, 9);
3522    test("abcdefghij", 9, 1, "abcde", 0, 2, 9);
3523    test("abcdefghij", 9, 1, "abcde", 0, 4, 9);
3524    test("abcdefghij", 9, 1, "abcde", 0, 5, 9);
3525    test("abcdefghij", 9, 1, "abcde", 0, 6, 9);
3526    test("abcdefghij", 9, 1, "abcde", 1, 0, 1);
3527    test("abcdefghij", 9, 1, "abcde", 1, 1, 8);
3528    test("abcdefghij", 9, 1, "abcde", 1, 2, 8);
3529    test("abcdefghij", 9, 1, "abcde", 1, 3, 8);
3530    test("abcdefghij", 9, 1, "abcde", 1, 4, 8);
3531    test("abcdefghij", 9, 1, "abcde", 1, 5, 8);
3532    test("abcdefghij", 9, 1, "abcde", 2, 0, 1);
3533    test("abcdefghij", 9, 1, "abcde", 2, 1, 7);
3534    test("abcdefghij", 9, 1, "abcde", 2, 2, 7);
3535    test("abcdefghij", 9, 1, "abcde", 2, 3, 7);
3536    test("abcdefghij", 9, 1, "abcde", 2, 4, 7);
3537    test("abcdefghij", 9, 1, "abcde", 4, 0, 1);
3538    test("abcdefghij", 9, 1, "abcde", 4, 1, 5);
3539    test("abcdefghij", 9, 1, "abcde", 4, 2, 5);
3540    test("abcdefghij", 9, 1, "abcde", 5, 0, 1);
3541    test("abcdefghij", 9, 1, "abcde", 5, 1, 1);
3542    test("abcdefghij", 9, 1, "abcde", 6, 0, 0);
3543    test("abcdefghij", 9, 1, "abcdefghij", 0, 0, 1);
3544    test("abcdefghij", 9, 1, "abcdefghij", 0, 1, 9);
3545    test("abcdefghij", 9, 1, "abcdefghij", 0, 5, 9);
3546    test("abcdefghij", 9, 1, "abcdefghij", 0, 9, 9);
3547    test("abcdefghij", 9, 1, "abcdefghij", 0, 10, 9);
3548    test("abcdefghij", 9, 1, "abcdefghij", 0, 11, 9);
3549    test("abcdefghij", 9, 1, "abcdefghij", 1, 0, 1);
3550    test("abcdefghij", 9, 1, "abcdefghij", 1, 1, 8);
3551    test("abcdefghij", 9, 1, "abcdefghij", 1, 4, 8);
3552    test("abcdefghij", 9, 1, "abcdefghij", 1, 8, 8);
3553    test("abcdefghij", 9, 1, "abcdefghij", 1, 9, 8);
3554    test("abcdefghij", 9, 1, "abcdefghij", 1, 10, 8);
3555    test("abcdefghij", 9, 1, "abcdefghij", 5, 0, 1);
3556    test("abcdefghij", 9, 1, "abcdefghij", 5, 1, 4);
3557    test("abcdefghij", 9, 1, "abcdefghij", 5, 2, 4);
3558    test("abcdefghij", 9, 1, "abcdefghij", 5, 4, 4);
3559    test("abcdefghij", 9, 1, "abcdefghij", 5, 5, 4);
3560    test("abcdefghij", 9, 1, "abcdefghij", 5, 6, 4);
3561    test("abcdefghij", 9, 1, "abcdefghij", 9, 0, 1);
3562    test("abcdefghij", 9, 1, "abcdefghij", 9, 1, 0);
3563    test("abcdefghij", 9, 1, "abcdefghij", 9, 2, 0);
3564    test("abcdefghij", 9, 1, "abcdefghij", 10, 0, 1);
3565    test("abcdefghij", 9, 1, "abcdefghij", 10, 1, 1);
3566    test("abcdefghij", 9, 1, "abcdefghij", 11, 0, 0);
3567    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 0, 0, 1);
3568    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 0, 1, 9);
3569    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 0, 10, 9);
3570    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 0, 19, 9);
3571    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 0, 20, 9);
3572    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 0, 21, 9);
3573    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 1, 0, 1);
3574    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 1, 1, 8);
3575    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 1, 9, 8);
3576    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 1, 18, 8);
3577    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 1, 19, 8);
3578    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 1, 20, 8);
3579    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 10, 0, 1);
3580    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 10, 1, -1);
3581    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 10, 5, -1);
3582    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 10, 9, -1);
3583    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 10, 10, -1);
3584    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 10, 11, -1);
3585    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 19, 0, 1);
3586    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 19, 1, -10);
3587}
3588
3589void test34()
3590{
3591    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 19, 2, -10);
3592    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 20, 0, 1);
3593    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 20, 1, 1);
3594    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 21, 0, 0);
3595    test("abcdefghij", 9, 2, "", 0, 0, 1);
3596    test("abcdefghij", 9, 2, "", 0, 1, 1);
3597    test("abcdefghij", 9, 2, "", 1, 0, 0);
3598    test("abcdefghij", 9, 2, "abcde", 0, 0, 1);
3599    test("abcdefghij", 9, 2, "abcde", 0, 1, 9);
3600    test("abcdefghij", 9, 2, "abcde", 0, 2, 9);
3601    test("abcdefghij", 9, 2, "abcde", 0, 4, 9);
3602    test("abcdefghij", 9, 2, "abcde", 0, 5, 9);
3603    test("abcdefghij", 9, 2, "abcde", 0, 6, 9);
3604    test("abcdefghij", 9, 2, "abcde", 1, 0, 1);
3605    test("abcdefghij", 9, 2, "abcde", 1, 1, 8);
3606    test("abcdefghij", 9, 2, "abcde", 1, 2, 8);
3607    test("abcdefghij", 9, 2, "abcde", 1, 3, 8);
3608    test("abcdefghij", 9, 2, "abcde", 1, 4, 8);
3609    test("abcdefghij", 9, 2, "abcde", 1, 5, 8);
3610    test("abcdefghij", 9, 2, "abcde", 2, 0, 1);
3611    test("abcdefghij", 9, 2, "abcde", 2, 1, 7);
3612    test("abcdefghij", 9, 2, "abcde", 2, 2, 7);
3613    test("abcdefghij", 9, 2, "abcde", 2, 3, 7);
3614    test("abcdefghij", 9, 2, "abcde", 2, 4, 7);
3615    test("abcdefghij", 9, 2, "abcde", 4, 0, 1);
3616    test("abcdefghij", 9, 2, "abcde", 4, 1, 5);
3617    test("abcdefghij", 9, 2, "abcde", 4, 2, 5);
3618    test("abcdefghij", 9, 2, "abcde", 5, 0, 1);
3619    test("abcdefghij", 9, 2, "abcde", 5, 1, 1);
3620    test("abcdefghij", 9, 2, "abcde", 6, 0, 0);
3621    test("abcdefghij", 9, 2, "abcdefghij", 0, 0, 1);
3622    test("abcdefghij", 9, 2, "abcdefghij", 0, 1, 9);
3623    test("abcdefghij", 9, 2, "abcdefghij", 0, 5, 9);
3624    test("abcdefghij", 9, 2, "abcdefghij", 0, 9, 9);
3625    test("abcdefghij", 9, 2, "abcdefghij", 0, 10, 9);
3626    test("abcdefghij", 9, 2, "abcdefghij", 0, 11, 9);
3627    test("abcdefghij", 9, 2, "abcdefghij", 1, 0, 1);
3628    test("abcdefghij", 9, 2, "abcdefghij", 1, 1, 8);
3629    test("abcdefghij", 9, 2, "abcdefghij", 1, 4, 8);
3630    test("abcdefghij", 9, 2, "abcdefghij", 1, 8, 8);
3631    test("abcdefghij", 9, 2, "abcdefghij", 1, 9, 8);
3632    test("abcdefghij", 9, 2, "abcdefghij", 1, 10, 8);
3633    test("abcdefghij", 9, 2, "abcdefghij", 5, 0, 1);
3634    test("abcdefghij", 9, 2, "abcdefghij", 5, 1, 4);
3635    test("abcdefghij", 9, 2, "abcdefghij", 5, 2, 4);
3636    test("abcdefghij", 9, 2, "abcdefghij", 5, 4, 4);
3637    test("abcdefghij", 9, 2, "abcdefghij", 5, 5, 4);
3638    test("abcdefghij", 9, 2, "abcdefghij", 5, 6, 4);
3639    test("abcdefghij", 9, 2, "abcdefghij", 9, 0, 1);
3640    test("abcdefghij", 9, 2, "abcdefghij", 9, 1, 0);
3641    test("abcdefghij", 9, 2, "abcdefghij", 9, 2, 0);
3642    test("abcdefghij", 9, 2, "abcdefghij", 10, 0, 1);
3643    test("abcdefghij", 9, 2, "abcdefghij", 10, 1, 1);
3644    test("abcdefghij", 9, 2, "abcdefghij", 11, 0, 0);
3645    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 0, 0, 1);
3646    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 0, 1, 9);
3647    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 0, 10, 9);
3648    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 0, 19, 9);
3649    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 0, 20, 9);
3650    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 0, 21, 9);
3651    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 1, 0, 1);
3652    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 1, 1, 8);
3653    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 1, 9, 8);
3654    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 1, 18, 8);
3655    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 1, 19, 8);
3656    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 1, 20, 8);
3657    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 10, 0, 1);
3658    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 10, 1, -1);
3659    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 10, 5, -1);
3660    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 10, 9, -1);
3661    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 10, 10, -1);
3662    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 10, 11, -1);
3663    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 19, 0, 1);
3664    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 19, 1, -10);
3665    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 19, 2, -10);
3666    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 20, 0, 1);
3667    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 20, 1, 1);
3668    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 21, 0, 0);
3669    test("abcdefghij", 10, 0, "", 0, 0, 0);
3670    test("abcdefghij", 10, 0, "", 0, 1, 0);
3671    test("abcdefghij", 10, 0, "", 1, 0, 0);
3672    test("abcdefghij", 10, 0, "abcde", 0, 0, 0);
3673    test("abcdefghij", 10, 0, "abcde", 0, 1, -1);
3674    test("abcdefghij", 10, 0, "abcde", 0, 2, -2);
3675    test("abcdefghij", 10, 0, "abcde", 0, 4, -4);
3676    test("abcdefghij", 10, 0, "abcde", 0, 5, -5);
3677    test("abcdefghij", 10, 0, "abcde", 0, 6, -5);
3678    test("abcdefghij", 10, 0, "abcde", 1, 0, 0);
3679    test("abcdefghij", 10, 0, "abcde", 1, 1, -1);
3680    test("abcdefghij", 10, 0, "abcde", 1, 2, -2);
3681    test("abcdefghij", 10, 0, "abcde", 1, 3, -3);
3682    test("abcdefghij", 10, 0, "abcde", 1, 4, -4);
3683    test("abcdefghij", 10, 0, "abcde", 1, 5, -4);
3684    test("abcdefghij", 10, 0, "abcde", 2, 0, 0);
3685    test("abcdefghij", 10, 0, "abcde", 2, 1, -1);
3686    test("abcdefghij", 10, 0, "abcde", 2, 2, -2);
3687    test("abcdefghij", 10, 0, "abcde", 2, 3, -3);
3688    test("abcdefghij", 10, 0, "abcde", 2, 4, -3);
3689    test("abcdefghij", 10, 0, "abcde", 4, 0, 0);
3690    test("abcdefghij", 10, 0, "abcde", 4, 1, -1);
3691}
3692
3693void test35()
3694{
3695    test("abcdefghij", 10, 0, "abcde", 4, 2, -1);
3696    test("abcdefghij", 10, 0, "abcde", 5, 0, 0);
3697    test("abcdefghij", 10, 0, "abcde", 5, 1, 0);
3698    test("abcdefghij", 10, 0, "abcde", 6, 0, 0);
3699    test("abcdefghij", 10, 0, "abcdefghij", 0, 0, 0);
3700    test("abcdefghij", 10, 0, "abcdefghij", 0, 1, -1);
3701    test("abcdefghij", 10, 0, "abcdefghij", 0, 5, -5);
3702    test("abcdefghij", 10, 0, "abcdefghij", 0, 9, -9);
3703    test("abcdefghij", 10, 0, "abcdefghij", 0, 10, -10);
3704    test("abcdefghij", 10, 0, "abcdefghij", 0, 11, -10);
3705    test("abcdefghij", 10, 0, "abcdefghij", 1, 0, 0);
3706    test("abcdefghij", 10, 0, "abcdefghij", 1, 1, -1);
3707    test("abcdefghij", 10, 0, "abcdefghij", 1, 4, -4);
3708    test("abcdefghij", 10, 0, "abcdefghij", 1, 8, -8);
3709    test("abcdefghij", 10, 0, "abcdefghij", 1, 9, -9);
3710    test("abcdefghij", 10, 0, "abcdefghij", 1, 10, -9);
3711    test("abcdefghij", 10, 0, "abcdefghij", 5, 0, 0);
3712    test("abcdefghij", 10, 0, "abcdefghij", 5, 1, -1);
3713    test("abcdefghij", 10, 0, "abcdefghij", 5, 2, -2);
3714    test("abcdefghij", 10, 0, "abcdefghij", 5, 4, -4);
3715    test("abcdefghij", 10, 0, "abcdefghij", 5, 5, -5);
3716    test("abcdefghij", 10, 0, "abcdefghij", 5, 6, -5);
3717    test("abcdefghij", 10, 0, "abcdefghij", 9, 0, 0);
3718    test("abcdefghij", 10, 0, "abcdefghij", 9, 1, -1);
3719    test("abcdefghij", 10, 0, "abcdefghij", 9, 2, -1);
3720    test("abcdefghij", 10, 0, "abcdefghij", 10, 0, 0);
3721    test("abcdefghij", 10, 0, "abcdefghij", 10, 1, 0);
3722    test("abcdefghij", 10, 0, "abcdefghij", 11, 0, 0);
3723    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 0, 0, 0);
3724    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 0, 1, -1);
3725    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 0, 10, -10);
3726    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 0, 19, -19);
3727    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 0, 20, -20);
3728    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 0, 21, -20);
3729    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 1, 0, 0);
3730    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 1, 1, -1);
3731    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 1, 9, -9);
3732    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 1, 18, -18);
3733    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 1, 19, -19);
3734    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 1, 20, -19);
3735    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 10, 0, 0);
3736    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 10, 1, -1);
3737    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 10, 5, -5);
3738    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 10, 9, -9);
3739    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 10, 10, -10);
3740    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 10, 11, -10);
3741    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 19, 0, 0);
3742    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 19, 1, -1);
3743    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 19, 2, -1);
3744    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 20, 0, 0);
3745    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 20, 1, 0);
3746    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 21, 0, 0);
3747    test("abcdefghij", 10, 1, "", 0, 0, 0);
3748    test("abcdefghij", 10, 1, "", 0, 1, 0);
3749    test("abcdefghij", 10, 1, "", 1, 0, 0);
3750    test("abcdefghij", 10, 1, "abcde", 0, 0, 0);
3751    test("abcdefghij", 10, 1, "abcde", 0, 1, -1);
3752    test("abcdefghij", 10, 1, "abcde", 0, 2, -2);
3753    test("abcdefghij", 10, 1, "abcde", 0, 4, -4);
3754    test("abcdefghij", 10, 1, "abcde", 0, 5, -5);
3755    test("abcdefghij", 10, 1, "abcde", 0, 6, -5);
3756    test("abcdefghij", 10, 1, "abcde", 1, 0, 0);
3757    test("abcdefghij", 10, 1, "abcde", 1, 1, -1);
3758    test("abcdefghij", 10, 1, "abcde", 1, 2, -2);
3759    test("abcdefghij", 10, 1, "abcde", 1, 3, -3);
3760    test("abcdefghij", 10, 1, "abcde", 1, 4, -4);
3761    test("abcdefghij", 10, 1, "abcde", 1, 5, -4);
3762    test("abcdefghij", 10, 1, "abcde", 2, 0, 0);
3763    test("abcdefghij", 10, 1, "abcde", 2, 1, -1);
3764    test("abcdefghij", 10, 1, "abcde", 2, 2, -2);
3765    test("abcdefghij", 10, 1, "abcde", 2, 3, -3);
3766    test("abcdefghij", 10, 1, "abcde", 2, 4, -3);
3767    test("abcdefghij", 10, 1, "abcde", 4, 0, 0);
3768    test("abcdefghij", 10, 1, "abcde", 4, 1, -1);
3769    test("abcdefghij", 10, 1, "abcde", 4, 2, -1);
3770    test("abcdefghij", 10, 1, "abcde", 5, 0, 0);
3771    test("abcdefghij", 10, 1, "abcde", 5, 1, 0);
3772    test("abcdefghij", 10, 1, "abcde", 6, 0, 0);
3773    test("abcdefghij", 10, 1, "abcdefghij", 0, 0, 0);
3774    test("abcdefghij", 10, 1, "abcdefghij", 0, 1, -1);
3775    test("abcdefghij", 10, 1, "abcdefghij", 0, 5, -5);
3776    test("abcdefghij", 10, 1, "abcdefghij", 0, 9, -9);
3777    test("abcdefghij", 10, 1, "abcdefghij", 0, 10, -10);
3778    test("abcdefghij", 10, 1, "abcdefghij", 0, 11, -10);
3779    test("abcdefghij", 10, 1, "abcdefghij", 1, 0, 0);
3780    test("abcdefghij", 10, 1, "abcdefghij", 1, 1, -1);
3781    test("abcdefghij", 10, 1, "abcdefghij", 1, 4, -4);
3782    test("abcdefghij", 10, 1, "abcdefghij", 1, 8, -8);
3783    test("abcdefghij", 10, 1, "abcdefghij", 1, 9, -9);
3784    test("abcdefghij", 10, 1, "abcdefghij", 1, 10, -9);
3785    test("abcdefghij", 10, 1, "abcdefghij", 5, 0, 0);
3786    test("abcdefghij", 10, 1, "abcdefghij", 5, 1, -1);
3787    test("abcdefghij", 10, 1, "abcdefghij", 5, 2, -2);
3788    test("abcdefghij", 10, 1, "abcdefghij", 5, 4, -4);
3789    test("abcdefghij", 10, 1, "abcdefghij", 5, 5, -5);
3790    test("abcdefghij", 10, 1, "abcdefghij", 5, 6, -5);
3791    test("abcdefghij", 10, 1, "abcdefghij", 9, 0, 0);
3792    test("abcdefghij", 10, 1, "abcdefghij", 9, 1, -1);
3793    test("abcdefghij", 10, 1, "abcdefghij", 9, 2, -1);
3794    test("abcdefghij", 10, 1, "abcdefghij", 10, 0, 0);
3795}
3796
3797void test36()
3798{
3799    test("abcdefghij", 10, 1, "abcdefghij", 10, 1, 0);
3800    test("abcdefghij", 10, 1, "abcdefghij", 11, 0, 0);
3801    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 0, 0, 0);
3802    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 0, 1, -1);
3803    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 0, 10, -10);
3804    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 0, 19, -19);
3805    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 0, 20, -20);
3806    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 0, 21, -20);
3807    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 1, 0, 0);
3808    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 1, 1, -1);
3809    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 1, 9, -9);
3810    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 1, 18, -18);
3811    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 1, 19, -19);
3812    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 1, 20, -19);
3813    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 10, 0, 0);
3814    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 10, 1, -1);
3815    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 10, 5, -5);
3816    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 10, 9, -9);
3817    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 10, 10, -10);
3818    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 10, 11, -10);
3819    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 19, 0, 0);
3820    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 19, 1, -1);
3821    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 19, 2, -1);
3822    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 20, 0, 0);
3823    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 20, 1, 0);
3824    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 21, 0, 0);
3825    test("abcdefghij", 11, 0, "", 0, 0, 0);
3826    test("abcdefghij", 11, 0, "", 0, 1, 0);
3827    test("abcdefghij", 11, 0, "", 1, 0, 0);
3828    test("abcdefghij", 11, 0, "abcde", 0, 0, 0);
3829    test("abcdefghij", 11, 0, "abcde", 0, 1, 0);
3830    test("abcdefghij", 11, 0, "abcde", 0, 2, 0);
3831    test("abcdefghij", 11, 0, "abcde", 0, 4, 0);
3832    test("abcdefghij", 11, 0, "abcde", 0, 5, 0);
3833    test("abcdefghij", 11, 0, "abcde", 0, 6, 0);
3834    test("abcdefghij", 11, 0, "abcde", 1, 0, 0);
3835    test("abcdefghij", 11, 0, "abcde", 1, 1, 0);
3836    test("abcdefghij", 11, 0, "abcde", 1, 2, 0);
3837    test("abcdefghij", 11, 0, "abcde", 1, 3, 0);
3838    test("abcdefghij", 11, 0, "abcde", 1, 4, 0);
3839    test("abcdefghij", 11, 0, "abcde", 1, 5, 0);
3840    test("abcdefghij", 11, 0, "abcde", 2, 0, 0);
3841    test("abcdefghij", 11, 0, "abcde", 2, 1, 0);
3842    test("abcdefghij", 11, 0, "abcde", 2, 2, 0);
3843    test("abcdefghij", 11, 0, "abcde", 2, 3, 0);
3844    test("abcdefghij", 11, 0, "abcde", 2, 4, 0);
3845    test("abcdefghij", 11, 0, "abcde", 4, 0, 0);
3846    test("abcdefghij", 11, 0, "abcde", 4, 1, 0);
3847    test("abcdefghij", 11, 0, "abcde", 4, 2, 0);
3848    test("abcdefghij", 11, 0, "abcde", 5, 0, 0);
3849    test("abcdefghij", 11, 0, "abcde", 5, 1, 0);
3850    test("abcdefghij", 11, 0, "abcde", 6, 0, 0);
3851    test("abcdefghij", 11, 0, "abcdefghij", 0, 0, 0);
3852    test("abcdefghij", 11, 0, "abcdefghij", 0, 1, 0);
3853    test("abcdefghij", 11, 0, "abcdefghij", 0, 5, 0);
3854    test("abcdefghij", 11, 0, "abcdefghij", 0, 9, 0);
3855    test("abcdefghij", 11, 0, "abcdefghij", 0, 10, 0);
3856    test("abcdefghij", 11, 0, "abcdefghij", 0, 11, 0);
3857    test("abcdefghij", 11, 0, "abcdefghij", 1, 0, 0);
3858    test("abcdefghij", 11, 0, "abcdefghij", 1, 1, 0);
3859    test("abcdefghij", 11, 0, "abcdefghij", 1, 4, 0);
3860    test("abcdefghij", 11, 0, "abcdefghij", 1, 8, 0);
3861    test("abcdefghij", 11, 0, "abcdefghij", 1, 9, 0);
3862    test("abcdefghij", 11, 0, "abcdefghij", 1, 10, 0);
3863    test("abcdefghij", 11, 0, "abcdefghij", 5, 0, 0);
3864    test("abcdefghij", 11, 0, "abcdefghij", 5, 1, 0);
3865    test("abcdefghij", 11, 0, "abcdefghij", 5, 2, 0);
3866    test("abcdefghij", 11, 0, "abcdefghij", 5, 4, 0);
3867    test("abcdefghij", 11, 0, "abcdefghij", 5, 5, 0);
3868    test("abcdefghij", 11, 0, "abcdefghij", 5, 6, 0);
3869    test("abcdefghij", 11, 0, "abcdefghij", 9, 0, 0);
3870    test("abcdefghij", 11, 0, "abcdefghij", 9, 1, 0);
3871    test("abcdefghij", 11, 0, "abcdefghij", 9, 2, 0);
3872    test("abcdefghij", 11, 0, "abcdefghij", 10, 0, 0);
3873    test("abcdefghij", 11, 0, "abcdefghij", 10, 1, 0);
3874    test("abcdefghij", 11, 0, "abcdefghij", 11, 0, 0);
3875    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0, 0, 0);
3876    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0, 1, 0);
3877    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0, 10, 0);
3878    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0, 19, 0);
3879    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0, 20, 0);
3880    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0, 21, 0);
3881    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 1, 0, 0);
3882    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 1, 1, 0);
3883    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 1, 9, 0);
3884    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 1, 18, 0);
3885    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 1, 19, 0);
3886    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 1, 20, 0);
3887    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 10, 0, 0);
3888    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 10, 1, 0);
3889    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 10, 5, 0);
3890    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 10, 9, 0);
3891    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 10, 10, 0);
3892    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 10, 11, 0);
3893    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 19, 0, 0);
3894    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 19, 1, 0);
3895    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 19, 2, 0);
3896    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 20, 0, 0);
3897    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 20, 1, 0);
3898    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 21, 0, 0);
3899}
3900
3901void test37()
3902{
3903    test("abcdefghijklmnopqrst", 0, 0, "", 0, 0, 0);
3904    test("abcdefghijklmnopqrst", 0, 0, "", 0, 1, 0);
3905    test("abcdefghijklmnopqrst", 0, 0, "", 1, 0, 0);
3906    test("abcdefghijklmnopqrst", 0, 0, "abcde", 0, 0, 0);
3907    test("abcdefghijklmnopqrst", 0, 0, "abcde", 0, 1, -1);
3908    test("abcdefghijklmnopqrst", 0, 0, "abcde", 0, 2, -2);
3909    test("abcdefghijklmnopqrst", 0, 0, "abcde", 0, 4, -4);
3910    test("abcdefghijklmnopqrst", 0, 0, "abcde", 0, 5, -5);
3911    test("abcdefghijklmnopqrst", 0, 0, "abcde", 0, 6, -5);
3912    test("abcdefghijklmnopqrst", 0, 0, "abcde", 1, 0, 0);
3913    test("abcdefghijklmnopqrst", 0, 0, "abcde", 1, 1, -1);
3914    test("abcdefghijklmnopqrst", 0, 0, "abcde", 1, 2, -2);
3915    test("abcdefghijklmnopqrst", 0, 0, "abcde", 1, 3, -3);
3916    test("abcdefghijklmnopqrst", 0, 0, "abcde", 1, 4, -4);
3917    test("abcdefghijklmnopqrst", 0, 0, "abcde", 1, 5, -4);
3918    test("abcdefghijklmnopqrst", 0, 0, "abcde", 2, 0, 0);
3919    test("abcdefghijklmnopqrst", 0, 0, "abcde", 2, 1, -1);
3920    test("abcdefghijklmnopqrst", 0, 0, "abcde", 2, 2, -2);
3921    test("abcdefghijklmnopqrst", 0, 0, "abcde", 2, 3, -3);
3922    test("abcdefghijklmnopqrst", 0, 0, "abcde", 2, 4, -3);
3923    test("abcdefghijklmnopqrst", 0, 0, "abcde", 4, 0, 0);
3924    test("abcdefghijklmnopqrst", 0, 0, "abcde", 4, 1, -1);
3925    test("abcdefghijklmnopqrst", 0, 0, "abcde", 4, 2, -1);
3926    test("abcdefghijklmnopqrst", 0, 0, "abcde", 5, 0, 0);
3927    test("abcdefghijklmnopqrst", 0, 0, "abcde", 5, 1, 0);
3928    test("abcdefghijklmnopqrst", 0, 0, "abcde", 6, 0, 0);
3929    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 0, 0, 0);
3930    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 0, 1, -1);
3931    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 0, 5, -5);
3932    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 0, 9, -9);
3933    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 0, 10, -10);
3934    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 0, 11, -10);
3935    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 1, 0, 0);
3936    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 1, 1, -1);
3937    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 1, 4, -4);
3938    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 1, 8, -8);
3939    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 1, 9, -9);
3940    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 1, 10, -9);
3941    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 5, 0, 0);
3942    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 5, 1, -1);
3943    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 5, 2, -2);
3944    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 5, 4, -4);
3945    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 5, 5, -5);
3946    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 5, 6, -5);
3947    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 9, 0, 0);
3948    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 9, 1, -1);
3949    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 9, 2, -1);
3950    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 10, 0, 0);
3951    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 10, 1, 0);
3952    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 11, 0, 0);
3953    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 0, 0, 0);
3954    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 0, 1, -1);
3955    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 0, 10, -10);
3956    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 0, 19, -19);
3957    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 0, 20, -20);
3958    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 0, 21, -20);
3959    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 1, 0, 0);
3960    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 1, 1, -1);
3961    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 1, 9, -9);
3962    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 1, 18, -18);
3963    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 1, 19, -19);
3964    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 1, 20, -19);
3965    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 10, 0, 0);
3966    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 10, 1, -1);
3967    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 10, 5, -5);
3968    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 10, 9, -9);
3969    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 10, 10, -10);
3970    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 10, 11, -10);
3971    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 19, 0, 0);
3972    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 19, 1, -1);
3973    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 19, 2, -1);
3974    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 20, 0, 0);
3975    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 20, 1, 0);
3976    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 21, 0, 0);
3977    test("abcdefghijklmnopqrst", 0, 1, "", 0, 0, 1);
3978    test("abcdefghijklmnopqrst", 0, 1, "", 0, 1, 1);
3979    test("abcdefghijklmnopqrst", 0, 1, "", 1, 0, 0);
3980    test("abcdefghijklmnopqrst", 0, 1, "abcde", 0, 0, 1);
3981    test("abcdefghijklmnopqrst", 0, 1, "abcde", 0, 1, 0);
3982    test("abcdefghijklmnopqrst", 0, 1, "abcde", 0, 2, -1);
3983    test("abcdefghijklmnopqrst", 0, 1, "abcde", 0, 4, -3);
3984    test("abcdefghijklmnopqrst", 0, 1, "abcde", 0, 5, -4);
3985    test("abcdefghijklmnopqrst", 0, 1, "abcde", 0, 6, -4);
3986    test("abcdefghijklmnopqrst", 0, 1, "abcde", 1, 0, 1);
3987    test("abcdefghijklmnopqrst", 0, 1, "abcde", 1, 1, -1);
3988    test("abcdefghijklmnopqrst", 0, 1, "abcde", 1, 2, -1);
3989    test("abcdefghijklmnopqrst", 0, 1, "abcde", 1, 3, -1);
3990    test("abcdefghijklmnopqrst", 0, 1, "abcde", 1, 4, -1);
3991    test("abcdefghijklmnopqrst", 0, 1, "abcde", 1, 5, -1);
3992    test("abcdefghijklmnopqrst", 0, 1, "abcde", 2, 0, 1);
3993    test("abcdefghijklmnopqrst", 0, 1, "abcde", 2, 1, -2);
3994    test("abcdefghijklmnopqrst", 0, 1, "abcde", 2, 2, -2);
3995    test("abcdefghijklmnopqrst", 0, 1, "abcde", 2, 3, -2);
3996    test("abcdefghijklmnopqrst", 0, 1, "abcde", 2, 4, -2);
3997    test("abcdefghijklmnopqrst", 0, 1, "abcde", 4, 0, 1);
3998    test("abcdefghijklmnopqrst", 0, 1, "abcde", 4, 1, -4);
3999    test("abcdefghijklmnopqrst", 0, 1, "abcde", 4, 2, -4);
4000    test("abcdefghijklmnopqrst", 0, 1, "abcde", 5, 0, 1);
4001    test("abcdefghijklmnopqrst", 0, 1, "abcde", 5, 1, 1);
4002    test("abcdefghijklmnopqrst", 0, 1, "abcde", 6, 0, 0);
4003}
4004
4005void test38()
4006{
4007    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 0, 0, 1);
4008    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 0, 1, 0);
4009    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 0, 5, -4);
4010    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 0, 9, -8);
4011    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 0, 10, -9);
4012    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 0, 11, -9);
4013    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 1, 0, 1);
4014    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 1, 1, -1);
4015    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 1, 4, -1);
4016    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 1, 8, -1);
4017    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 1, 9, -1);
4018    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 1, 10, -1);
4019    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 5, 0, 1);
4020    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 5, 1, -5);
4021    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 5, 2, -5);
4022    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 5, 4, -5);
4023    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 5, 5, -5);
4024    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 5, 6, -5);
4025    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 9, 0, 1);
4026    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 9, 1, -9);
4027    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 9, 2, -9);
4028    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 10, 0, 1);
4029    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 10, 1, 1);
4030    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 11, 0, 0);
4031    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 0, 0, 1);
4032    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 0, 1, 0);
4033    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 0, 10, -9);
4034    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 0, 19, -18);
4035    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 0, 20, -19);
4036    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 0, 21, -19);
4037    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 1, 0, 1);
4038    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 1, 1, -1);
4039    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 1, 9, -1);
4040    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 1, 18, -1);
4041    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 1, 19, -1);
4042    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 1, 20, -1);
4043    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 10, 0, 1);
4044    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 10, 1, -10);
4045    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 10, 5, -10);
4046    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 10, 9, -10);
4047    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 10, 10, -10);
4048    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 10, 11, -10);
4049    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 19, 0, 1);
4050    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 19, 1, -19);
4051    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 19, 2, -19);
4052    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 20, 0, 1);
4053    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 20, 1, 1);
4054    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 21, 0, 0);
4055    test("abcdefghijklmnopqrst", 0, 10, "", 0, 0, 10);
4056    test("abcdefghijklmnopqrst", 0, 10, "", 0, 1, 10);
4057    test("abcdefghijklmnopqrst", 0, 10, "", 1, 0, 0);
4058    test("abcdefghijklmnopqrst", 0, 10, "abcde", 0, 0, 10);
4059    test("abcdefghijklmnopqrst", 0, 10, "abcde", 0, 1, 9);
4060    test("abcdefghijklmnopqrst", 0, 10, "abcde", 0, 2, 8);
4061    test("abcdefghijklmnopqrst", 0, 10, "abcde", 0, 4, 6);
4062    test("abcdefghijklmnopqrst", 0, 10, "abcde", 0, 5, 5);
4063    test("abcdefghijklmnopqrst", 0, 10, "abcde", 0, 6, 5);
4064    test("abcdefghijklmnopqrst", 0, 10, "abcde", 1, 0, 10);
4065    test("abcdefghijklmnopqrst", 0, 10, "abcde", 1, 1, -1);
4066    test("abcdefghijklmnopqrst", 0, 10, "abcde", 1, 2, -1);
4067    test("abcdefghijklmnopqrst", 0, 10, "abcde", 1, 3, -1);
4068    test("abcdefghijklmnopqrst", 0, 10, "abcde", 1, 4, -1);
4069    test("abcdefghijklmnopqrst", 0, 10, "abcde", 1, 5, -1);
4070    test("abcdefghijklmnopqrst", 0, 10, "abcde", 2, 0, 10);
4071    test("abcdefghijklmnopqrst", 0, 10, "abcde", 2, 1, -2);
4072    test("abcdefghijklmnopqrst", 0, 10, "abcde", 2, 2, -2);
4073    test("abcdefghijklmnopqrst", 0, 10, "abcde", 2, 3, -2);
4074    test("abcdefghijklmnopqrst", 0, 10, "abcde", 2, 4, -2);
4075    test("abcdefghijklmnopqrst", 0, 10, "abcde", 4, 0, 10);
4076    test("abcdefghijklmnopqrst", 0, 10, "abcde", 4, 1, -4);
4077    test("abcdefghijklmnopqrst", 0, 10, "abcde", 4, 2, -4);
4078    test("abcdefghijklmnopqrst", 0, 10, "abcde", 5, 0, 10);
4079    test("abcdefghijklmnopqrst", 0, 10, "abcde", 5, 1, 10);
4080    test("abcdefghijklmnopqrst", 0, 10, "abcde", 6, 0, 0);
4081    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 0, 0, 10);
4082    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 0, 1, 9);
4083    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 0, 5, 5);
4084    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 0, 9, 1);
4085    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 0, 10, 0);
4086    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 0, 11, 0);
4087    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 1, 0, 10);
4088    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 1, 1, -1);
4089    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 1, 4, -1);
4090    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 1, 8, -1);
4091    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 1, 9, -1);
4092    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 1, 10, -1);
4093    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 5, 0, 10);
4094    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 5, 1, -5);
4095    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 5, 2, -5);
4096    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 5, 4, -5);
4097    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 5, 5, -5);
4098    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 5, 6, -5);
4099    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 9, 0, 10);
4100    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 9, 1, -9);
4101    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 9, 2, -9);
4102    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 10, 0, 10);
4103    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 10, 1, 10);
4104    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 11, 0, 0);
4105    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 0, 0, 10);
4106    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 0, 1, 9);
4107}
4108
4109void test39()
4110{
4111    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 0, 10, 0);
4112    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 0, 19, -9);
4113    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 0, 20, -10);
4114    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 0, 21, -10);
4115    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 1, 0, 10);
4116    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 1, 1, -1);
4117    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 1, 9, -1);
4118    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 1, 18, -1);
4119    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 1, 19, -1);
4120    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 1, 20, -1);
4121    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 10, 0, 10);
4122    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 10, 1, -10);
4123    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 10, 5, -10);
4124    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 10, 9, -10);
4125    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 10, 10, -10);
4126    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 10, 11, -10);
4127    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 19, 0, 10);
4128    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 19, 1, -19);
4129    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 19, 2, -19);
4130    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 20, 0, 10);
4131    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 20, 1, 10);
4132    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 21, 0, 0);
4133    test("abcdefghijklmnopqrst", 0, 19, "", 0, 0, 19);
4134    test("abcdefghijklmnopqrst", 0, 19, "", 0, 1, 19);
4135    test("abcdefghijklmnopqrst", 0, 19, "", 1, 0, 0);
4136    test("abcdefghijklmnopqrst", 0, 19, "abcde", 0, 0, 19);
4137    test("abcdefghijklmnopqrst", 0, 19, "abcde", 0, 1, 18);
4138    test("abcdefghijklmnopqrst", 0, 19, "abcde", 0, 2, 17);
4139    test("abcdefghijklmnopqrst", 0, 19, "abcde", 0, 4, 15);
4140    test("abcdefghijklmnopqrst", 0, 19, "abcde", 0, 5, 14);
4141    test("abcdefghijklmnopqrst", 0, 19, "abcde", 0, 6, 14);
4142    test("abcdefghijklmnopqrst", 0, 19, "abcde", 1, 0, 19);
4143    test("abcdefghijklmnopqrst", 0, 19, "abcde", 1, 1, -1);
4144    test("abcdefghijklmnopqrst", 0, 19, "abcde", 1, 2, -1);
4145    test("abcdefghijklmnopqrst", 0, 19, "abcde", 1, 3, -1);
4146    test("abcdefghijklmnopqrst", 0, 19, "abcde", 1, 4, -1);
4147    test("abcdefghijklmnopqrst", 0, 19, "abcde", 1, 5, -1);
4148    test("abcdefghijklmnopqrst", 0, 19, "abcde", 2, 0, 19);
4149    test("abcdefghijklmnopqrst", 0, 19, "abcde", 2, 1, -2);
4150    test("abcdefghijklmnopqrst", 0, 19, "abcde", 2, 2, -2);
4151    test("abcdefghijklmnopqrst", 0, 19, "abcde", 2, 3, -2);
4152    test("abcdefghijklmnopqrst", 0, 19, "abcde", 2, 4, -2);
4153    test("abcdefghijklmnopqrst", 0, 19, "abcde", 4, 0, 19);
4154    test("abcdefghijklmnopqrst", 0, 19, "abcde", 4, 1, -4);
4155    test("abcdefghijklmnopqrst", 0, 19, "abcde", 4, 2, -4);
4156    test("abcdefghijklmnopqrst", 0, 19, "abcde", 5, 0, 19);
4157    test("abcdefghijklmnopqrst", 0, 19, "abcde", 5, 1, 19);
4158    test("abcdefghijklmnopqrst", 0, 19, "abcde", 6, 0, 0);
4159    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 0, 0, 19);
4160    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 0, 1, 18);
4161    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 0, 5, 14);
4162    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 0, 9, 10);
4163    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 0, 10, 9);
4164    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 0, 11, 9);
4165    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 1, 0, 19);
4166    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 1, 1, -1);
4167    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 1, 4, -1);
4168    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 1, 8, -1);
4169    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 1, 9, -1);
4170    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 1, 10, -1);
4171    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 5, 0, 19);
4172    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 5, 1, -5);
4173    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 5, 2, -5);
4174    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 5, 4, -5);
4175    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 5, 5, -5);
4176    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 5, 6, -5);
4177    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 9, 0, 19);
4178    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 9, 1, -9);
4179    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 9, 2, -9);
4180    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 10, 0, 19);
4181    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 10, 1, 19);
4182    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 11, 0, 0);
4183    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 0, 0, 19);
4184    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 0, 1, 18);
4185    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 0, 10, 9);
4186    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 0, 19, 0);
4187    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 0, 20, -1);
4188    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 0, 21, -1);
4189    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 1, 0, 19);
4190    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 1, 1, -1);
4191    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 1, 9, -1);
4192    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 1, 18, -1);
4193    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 1, 19, -1);
4194    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 1, 20, -1);
4195    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 10, 0, 19);
4196    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 10, 1, -10);
4197    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 10, 5, -10);
4198    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 10, 9, -10);
4199    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 10, 10, -10);
4200    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 10, 11, -10);
4201    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 19, 0, 19);
4202    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 19, 1, -19);
4203    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 19, 2, -19);
4204    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 20, 0, 19);
4205    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 20, 1, 19);
4206    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 21, 0, 0);
4207    test("abcdefghijklmnopqrst", 0, 20, "", 0, 0, 20);
4208    test("abcdefghijklmnopqrst", 0, 20, "", 0, 1, 20);
4209    test("abcdefghijklmnopqrst", 0, 20, "", 1, 0, 0);
4210    test("abcdefghijklmnopqrst", 0, 20, "abcde", 0, 0, 20);
4211}
4212
4213void test40()
4214{
4215    test("abcdefghijklmnopqrst", 0, 20, "abcde", 0, 1, 19);
4216    test("abcdefghijklmnopqrst", 0, 20, "abcde", 0, 2, 18);
4217    test("abcdefghijklmnopqrst", 0, 20, "abcde", 0, 4, 16);
4218    test("abcdefghijklmnopqrst", 0, 20, "abcde", 0, 5, 15);
4219    test("abcdefghijklmnopqrst", 0, 20, "abcde", 0, 6, 15);
4220    test("abcdefghijklmnopqrst", 0, 20, "abcde", 1, 0, 20);
4221    test("abcdefghijklmnopqrst", 0, 20, "abcde", 1, 1, -1);
4222    test("abcdefghijklmnopqrst", 0, 20, "abcde", 1, 2, -1);
4223    test("abcdefghijklmnopqrst", 0, 20, "abcde", 1, 3, -1);
4224    test("abcdefghijklmnopqrst", 0, 20, "abcde", 1, 4, -1);
4225    test("abcdefghijklmnopqrst", 0, 20, "abcde", 1, 5, -1);
4226    test("abcdefghijklmnopqrst", 0, 20, "abcde", 2, 0, 20);
4227    test("abcdefghijklmnopqrst", 0, 20, "abcde", 2, 1, -2);
4228    test("abcdefghijklmnopqrst", 0, 20, "abcde", 2, 2, -2);
4229    test("abcdefghijklmnopqrst", 0, 20, "abcde", 2, 3, -2);
4230    test("abcdefghijklmnopqrst", 0, 20, "abcde", 2, 4, -2);
4231    test("abcdefghijklmnopqrst", 0, 20, "abcde", 4, 0, 20);
4232    test("abcdefghijklmnopqrst", 0, 20, "abcde", 4, 1, -4);
4233    test("abcdefghijklmnopqrst", 0, 20, "abcde", 4, 2, -4);
4234    test("abcdefghijklmnopqrst", 0, 20, "abcde", 5, 0, 20);
4235    test("abcdefghijklmnopqrst", 0, 20, "abcde", 5, 1, 20);
4236    test("abcdefghijklmnopqrst", 0, 20, "abcde", 6, 0, 0);
4237    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 0, 0, 20);
4238    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 0, 1, 19);
4239    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 0, 5, 15);
4240    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 0, 9, 11);
4241    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 0, 10, 10);
4242    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 0, 11, 10);
4243    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 1, 0, 20);
4244    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 1, 1, -1);
4245    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 1, 4, -1);
4246    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 1, 8, -1);
4247    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 1, 9, -1);
4248    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 1, 10, -1);
4249    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 5, 0, 20);
4250    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 5, 1, -5);
4251    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 5, 2, -5);
4252    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 5, 4, -5);
4253    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 5, 5, -5);
4254    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 5, 6, -5);
4255    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 9, 0, 20);
4256    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 9, 1, -9);
4257    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 9, 2, -9);
4258    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 10, 0, 20);
4259    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 10, 1, 20);
4260    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 11, 0, 0);
4261    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 0, 0, 20);
4262    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 0, 1, 19);
4263    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 0, 10, 10);
4264    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 0, 19, 1);
4265    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 0, 20, 0);
4266    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 0, 21, 0);
4267    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 1, 0, 20);
4268    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 1, 1, -1);
4269    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 1, 9, -1);
4270    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 1, 18, -1);
4271    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 1, 19, -1);
4272    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 1, 20, -1);
4273    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 10, 0, 20);
4274    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 10, 1, -10);
4275    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 10, 5, -10);
4276    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 10, 9, -10);
4277    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 10, 10, -10);
4278    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 10, 11, -10);
4279    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 19, 0, 20);
4280    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 19, 1, -19);
4281    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 19, 2, -19);
4282    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 20, 0, 20);
4283    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 20, 1, 20);
4284    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 21, 0, 0);
4285    test("abcdefghijklmnopqrst", 0, 21, "", 0, 0, 20);
4286    test("abcdefghijklmnopqrst", 0, 21, "", 0, 1, 20);
4287    test("abcdefghijklmnopqrst", 0, 21, "", 1, 0, 0);
4288    test("abcdefghijklmnopqrst", 0, 21, "abcde", 0, 0, 20);
4289    test("abcdefghijklmnopqrst", 0, 21, "abcde", 0, 1, 19);
4290    test("abcdefghijklmnopqrst", 0, 21, "abcde", 0, 2, 18);
4291    test("abcdefghijklmnopqrst", 0, 21, "abcde", 0, 4, 16);
4292    test("abcdefghijklmnopqrst", 0, 21, "abcde", 0, 5, 15);
4293    test("abcdefghijklmnopqrst", 0, 21, "abcde", 0, 6, 15);
4294    test("abcdefghijklmnopqrst", 0, 21, "abcde", 1, 0, 20);
4295    test("abcdefghijklmnopqrst", 0, 21, "abcde", 1, 1, -1);
4296    test("abcdefghijklmnopqrst", 0, 21, "abcde", 1, 2, -1);
4297    test("abcdefghijklmnopqrst", 0, 21, "abcde", 1, 3, -1);
4298    test("abcdefghijklmnopqrst", 0, 21, "abcde", 1, 4, -1);
4299    test("abcdefghijklmnopqrst", 0, 21, "abcde", 1, 5, -1);
4300    test("abcdefghijklmnopqrst", 0, 21, "abcde", 2, 0, 20);
4301    test("abcdefghijklmnopqrst", 0, 21, "abcde", 2, 1, -2);
4302    test("abcdefghijklmnopqrst", 0, 21, "abcde", 2, 2, -2);
4303    test("abcdefghijklmnopqrst", 0, 21, "abcde", 2, 3, -2);
4304    test("abcdefghijklmnopqrst", 0, 21, "abcde", 2, 4, -2);
4305    test("abcdefghijklmnopqrst", 0, 21, "abcde", 4, 0, 20);
4306    test("abcdefghijklmnopqrst", 0, 21, "abcde", 4, 1, -4);
4307    test("abcdefghijklmnopqrst", 0, 21, "abcde", 4, 2, -4);
4308    test("abcdefghijklmnopqrst", 0, 21, "abcde", 5, 0, 20);
4309    test("abcdefghijklmnopqrst", 0, 21, "abcde", 5, 1, 20);
4310    test("abcdefghijklmnopqrst", 0, 21, "abcde", 6, 0, 0);
4311    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 0, 0, 20);
4312    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 0, 1, 19);
4313    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 0, 5, 15);
4314    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 0, 9, 11);
4315}
4316
4317void test41()
4318{
4319    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 0, 10, 10);
4320    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 0, 11, 10);
4321    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 1, 0, 20);
4322    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 1, 1, -1);
4323    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 1, 4, -1);
4324    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 1, 8, -1);
4325    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 1, 9, -1);
4326    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 1, 10, -1);
4327    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 5, 0, 20);
4328    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 5, 1, -5);
4329    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 5, 2, -5);
4330    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 5, 4, -5);
4331    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 5, 5, -5);
4332    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 5, 6, -5);
4333    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 9, 0, 20);
4334    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 9, 1, -9);
4335    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 9, 2, -9);
4336    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 10, 0, 20);
4337    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 10, 1, 20);
4338    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 11, 0, 0);
4339    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 0, 0, 20);
4340    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 0, 1, 19);
4341    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 0, 10, 10);
4342    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 0, 19, 1);
4343    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 0, 20, 0);
4344    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 0, 21, 0);
4345    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 1, 0, 20);
4346    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 1, 1, -1);
4347    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 1, 9, -1);
4348    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 1, 18, -1);
4349    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 1, 19, -1);
4350    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 1, 20, -1);
4351    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 10, 0, 20);
4352    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 10, 1, -10);
4353    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 10, 5, -10);
4354    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 10, 9, -10);
4355    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 10, 10, -10);
4356    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 10, 11, -10);
4357    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 19, 0, 20);
4358    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 19, 1, -19);
4359    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 19, 2, -19);
4360    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 20, 0, 20);
4361    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 20, 1, 20);
4362    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 21, 0, 0);
4363    test("abcdefghijklmnopqrst", 1, 0, "", 0, 0, 0);
4364    test("abcdefghijklmnopqrst", 1, 0, "", 0, 1, 0);
4365    test("abcdefghijklmnopqrst", 1, 0, "", 1, 0, 0);
4366    test("abcdefghijklmnopqrst", 1, 0, "abcde", 0, 0, 0);
4367    test("abcdefghijklmnopqrst", 1, 0, "abcde", 0, 1, -1);
4368    test("abcdefghijklmnopqrst", 1, 0, "abcde", 0, 2, -2);
4369    test("abcdefghijklmnopqrst", 1, 0, "abcde", 0, 4, -4);
4370    test("abcdefghijklmnopqrst", 1, 0, "abcde", 0, 5, -5);
4371    test("abcdefghijklmnopqrst", 1, 0, "abcde", 0, 6, -5);
4372    test("abcdefghijklmnopqrst", 1, 0, "abcde", 1, 0, 0);
4373    test("abcdefghijklmnopqrst", 1, 0, "abcde", 1, 1, -1);
4374    test("abcdefghijklmnopqrst", 1, 0, "abcde", 1, 2, -2);
4375    test("abcdefghijklmnopqrst", 1, 0, "abcde", 1, 3, -3);
4376    test("abcdefghijklmnopqrst", 1, 0, "abcde", 1, 4, -4);
4377    test("abcdefghijklmnopqrst", 1, 0, "abcde", 1, 5, -4);
4378    test("abcdefghijklmnopqrst", 1, 0, "abcde", 2, 0, 0);
4379    test("abcdefghijklmnopqrst", 1, 0, "abcde", 2, 1, -1);
4380    test("abcdefghijklmnopqrst", 1, 0, "abcde", 2, 2, -2);
4381    test("abcdefghijklmnopqrst", 1, 0, "abcde", 2, 3, -3);
4382    test("abcdefghijklmnopqrst", 1, 0, "abcde", 2, 4, -3);
4383    test("abcdefghijklmnopqrst", 1, 0, "abcde", 4, 0, 0);
4384    test("abcdefghijklmnopqrst", 1, 0, "abcde", 4, 1, -1);
4385    test("abcdefghijklmnopqrst", 1, 0, "abcde", 4, 2, -1);
4386    test("abcdefghijklmnopqrst", 1, 0, "abcde", 5, 0, 0);
4387    test("abcdefghijklmnopqrst", 1, 0, "abcde", 5, 1, 0);
4388    test("abcdefghijklmnopqrst", 1, 0, "abcde", 6, 0, 0);
4389    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 0, 0, 0);
4390    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 0, 1, -1);
4391    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 0, 5, -5);
4392    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 0, 9, -9);
4393    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 0, 10, -10);
4394    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 0, 11, -10);
4395    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 1, 0, 0);
4396    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 1, 1, -1);
4397    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 1, 4, -4);
4398    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 1, 8, -8);
4399    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 1, 9, -9);
4400    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 1, 10, -9);
4401    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 5, 0, 0);
4402    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 5, 1, -1);
4403    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 5, 2, -2);
4404    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 5, 4, -4);
4405    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 5, 5, -5);
4406    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 5, 6, -5);
4407    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 9, 0, 0);
4408    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 9, 1, -1);
4409    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 9, 2, -1);
4410    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 10, 0, 0);
4411    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 10, 1, 0);
4412    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 11, 0, 0);
4413    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 0, 0, 0);
4414    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 0, 1, -1);
4415    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 0, 10, -10);
4416    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 0, 19, -19);
4417    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 0, 20, -20);
4418    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 0, 21, -20);
4419}
4420
4421void test42()
4422{
4423    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 1, 0, 0);
4424    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 1, 1, -1);
4425    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 1, 9, -9);
4426    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 1, 18, -18);
4427    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 1, 19, -19);
4428    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 1, 20, -19);
4429    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 10, 0, 0);
4430    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 10, 1, -1);
4431    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 10, 5, -5);
4432    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 10, 9, -9);
4433    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 10, 10, -10);
4434    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 10, 11, -10);
4435    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 19, 0, 0);
4436    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 19, 1, -1);
4437    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 19, 2, -1);
4438    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 20, 0, 0);
4439    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 20, 1, 0);
4440    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 21, 0, 0);
4441    test("abcdefghijklmnopqrst", 1, 1, "", 0, 0, 1);
4442    test("abcdefghijklmnopqrst", 1, 1, "", 0, 1, 1);
4443    test("abcdefghijklmnopqrst", 1, 1, "", 1, 0, 0);
4444    test("abcdefghijklmnopqrst", 1, 1, "abcde", 0, 0, 1);
4445    test("abcdefghijklmnopqrst", 1, 1, "abcde", 0, 1, 1);
4446    test("abcdefghijklmnopqrst", 1, 1, "abcde", 0, 2, 1);
4447    test("abcdefghijklmnopqrst", 1, 1, "abcde", 0, 4, 1);
4448    test("abcdefghijklmnopqrst", 1, 1, "abcde", 0, 5, 1);
4449    test("abcdefghijklmnopqrst", 1, 1, "abcde", 0, 6, 1);
4450    test("abcdefghijklmnopqrst", 1, 1, "abcde", 1, 0, 1);
4451    test("abcdefghijklmnopqrst", 1, 1, "abcde", 1, 1, 0);
4452    test("abcdefghijklmnopqrst", 1, 1, "abcde", 1, 2, -1);
4453    test("abcdefghijklmnopqrst", 1, 1, "abcde", 1, 3, -2);
4454    test("abcdefghijklmnopqrst", 1, 1, "abcde", 1, 4, -3);
4455    test("abcdefghijklmnopqrst", 1, 1, "abcde", 1, 5, -3);
4456    test("abcdefghijklmnopqrst", 1, 1, "abcde", 2, 0, 1);
4457    test("abcdefghijklmnopqrst", 1, 1, "abcde", 2, 1, -1);
4458    test("abcdefghijklmnopqrst", 1, 1, "abcde", 2, 2, -1);
4459    test("abcdefghijklmnopqrst", 1, 1, "abcde", 2, 3, -1);
4460    test("abcdefghijklmnopqrst", 1, 1, "abcde", 2, 4, -1);
4461    test("abcdefghijklmnopqrst", 1, 1, "abcde", 4, 0, 1);
4462    test("abcdefghijklmnopqrst", 1, 1, "abcde", 4, 1, -3);
4463    test("abcdefghijklmnopqrst", 1, 1, "abcde", 4, 2, -3);
4464    test("abcdefghijklmnopqrst", 1, 1, "abcde", 5, 0, 1);
4465    test("abcdefghijklmnopqrst", 1, 1, "abcde", 5, 1, 1);
4466    test("abcdefghijklmnopqrst", 1, 1, "abcde", 6, 0, 0);
4467    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 0, 0, 1);
4468    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 0, 1, 1);
4469    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 0, 5, 1);
4470    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 0, 9, 1);
4471    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 0, 10, 1);
4472    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 0, 11, 1);
4473    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 1, 0, 1);
4474    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 1, 1, 0);
4475    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 1, 4, -3);
4476    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 1, 8, -7);
4477    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 1, 9, -8);
4478    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 1, 10, -8);
4479    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 5, 0, 1);
4480    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 5, 1, -4);
4481    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 5, 2, -4);
4482    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 5, 4, -4);
4483    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 5, 5, -4);
4484    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 5, 6, -4);
4485    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 9, 0, 1);
4486    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 9, 1, -8);
4487    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 9, 2, -8);
4488    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 10, 0, 1);
4489    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 10, 1, 1);
4490    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 11, 0, 0);
4491    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 0, 0, 1);
4492    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 0, 1, 1);
4493    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 0, 10, 1);
4494    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 0, 19, 1);
4495    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 0, 20, 1);
4496    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 0, 21, 1);
4497    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 1, 0, 1);
4498    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 1, 1, 0);
4499    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 1, 9, -8);
4500    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 1, 18, -17);
4501    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 1, 19, -18);
4502    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 1, 20, -18);
4503    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 10, 0, 1);
4504    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 10, 1, -9);
4505    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 10, 5, -9);
4506    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 10, 9, -9);
4507    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 10, 10, -9);
4508    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 10, 11, -9);
4509    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 19, 0, 1);
4510    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 19, 1, -18);
4511    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 19, 2, -18);
4512    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 20, 0, 1);
4513    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 20, 1, 1);
4514    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 21, 0, 0);
4515    test("abcdefghijklmnopqrst", 1, 9, "", 0, 0, 9);
4516    test("abcdefghijklmnopqrst", 1, 9, "", 0, 1, 9);
4517    test("abcdefghijklmnopqrst", 1, 9, "", 1, 0, 0);
4518    test("abcdefghijklmnopqrst", 1, 9, "abcde", 0, 0, 9);
4519    test("abcdefghijklmnopqrst", 1, 9, "abcde", 0, 1, 1);
4520    test("abcdefghijklmnopqrst", 1, 9, "abcde", 0, 2, 1);
4521    test("abcdefghijklmnopqrst", 1, 9, "abcde", 0, 4, 1);
4522    test("abcdefghijklmnopqrst", 1, 9, "abcde", 0, 5, 1);
4523}
4524
4525void test43()
4526{
4527    test("abcdefghijklmnopqrst", 1, 9, "abcde", 0, 6, 1);
4528    test("abcdefghijklmnopqrst", 1, 9, "abcde", 1, 0, 9);
4529    test("abcdefghijklmnopqrst", 1, 9, "abcde", 1, 1, 8);
4530    test("abcdefghijklmnopqrst", 1, 9, "abcde", 1, 2, 7);
4531    test("abcdefghijklmnopqrst", 1, 9, "abcde", 1, 3, 6);
4532    test("abcdefghijklmnopqrst", 1, 9, "abcde", 1, 4, 5);
4533    test("abcdefghijklmnopqrst", 1, 9, "abcde", 1, 5, 5);
4534    test("abcdefghijklmnopqrst", 1, 9, "abcde", 2, 0, 9);
4535    test("abcdefghijklmnopqrst", 1, 9, "abcde", 2, 1, -1);
4536    test("abcdefghijklmnopqrst", 1, 9, "abcde", 2, 2, -1);
4537    test("abcdefghijklmnopqrst", 1, 9, "abcde", 2, 3, -1);
4538    test("abcdefghijklmnopqrst", 1, 9, "abcde", 2, 4, -1);
4539    test("abcdefghijklmnopqrst", 1, 9, "abcde", 4, 0, 9);
4540    test("abcdefghijklmnopqrst", 1, 9, "abcde", 4, 1, -3);
4541    test("abcdefghijklmnopqrst", 1, 9, "abcde", 4, 2, -3);
4542    test("abcdefghijklmnopqrst", 1, 9, "abcde", 5, 0, 9);
4543    test("abcdefghijklmnopqrst", 1, 9, "abcde", 5, 1, 9);
4544    test("abcdefghijklmnopqrst", 1, 9, "abcde", 6, 0, 0);
4545    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 0, 0, 9);
4546    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 0, 1, 1);
4547    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 0, 5, 1);
4548    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 0, 9, 1);
4549    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 0, 10, 1);
4550    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 0, 11, 1);
4551    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 1, 0, 9);
4552    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 1, 1, 8);
4553    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 1, 4, 5);
4554    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 1, 8, 1);
4555    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 1, 9, 0);
4556    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 1, 10, 0);
4557    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 5, 0, 9);
4558    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 5, 1, -4);
4559    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 5, 2, -4);
4560    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 5, 4, -4);
4561    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 5, 5, -4);
4562    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 5, 6, -4);
4563    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 9, 0, 9);
4564    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 9, 1, -8);
4565    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 9, 2, -8);
4566    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 10, 0, 9);
4567    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 10, 1, 9);
4568    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 11, 0, 0);
4569    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 0, 0, 9);
4570    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 0, 1, 1);
4571    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 0, 10, 1);
4572    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 0, 19, 1);
4573    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 0, 20, 1);
4574    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 0, 21, 1);
4575    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 1, 0, 9);
4576    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 1, 1, 8);
4577    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 1, 9, 0);
4578    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 1, 18, -9);
4579    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 1, 19, -10);
4580    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 1, 20, -10);
4581    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 10, 0, 9);
4582    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 10, 1, -9);
4583    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 10, 5, -9);
4584    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 10, 9, -9);
4585    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 10, 10, -9);
4586    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 10, 11, -9);
4587    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 19, 0, 9);
4588    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 19, 1, -18);
4589    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 19, 2, -18);
4590    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 20, 0, 9);
4591    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 20, 1, 9);
4592    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 21, 0, 0);
4593    test("abcdefghijklmnopqrst", 1, 18, "", 0, 0, 18);
4594    test("abcdefghijklmnopqrst", 1, 18, "", 0, 1, 18);
4595    test("abcdefghijklmnopqrst", 1, 18, "", 1, 0, 0);
4596    test("abcdefghijklmnopqrst", 1, 18, "abcde", 0, 0, 18);
4597    test("abcdefghijklmnopqrst", 1, 18, "abcde", 0, 1, 1);
4598    test("abcdefghijklmnopqrst", 1, 18, "abcde", 0, 2, 1);
4599    test("abcdefghijklmnopqrst", 1, 18, "abcde", 0, 4, 1);
4600    test("abcdefghijklmnopqrst", 1, 18, "abcde", 0, 5, 1);
4601    test("abcdefghijklmnopqrst", 1, 18, "abcde", 0, 6, 1);
4602    test("abcdefghijklmnopqrst", 1, 18, "abcde", 1, 0, 18);
4603    test("abcdefghijklmnopqrst", 1, 18, "abcde", 1, 1, 17);
4604    test("abcdefghijklmnopqrst", 1, 18, "abcde", 1, 2, 16);
4605    test("abcdefghijklmnopqrst", 1, 18, "abcde", 1, 3, 15);
4606    test("abcdefghijklmnopqrst", 1, 18, "abcde", 1, 4, 14);
4607    test("abcdefghijklmnopqrst", 1, 18, "abcde", 1, 5, 14);
4608    test("abcdefghijklmnopqrst", 1, 18, "abcde", 2, 0, 18);
4609    test("abcdefghijklmnopqrst", 1, 18, "abcde", 2, 1, -1);
4610    test("abcdefghijklmnopqrst", 1, 18, "abcde", 2, 2, -1);
4611    test("abcdefghijklmnopqrst", 1, 18, "abcde", 2, 3, -1);
4612    test("abcdefghijklmnopqrst", 1, 18, "abcde", 2, 4, -1);
4613    test("abcdefghijklmnopqrst", 1, 18, "abcde", 4, 0, 18);
4614    test("abcdefghijklmnopqrst", 1, 18, "abcde", 4, 1, -3);
4615    test("abcdefghijklmnopqrst", 1, 18, "abcde", 4, 2, -3);
4616    test("abcdefghijklmnopqrst", 1, 18, "abcde", 5, 0, 18);
4617    test("abcdefghijklmnopqrst", 1, 18, "abcde", 5, 1, 18);
4618    test("abcdefghijklmnopqrst", 1, 18, "abcde", 6, 0, 0);
4619    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 0, 0, 18);
4620    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 0, 1, 1);
4621    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 0, 5, 1);
4622    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 0, 9, 1);
4623    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 0, 10, 1);
4624    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 0, 11, 1);
4625    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 1, 0, 18);
4626    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 1, 1, 17);
4627}
4628
4629void test44()
4630{
4631    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 1, 4, 14);
4632    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 1, 8, 10);
4633    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 1, 9, 9);
4634    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 1, 10, 9);
4635    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 5, 0, 18);
4636    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 5, 1, -4);
4637    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 5, 2, -4);
4638    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 5, 4, -4);
4639    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 5, 5, -4);
4640    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 5, 6, -4);
4641    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 9, 0, 18);
4642    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 9, 1, -8);
4643    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 9, 2, -8);
4644    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 10, 0, 18);
4645    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 10, 1, 18);
4646    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 11, 0, 0);
4647    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 0, 0, 18);
4648    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 0, 1, 1);
4649    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 0, 10, 1);
4650    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 0, 19, 1);
4651    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 0, 20, 1);
4652    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 0, 21, 1);
4653    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 1, 0, 18);
4654    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 1, 1, 17);
4655    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 1, 9, 9);
4656    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 1, 18, 0);
4657    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 1, 19, -1);
4658    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 1, 20, -1);
4659    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 10, 0, 18);
4660    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 10, 1, -9);
4661    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 10, 5, -9);
4662    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 10, 9, -9);
4663    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 10, 10, -9);
4664    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 10, 11, -9);
4665    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 19, 0, 18);
4666    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 19, 1, -18);
4667    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 19, 2, -18);
4668    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 20, 0, 18);
4669    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 20, 1, 18);
4670    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 21, 0, 0);
4671    test("abcdefghijklmnopqrst", 1, 19, "", 0, 0, 19);
4672    test("abcdefghijklmnopqrst", 1, 19, "", 0, 1, 19);
4673    test("abcdefghijklmnopqrst", 1, 19, "", 1, 0, 0);
4674    test("abcdefghijklmnopqrst", 1, 19, "abcde", 0, 0, 19);
4675    test("abcdefghijklmnopqrst", 1, 19, "abcde", 0, 1, 1);
4676    test("abcdefghijklmnopqrst", 1, 19, "abcde", 0, 2, 1);
4677    test("abcdefghijklmnopqrst", 1, 19, "abcde", 0, 4, 1);
4678    test("abcdefghijklmnopqrst", 1, 19, "abcde", 0, 5, 1);
4679    test("abcdefghijklmnopqrst", 1, 19, "abcde", 0, 6, 1);
4680    test("abcdefghijklmnopqrst", 1, 19, "abcde", 1, 0, 19);
4681    test("abcdefghijklmnopqrst", 1, 19, "abcde", 1, 1, 18);
4682    test("abcdefghijklmnopqrst", 1, 19, "abcde", 1, 2, 17);
4683    test("abcdefghijklmnopqrst", 1, 19, "abcde", 1, 3, 16);
4684    test("abcdefghijklmnopqrst", 1, 19, "abcde", 1, 4, 15);
4685    test("abcdefghijklmnopqrst", 1, 19, "abcde", 1, 5, 15);
4686    test("abcdefghijklmnopqrst", 1, 19, "abcde", 2, 0, 19);
4687    test("abcdefghijklmnopqrst", 1, 19, "abcde", 2, 1, -1);
4688    test("abcdefghijklmnopqrst", 1, 19, "abcde", 2, 2, -1);
4689    test("abcdefghijklmnopqrst", 1, 19, "abcde", 2, 3, -1);
4690    test("abcdefghijklmnopqrst", 1, 19, "abcde", 2, 4, -1);
4691    test("abcdefghijklmnopqrst", 1, 19, "abcde", 4, 0, 19);
4692    test("abcdefghijklmnopqrst", 1, 19, "abcde", 4, 1, -3);
4693    test("abcdefghijklmnopqrst", 1, 19, "abcde", 4, 2, -3);
4694    test("abcdefghijklmnopqrst", 1, 19, "abcde", 5, 0, 19);
4695    test("abcdefghijklmnopqrst", 1, 19, "abcde", 5, 1, 19);
4696    test("abcdefghijklmnopqrst", 1, 19, "abcde", 6, 0, 0);
4697    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 0, 0, 19);
4698    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 0, 1, 1);
4699    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 0, 5, 1);
4700    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 0, 9, 1);
4701    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 0, 10, 1);
4702    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 0, 11, 1);
4703    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 1, 0, 19);
4704    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 1, 1, 18);
4705    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 1, 4, 15);
4706    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 1, 8, 11);
4707    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 1, 9, 10);
4708    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 1, 10, 10);
4709    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 5, 0, 19);
4710    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 5, 1, -4);
4711    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 5, 2, -4);
4712    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 5, 4, -4);
4713    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 5, 5, -4);
4714    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 5, 6, -4);
4715    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 9, 0, 19);
4716    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 9, 1, -8);
4717    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 9, 2, -8);
4718    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 10, 0, 19);
4719    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 10, 1, 19);
4720    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 11, 0, 0);
4721    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 0, 0, 19);
4722    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 0, 1, 1);
4723    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 0, 10, 1);
4724    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 0, 19, 1);
4725    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 0, 20, 1);
4726    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 0, 21, 1);
4727    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 1, 0, 19);
4728    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 1, 1, 18);
4729    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 1, 9, 10);
4730    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 1, 18, 1);
4731}
4732
4733void test45()
4734{
4735    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 1, 19, 0);
4736    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 1, 20, 0);
4737    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 10, 0, 19);
4738    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 10, 1, -9);
4739    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 10, 5, -9);
4740    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 10, 9, -9);
4741    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 10, 10, -9);
4742    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 10, 11, -9);
4743    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 19, 0, 19);
4744    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 19, 1, -18);
4745    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 19, 2, -18);
4746    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 20, 0, 19);
4747    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 20, 1, 19);
4748    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 21, 0, 0);
4749    test("abcdefghijklmnopqrst", 1, 20, "", 0, 0, 19);
4750    test("abcdefghijklmnopqrst", 1, 20, "", 0, 1, 19);
4751    test("abcdefghijklmnopqrst", 1, 20, "", 1, 0, 0);
4752    test("abcdefghijklmnopqrst", 1, 20, "abcde", 0, 0, 19);
4753    test("abcdefghijklmnopqrst", 1, 20, "abcde", 0, 1, 1);
4754    test("abcdefghijklmnopqrst", 1, 20, "abcde", 0, 2, 1);
4755    test("abcdefghijklmnopqrst", 1, 20, "abcde", 0, 4, 1);
4756    test("abcdefghijklmnopqrst", 1, 20, "abcde", 0, 5, 1);
4757    test("abcdefghijklmnopqrst", 1, 20, "abcde", 0, 6, 1);
4758    test("abcdefghijklmnopqrst", 1, 20, "abcde", 1, 0, 19);
4759    test("abcdefghijklmnopqrst", 1, 20, "abcde", 1, 1, 18);
4760    test("abcdefghijklmnopqrst", 1, 20, "abcde", 1, 2, 17);
4761    test("abcdefghijklmnopqrst", 1, 20, "abcde", 1, 3, 16);
4762    test("abcdefghijklmnopqrst", 1, 20, "abcde", 1, 4, 15);
4763    test("abcdefghijklmnopqrst", 1, 20, "abcde", 1, 5, 15);
4764    test("abcdefghijklmnopqrst", 1, 20, "abcde", 2, 0, 19);
4765    test("abcdefghijklmnopqrst", 1, 20, "abcde", 2, 1, -1);
4766    test("abcdefghijklmnopqrst", 1, 20, "abcde", 2, 2, -1);
4767    test("abcdefghijklmnopqrst", 1, 20, "abcde", 2, 3, -1);
4768    test("abcdefghijklmnopqrst", 1, 20, "abcde", 2, 4, -1);
4769    test("abcdefghijklmnopqrst", 1, 20, "abcde", 4, 0, 19);
4770    test("abcdefghijklmnopqrst", 1, 20, "abcde", 4, 1, -3);
4771    test("abcdefghijklmnopqrst", 1, 20, "abcde", 4, 2, -3);
4772    test("abcdefghijklmnopqrst", 1, 20, "abcde", 5, 0, 19);
4773    test("abcdefghijklmnopqrst", 1, 20, "abcde", 5, 1, 19);
4774    test("abcdefghijklmnopqrst", 1, 20, "abcde", 6, 0, 0);
4775    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 0, 0, 19);
4776    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 0, 1, 1);
4777    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 0, 5, 1);
4778    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 0, 9, 1);
4779    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 0, 10, 1);
4780    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 0, 11, 1);
4781    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 1, 0, 19);
4782    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 1, 1, 18);
4783    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 1, 4, 15);
4784    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 1, 8, 11);
4785    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 1, 9, 10);
4786    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 1, 10, 10);
4787    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 5, 0, 19);
4788    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 5, 1, -4);
4789    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 5, 2, -4);
4790    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 5, 4, -4);
4791    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 5, 5, -4);
4792    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 5, 6, -4);
4793    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 9, 0, 19);
4794    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 9, 1, -8);
4795    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 9, 2, -8);
4796    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 10, 0, 19);
4797    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 10, 1, 19);
4798    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 11, 0, 0);
4799    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 0, 0, 19);
4800    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 0, 1, 1);
4801    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 0, 10, 1);
4802    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 0, 19, 1);
4803    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 0, 20, 1);
4804    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 0, 21, 1);
4805    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 1, 0, 19);
4806    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 1, 1, 18);
4807    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 1, 9, 10);
4808    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 1, 18, 1);
4809    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 1, 19, 0);
4810    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 1, 20, 0);
4811    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 10, 0, 19);
4812    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 10, 1, -9);
4813    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 10, 5, -9);
4814    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 10, 9, -9);
4815    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 10, 10, -9);
4816    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 10, 11, -9);
4817    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 19, 0, 19);
4818    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 19, 1, -18);
4819    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 19, 2, -18);
4820    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 20, 0, 19);
4821    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 20, 1, 19);
4822    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 21, 0, 0);
4823    test("abcdefghijklmnopqrst", 10, 0, "", 0, 0, 0);
4824    test("abcdefghijklmnopqrst", 10, 0, "", 0, 1, 0);
4825    test("abcdefghijklmnopqrst", 10, 0, "", 1, 0, 0);
4826    test("abcdefghijklmnopqrst", 10, 0, "abcde", 0, 0, 0);
4827    test("abcdefghijklmnopqrst", 10, 0, "abcde", 0, 1, -1);
4828    test("abcdefghijklmnopqrst", 10, 0, "abcde", 0, 2, -2);
4829    test("abcdefghijklmnopqrst", 10, 0, "abcde", 0, 4, -4);
4830    test("abcdefghijklmnopqrst", 10, 0, "abcde", 0, 5, -5);
4831    test("abcdefghijklmnopqrst", 10, 0, "abcde", 0, 6, -5);
4832    test("abcdefghijklmnopqrst", 10, 0, "abcde", 1, 0, 0);
4833    test("abcdefghijklmnopqrst", 10, 0, "abcde", 1, 1, -1);
4834    test("abcdefghijklmnopqrst", 10, 0, "abcde", 1, 2, -2);
4835}
4836
4837void test46()
4838{
4839    test("abcdefghijklmnopqrst", 10, 0, "abcde", 1, 3, -3);
4840    test("abcdefghijklmnopqrst", 10, 0, "abcde", 1, 4, -4);
4841    test("abcdefghijklmnopqrst", 10, 0, "abcde", 1, 5, -4);
4842    test("abcdefghijklmnopqrst", 10, 0, "abcde", 2, 0, 0);
4843    test("abcdefghijklmnopqrst", 10, 0, "abcde", 2, 1, -1);
4844    test("abcdefghijklmnopqrst", 10, 0, "abcde", 2, 2, -2);
4845    test("abcdefghijklmnopqrst", 10, 0, "abcde", 2, 3, -3);
4846    test("abcdefghijklmnopqrst", 10, 0, "abcde", 2, 4, -3);
4847    test("abcdefghijklmnopqrst", 10, 0, "abcde", 4, 0, 0);
4848    test("abcdefghijklmnopqrst", 10, 0, "abcde", 4, 1, -1);
4849    test("abcdefghijklmnopqrst", 10, 0, "abcde", 4, 2, -1);
4850    test("abcdefghijklmnopqrst", 10, 0, "abcde", 5, 0, 0);
4851    test("abcdefghijklmnopqrst", 10, 0, "abcde", 5, 1, 0);
4852    test("abcdefghijklmnopqrst", 10, 0, "abcde", 6, 0, 0);
4853    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 0, 0, 0);
4854    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 0, 1, -1);
4855    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 0, 5, -5);
4856    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 0, 9, -9);
4857    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 0, 10, -10);
4858    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 0, 11, -10);
4859    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 1, 0, 0);
4860    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 1, 1, -1);
4861    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 1, 4, -4);
4862    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 1, 8, -8);
4863    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 1, 9, -9);
4864    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 1, 10, -9);
4865    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 5, 0, 0);
4866    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 5, 1, -1);
4867    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 5, 2, -2);
4868    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 5, 4, -4);
4869    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 5, 5, -5);
4870    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 5, 6, -5);
4871    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 9, 0, 0);
4872    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 9, 1, -1);
4873    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 9, 2, -1);
4874    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 10, 0, 0);
4875    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 10, 1, 0);
4876    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 11, 0, 0);
4877    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 0, 0, 0);
4878    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 0, 1, -1);
4879    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 0, 10, -10);
4880    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 0, 19, -19);
4881    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 0, 20, -20);
4882    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 0, 21, -20);
4883    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 1, 0, 0);
4884    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 1, 1, -1);
4885    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 1, 9, -9);
4886    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 1, 18, -18);
4887    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 1, 19, -19);
4888    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 1, 20, -19);
4889    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 10, 0, 0);
4890    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 10, 1, -1);
4891    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 10, 5, -5);
4892    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 10, 9, -9);
4893    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 10, 10, -10);
4894    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 10, 11, -10);
4895    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 19, 0, 0);
4896    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 19, 1, -1);
4897    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 19, 2, -1);
4898    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 20, 0, 0);
4899    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 20, 1, 0);
4900    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 21, 0, 0);
4901    test("abcdefghijklmnopqrst", 10, 1, "", 0, 0, 1);
4902    test("abcdefghijklmnopqrst", 10, 1, "", 0, 1, 1);
4903    test("abcdefghijklmnopqrst", 10, 1, "", 1, 0, 0);
4904    test("abcdefghijklmnopqrst", 10, 1, "abcde", 0, 0, 1);
4905    test("abcdefghijklmnopqrst", 10, 1, "abcde", 0, 1, 10);
4906    test("abcdefghijklmnopqrst", 10, 1, "abcde", 0, 2, 10);
4907    test("abcdefghijklmnopqrst", 10, 1, "abcde", 0, 4, 10);
4908    test("abcdefghijklmnopqrst", 10, 1, "abcde", 0, 5, 10);
4909    test("abcdefghijklmnopqrst", 10, 1, "abcde", 0, 6, 10);
4910    test("abcdefghijklmnopqrst", 10, 1, "abcde", 1, 0, 1);
4911    test("abcdefghijklmnopqrst", 10, 1, "abcde", 1, 1, 9);
4912    test("abcdefghijklmnopqrst", 10, 1, "abcde", 1, 2, 9);
4913    test("abcdefghijklmnopqrst", 10, 1, "abcde", 1, 3, 9);
4914    test("abcdefghijklmnopqrst", 10, 1, "abcde", 1, 4, 9);
4915    test("abcdefghijklmnopqrst", 10, 1, "abcde", 1, 5, 9);
4916    test("abcdefghijklmnopqrst", 10, 1, "abcde", 2, 0, 1);
4917    test("abcdefghijklmnopqrst", 10, 1, "abcde", 2, 1, 8);
4918    test("abcdefghijklmnopqrst", 10, 1, "abcde", 2, 2, 8);
4919    test("abcdefghijklmnopqrst", 10, 1, "abcde", 2, 3, 8);
4920    test("abcdefghijklmnopqrst", 10, 1, "abcde", 2, 4, 8);
4921    test("abcdefghijklmnopqrst", 10, 1, "abcde", 4, 0, 1);
4922    test("abcdefghijklmnopqrst", 10, 1, "abcde", 4, 1, 6);
4923    test("abcdefghijklmnopqrst", 10, 1, "abcde", 4, 2, 6);
4924    test("abcdefghijklmnopqrst", 10, 1, "abcde", 5, 0, 1);
4925    test("abcdefghijklmnopqrst", 10, 1, "abcde", 5, 1, 1);
4926    test("abcdefghijklmnopqrst", 10, 1, "abcde", 6, 0, 0);
4927    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 0, 0, 1);
4928    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 0, 1, 10);
4929    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 0, 5, 10);
4930    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 0, 9, 10);
4931    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 0, 10, 10);
4932    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 0, 11, 10);
4933    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 1, 0, 1);
4934    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 1, 1, 9);
4935    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 1, 4, 9);
4936    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 1, 8, 9);
4937    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 1, 9, 9);
4938    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 1, 10, 9);
4939}
4940
4941void test47()
4942{
4943    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 5, 0, 1);
4944    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 5, 1, 5);
4945    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 5, 2, 5);
4946    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 5, 4, 5);
4947    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 5, 5, 5);
4948    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 5, 6, 5);
4949    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 9, 0, 1);
4950    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 9, 1, 1);
4951    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 9, 2, 1);
4952    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 10, 0, 1);
4953    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 10, 1, 1);
4954    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 11, 0, 0);
4955    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 0, 0, 1);
4956    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 0, 1, 10);
4957    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 0, 10, 10);
4958    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 0, 19, 10);
4959    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 0, 20, 10);
4960    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 0, 21, 10);
4961    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 1, 0, 1);
4962    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 1, 1, 9);
4963    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 1, 9, 9);
4964    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 1, 18, 9);
4965    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 1, 19, 9);
4966    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 1, 20, 9);
4967    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 10, 0, 1);
4968    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 10, 1, 0);
4969    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 10, 5, -4);
4970    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 10, 9, -8);
4971    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 10, 10, -9);
4972    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 10, 11, -9);
4973    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 19, 0, 1);
4974    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 19, 1, -9);
4975    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 19, 2, -9);
4976    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 20, 0, 1);
4977    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 20, 1, 1);
4978    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 21, 0, 0);
4979    test("abcdefghijklmnopqrst", 10, 5, "", 0, 0, 5);
4980    test("abcdefghijklmnopqrst", 10, 5, "", 0, 1, 5);
4981    test("abcdefghijklmnopqrst", 10, 5, "", 1, 0, 0);
4982    test("abcdefghijklmnopqrst", 10, 5, "abcde", 0, 0, 5);
4983    test("abcdefghijklmnopqrst", 10, 5, "abcde", 0, 1, 10);
4984    test("abcdefghijklmnopqrst", 10, 5, "abcde", 0, 2, 10);
4985    test("abcdefghijklmnopqrst", 10, 5, "abcde", 0, 4, 10);
4986    test("abcdefghijklmnopqrst", 10, 5, "abcde", 0, 5, 10);
4987    test("abcdefghijklmnopqrst", 10, 5, "abcde", 0, 6, 10);
4988    test("abcdefghijklmnopqrst", 10, 5, "abcde", 1, 0, 5);
4989    test("abcdefghijklmnopqrst", 10, 5, "abcde", 1, 1, 9);
4990    test("abcdefghijklmnopqrst", 10, 5, "abcde", 1, 2, 9);
4991    test("abcdefghijklmnopqrst", 10, 5, "abcde", 1, 3, 9);
4992    test("abcdefghijklmnopqrst", 10, 5, "abcde", 1, 4, 9);
4993    test("abcdefghijklmnopqrst", 10, 5, "abcde", 1, 5, 9);
4994    test("abcdefghijklmnopqrst", 10, 5, "abcde", 2, 0, 5);
4995    test("abcdefghijklmnopqrst", 10, 5, "abcde", 2, 1, 8);
4996    test("abcdefghijklmnopqrst", 10, 5, "abcde", 2, 2, 8);
4997    test("abcdefghijklmnopqrst", 10, 5, "abcde", 2, 3, 8);
4998    test("abcdefghijklmnopqrst", 10, 5, "abcde", 2, 4, 8);
4999    test("abcdefghijklmnopqrst", 10, 5, "abcde", 4, 0, 5);
5000    test("abcdefghijklmnopqrst", 10, 5, "abcde", 4, 1, 6);
5001    test("abcdefghijklmnopqrst", 10, 5, "abcde", 4, 2, 6);
5002    test("abcdefghijklmnopqrst", 10, 5, "abcde", 5, 0, 5);
5003    test("abcdefghijklmnopqrst", 10, 5, "abcde", 5, 1, 5);
5004    test("abcdefghijklmnopqrst", 10, 5, "abcde", 6, 0, 0);
5005    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 0, 0, 5);
5006    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 0, 1, 10);
5007    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 0, 5, 10);
5008    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 0, 9, 10);
5009    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 0, 10, 10);
5010    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 0, 11, 10);
5011    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 1, 0, 5);
5012    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 1, 1, 9);
5013    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 1, 4, 9);
5014    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 1, 8, 9);
5015    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 1, 9, 9);
5016    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 1, 10, 9);
5017    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 5, 0, 5);
5018    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 5, 1, 5);
5019    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 5, 2, 5);
5020    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 5, 4, 5);
5021    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 5, 5, 5);
5022    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 5, 6, 5);
5023    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 9, 0, 5);
5024    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 9, 1, 1);
5025    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 9, 2, 1);
5026    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 10, 0, 5);
5027    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 10, 1, 5);
5028    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 11, 0, 0);
5029    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 0, 0, 5);
5030    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 0, 1, 10);
5031    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 0, 10, 10);
5032    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 0, 19, 10);
5033    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 0, 20, 10);
5034    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 0, 21, 10);
5035    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 1, 0, 5);
5036    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 1, 1, 9);
5037    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 1, 9, 9);
5038    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 1, 18, 9);
5039    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 1, 19, 9);
5040    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 1, 20, 9);
5041    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 10, 0, 5);
5042    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 10, 1, 4);
5043}
5044
5045void test48()
5046{
5047    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 10, 5, 0);
5048    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 10, 9, -4);
5049    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 10, 10, -5);
5050    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 10, 11, -5);
5051    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 19, 0, 5);
5052    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 19, 1, -9);
5053    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 19, 2, -9);
5054    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 20, 0, 5);
5055    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 20, 1, 5);
5056    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 21, 0, 0);
5057    test("abcdefghijklmnopqrst", 10, 9, "", 0, 0, 9);
5058    test("abcdefghijklmnopqrst", 10, 9, "", 0, 1, 9);
5059    test("abcdefghijklmnopqrst", 10, 9, "", 1, 0, 0);
5060    test("abcdefghijklmnopqrst", 10, 9, "abcde", 0, 0, 9);
5061    test("abcdefghijklmnopqrst", 10, 9, "abcde", 0, 1, 10);
5062    test("abcdefghijklmnopqrst", 10, 9, "abcde", 0, 2, 10);
5063    test("abcdefghijklmnopqrst", 10, 9, "abcde", 0, 4, 10);
5064    test("abcdefghijklmnopqrst", 10, 9, "abcde", 0, 5, 10);
5065    test("abcdefghijklmnopqrst", 10, 9, "abcde", 0, 6, 10);
5066    test("abcdefghijklmnopqrst", 10, 9, "abcde", 1, 0, 9);
5067    test("abcdefghijklmnopqrst", 10, 9, "abcde", 1, 1, 9);
5068    test("abcdefghijklmnopqrst", 10, 9, "abcde", 1, 2, 9);
5069    test("abcdefghijklmnopqrst", 10, 9, "abcde", 1, 3, 9);
5070    test("abcdefghijklmnopqrst", 10, 9, "abcde", 1, 4, 9);
5071    test("abcdefghijklmnopqrst", 10, 9, "abcde", 1, 5, 9);
5072    test("abcdefghijklmnopqrst", 10, 9, "abcde", 2, 0, 9);
5073    test("abcdefghijklmnopqrst", 10, 9, "abcde", 2, 1, 8);
5074    test("abcdefghijklmnopqrst", 10, 9, "abcde", 2, 2, 8);
5075    test("abcdefghijklmnopqrst", 10, 9, "abcde", 2, 3, 8);
5076    test("abcdefghijklmnopqrst", 10, 9, "abcde", 2, 4, 8);
5077    test("abcdefghijklmnopqrst", 10, 9, "abcde", 4, 0, 9);
5078    test("abcdefghijklmnopqrst", 10, 9, "abcde", 4, 1, 6);
5079    test("abcdefghijklmnopqrst", 10, 9, "abcde", 4, 2, 6);
5080    test("abcdefghijklmnopqrst", 10, 9, "abcde", 5, 0, 9);
5081    test("abcdefghijklmnopqrst", 10, 9, "abcde", 5, 1, 9);
5082    test("abcdefghijklmnopqrst", 10, 9, "abcde", 6, 0, 0);
5083    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 0, 0, 9);
5084    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 0, 1, 10);
5085    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 0, 5, 10);
5086    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 0, 9, 10);
5087    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 0, 10, 10);
5088    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 0, 11, 10);
5089    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 1, 0, 9);
5090    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 1, 1, 9);
5091    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 1, 4, 9);
5092    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 1, 8, 9);
5093    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 1, 9, 9);
5094    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 1, 10, 9);
5095    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 5, 0, 9);
5096    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 5, 1, 5);
5097    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 5, 2, 5);
5098    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 5, 4, 5);
5099    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 5, 5, 5);
5100    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 5, 6, 5);
5101    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 9, 0, 9);
5102    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 9, 1, 1);
5103    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 9, 2, 1);
5104    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 10, 0, 9);
5105    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 10, 1, 9);
5106    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 11, 0, 0);
5107    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 0, 0, 9);
5108    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 0, 1, 10);
5109    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 0, 10, 10);
5110    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 0, 19, 10);
5111    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 0, 20, 10);
5112    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 0, 21, 10);
5113    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 1, 0, 9);
5114    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 1, 1, 9);
5115    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 1, 9, 9);
5116    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 1, 18, 9);
5117    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 1, 19, 9);
5118    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 1, 20, 9);
5119    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 10, 0, 9);
5120    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 10, 1, 8);
5121    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 10, 5, 4);
5122    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 10, 9, 0);
5123    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 10, 10, -1);
5124    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 10, 11, -1);
5125    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 19, 0, 9);
5126    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 19, 1, -9);
5127    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 19, 2, -9);
5128    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 20, 0, 9);
5129    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 20, 1, 9);
5130    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 21, 0, 0);
5131    test("abcdefghijklmnopqrst", 10, 10, "", 0, 0, 10);
5132    test("abcdefghijklmnopqrst", 10, 10, "", 0, 1, 10);
5133    test("abcdefghijklmnopqrst", 10, 10, "", 1, 0, 0);
5134    test("abcdefghijklmnopqrst", 10, 10, "abcde", 0, 0, 10);
5135    test("abcdefghijklmnopqrst", 10, 10, "abcde", 0, 1, 10);
5136    test("abcdefghijklmnopqrst", 10, 10, "abcde", 0, 2, 10);
5137    test("abcdefghijklmnopqrst", 10, 10, "abcde", 0, 4, 10);
5138    test("abcdefghijklmnopqrst", 10, 10, "abcde", 0, 5, 10);
5139    test("abcdefghijklmnopqrst", 10, 10, "abcde", 0, 6, 10);
5140    test("abcdefghijklmnopqrst", 10, 10, "abcde", 1, 0, 10);
5141    test("abcdefghijklmnopqrst", 10, 10, "abcde", 1, 1, 9);
5142    test("abcdefghijklmnopqrst", 10, 10, "abcde", 1, 2, 9);
5143    test("abcdefghijklmnopqrst", 10, 10, "abcde", 1, 3, 9);
5144    test("abcdefghijklmnopqrst", 10, 10, "abcde", 1, 4, 9);
5145    test("abcdefghijklmnopqrst", 10, 10, "abcde", 1, 5, 9);
5146    test("abcdefghijklmnopqrst", 10, 10, "abcde", 2, 0, 10);
5147}
5148
5149void test49()
5150{
5151    test("abcdefghijklmnopqrst", 10, 10, "abcde", 2, 1, 8);
5152    test("abcdefghijklmnopqrst", 10, 10, "abcde", 2, 2, 8);
5153    test("abcdefghijklmnopqrst", 10, 10, "abcde", 2, 3, 8);
5154    test("abcdefghijklmnopqrst", 10, 10, "abcde", 2, 4, 8);
5155    test("abcdefghijklmnopqrst", 10, 10, "abcde", 4, 0, 10);
5156    test("abcdefghijklmnopqrst", 10, 10, "abcde", 4, 1, 6);
5157    test("abcdefghijklmnopqrst", 10, 10, "abcde", 4, 2, 6);
5158    test("abcdefghijklmnopqrst", 10, 10, "abcde", 5, 0, 10);
5159    test("abcdefghijklmnopqrst", 10, 10, "abcde", 5, 1, 10);
5160    test("abcdefghijklmnopqrst", 10, 10, "abcde", 6, 0, 0);
5161    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 0, 0, 10);
5162    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 0, 1, 10);
5163    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 0, 5, 10);
5164    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 0, 9, 10);
5165    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 0, 10, 10);
5166    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 0, 11, 10);
5167    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 1, 0, 10);
5168    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 1, 1, 9);
5169    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 1, 4, 9);
5170    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 1, 8, 9);
5171    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 1, 9, 9);
5172    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 1, 10, 9);
5173    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 5, 0, 10);
5174    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 5, 1, 5);
5175    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 5, 2, 5);
5176    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 5, 4, 5);
5177    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 5, 5, 5);
5178    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 5, 6, 5);
5179    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 9, 0, 10);
5180    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 9, 1, 1);
5181    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 9, 2, 1);
5182    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 10, 0, 10);
5183    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 10, 1, 10);
5184    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 11, 0, 0);
5185    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 0, 0, 10);
5186    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 0, 1, 10);
5187    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 0, 10, 10);
5188    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 0, 19, 10);
5189    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 0, 20, 10);
5190    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 0, 21, 10);
5191    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 1, 0, 10);
5192    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 1, 1, 9);
5193    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 1, 9, 9);
5194    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 1, 18, 9);
5195    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 1, 19, 9);
5196    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 1, 20, 9);
5197    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 10, 0, 10);
5198    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 10, 1, 9);
5199    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 10, 5, 5);
5200    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 10, 9, 1);
5201    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 10, 10, 0);
5202    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 10, 11, 0);
5203    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 19, 0, 10);
5204    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 19, 1, -9);
5205    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 19, 2, -9);
5206    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 20, 0, 10);
5207    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 20, 1, 10);
5208    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 21, 0, 0);
5209    test("abcdefghijklmnopqrst", 10, 11, "", 0, 0, 10);
5210    test("abcdefghijklmnopqrst", 10, 11, "", 0, 1, 10);
5211    test("abcdefghijklmnopqrst", 10, 11, "", 1, 0, 0);
5212    test("abcdefghijklmnopqrst", 10, 11, "abcde", 0, 0, 10);
5213    test("abcdefghijklmnopqrst", 10, 11, "abcde", 0, 1, 10);
5214    test("abcdefghijklmnopqrst", 10, 11, "abcde", 0, 2, 10);
5215    test("abcdefghijklmnopqrst", 10, 11, "abcde", 0, 4, 10);
5216    test("abcdefghijklmnopqrst", 10, 11, "abcde", 0, 5, 10);
5217    test("abcdefghijklmnopqrst", 10, 11, "abcde", 0, 6, 10);
5218    test("abcdefghijklmnopqrst", 10, 11, "abcde", 1, 0, 10);
5219    test("abcdefghijklmnopqrst", 10, 11, "abcde", 1, 1, 9);
5220    test("abcdefghijklmnopqrst", 10, 11, "abcde", 1, 2, 9);
5221    test("abcdefghijklmnopqrst", 10, 11, "abcde", 1, 3, 9);
5222    test("abcdefghijklmnopqrst", 10, 11, "abcde", 1, 4, 9);
5223    test("abcdefghijklmnopqrst", 10, 11, "abcde", 1, 5, 9);
5224    test("abcdefghijklmnopqrst", 10, 11, "abcde", 2, 0, 10);
5225    test("abcdefghijklmnopqrst", 10, 11, "abcde", 2, 1, 8);
5226    test("abcdefghijklmnopqrst", 10, 11, "abcde", 2, 2, 8);
5227    test("abcdefghijklmnopqrst", 10, 11, "abcde", 2, 3, 8);
5228    test("abcdefghijklmnopqrst", 10, 11, "abcde", 2, 4, 8);
5229    test("abcdefghijklmnopqrst", 10, 11, "abcde", 4, 0, 10);
5230    test("abcdefghijklmnopqrst", 10, 11, "abcde", 4, 1, 6);
5231    test("abcdefghijklmnopqrst", 10, 11, "abcde", 4, 2, 6);
5232    test("abcdefghijklmnopqrst", 10, 11, "abcde", 5, 0, 10);
5233    test("abcdefghijklmnopqrst", 10, 11, "abcde", 5, 1, 10);
5234    test("abcdefghijklmnopqrst", 10, 11, "abcde", 6, 0, 0);
5235    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 0, 0, 10);
5236    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 0, 1, 10);
5237    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 0, 5, 10);
5238    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 0, 9, 10);
5239    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 0, 10, 10);
5240    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 0, 11, 10);
5241    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 1, 0, 10);
5242    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 1, 1, 9);
5243    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 1, 4, 9);
5244    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 1, 8, 9);
5245    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 1, 9, 9);
5246    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 1, 10, 9);
5247    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 5, 0, 10);
5248    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 5, 1, 5);
5249    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 5, 2, 5);
5250    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 5, 4, 5);
5251}
5252
5253void test50()
5254{
5255    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 5, 5, 5);
5256    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 5, 6, 5);
5257    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 9, 0, 10);
5258    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 9, 1, 1);
5259    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 9, 2, 1);
5260    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 10, 0, 10);
5261    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 10, 1, 10);
5262    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 11, 0, 0);
5263    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 0, 0, 10);
5264    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 0, 1, 10);
5265    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 0, 10, 10);
5266    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 0, 19, 10);
5267    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 0, 20, 10);
5268    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 0, 21, 10);
5269    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 1, 0, 10);
5270    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 1, 1, 9);
5271    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 1, 9, 9);
5272    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 1, 18, 9);
5273    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 1, 19, 9);
5274    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 1, 20, 9);
5275    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 10, 0, 10);
5276    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 10, 1, 9);
5277    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 10, 5, 5);
5278    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 10, 9, 1);
5279    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 10, 10, 0);
5280    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 10, 11, 0);
5281    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 19, 0, 10);
5282    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 19, 1, -9);
5283    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 19, 2, -9);
5284    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 20, 0, 10);
5285    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 20, 1, 10);
5286    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 21, 0, 0);
5287    test("abcdefghijklmnopqrst", 19, 0, "", 0, 0, 0);
5288    test("abcdefghijklmnopqrst", 19, 0, "", 0, 1, 0);
5289    test("abcdefghijklmnopqrst", 19, 0, "", 1, 0, 0);
5290    test("abcdefghijklmnopqrst", 19, 0, "abcde", 0, 0, 0);
5291    test("abcdefghijklmnopqrst", 19, 0, "abcde", 0, 1, -1);
5292    test("abcdefghijklmnopqrst", 19, 0, "abcde", 0, 2, -2);
5293    test("abcdefghijklmnopqrst", 19, 0, "abcde", 0, 4, -4);
5294    test("abcdefghijklmnopqrst", 19, 0, "abcde", 0, 5, -5);
5295    test("abcdefghijklmnopqrst", 19, 0, "abcde", 0, 6, -5);
5296    test("abcdefghijklmnopqrst", 19, 0, "abcde", 1, 0, 0);
5297    test("abcdefghijklmnopqrst", 19, 0, "abcde", 1, 1, -1);
5298    test("abcdefghijklmnopqrst", 19, 0, "abcde", 1, 2, -2);
5299    test("abcdefghijklmnopqrst", 19, 0, "abcde", 1, 3, -3);
5300    test("abcdefghijklmnopqrst", 19, 0, "abcde", 1, 4, -4);
5301    test("abcdefghijklmnopqrst", 19, 0, "abcde", 1, 5, -4);
5302    test("abcdefghijklmnopqrst", 19, 0, "abcde", 2, 0, 0);
5303    test("abcdefghijklmnopqrst", 19, 0, "abcde", 2, 1, -1);
5304    test("abcdefghijklmnopqrst", 19, 0, "abcde", 2, 2, -2);
5305    test("abcdefghijklmnopqrst", 19, 0, "abcde", 2, 3, -3);
5306    test("abcdefghijklmnopqrst", 19, 0, "abcde", 2, 4, -3);
5307    test("abcdefghijklmnopqrst", 19, 0, "abcde", 4, 0, 0);
5308    test("abcdefghijklmnopqrst", 19, 0, "abcde", 4, 1, -1);
5309    test("abcdefghijklmnopqrst", 19, 0, "abcde", 4, 2, -1);
5310    test("abcdefghijklmnopqrst", 19, 0, "abcde", 5, 0, 0);
5311    test("abcdefghijklmnopqrst", 19, 0, "abcde", 5, 1, 0);
5312    test("abcdefghijklmnopqrst", 19, 0, "abcde", 6, 0, 0);
5313    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 0, 0, 0);
5314    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 0, 1, -1);
5315    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 0, 5, -5);
5316    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 0, 9, -9);
5317    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 0, 10, -10);
5318    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 0, 11, -10);
5319    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 1, 0, 0);
5320    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 1, 1, -1);
5321    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 1, 4, -4);
5322    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 1, 8, -8);
5323    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 1, 9, -9);
5324    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 1, 10, -9);
5325    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 5, 0, 0);
5326    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 5, 1, -1);
5327    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 5, 2, -2);
5328    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 5, 4, -4);
5329    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 5, 5, -5);
5330    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 5, 6, -5);
5331    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 9, 0, 0);
5332    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 9, 1, -1);
5333    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 9, 2, -1);
5334    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 10, 0, 0);
5335    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 10, 1, 0);
5336    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 11, 0, 0);
5337    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 0, 0, 0);
5338    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 0, 1, -1);
5339    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 0, 10, -10);
5340    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 0, 19, -19);
5341    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 0, 20, -20);
5342    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 0, 21, -20);
5343    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 1, 0, 0);
5344    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 1, 1, -1);
5345    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 1, 9, -9);
5346    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 1, 18, -18);
5347    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 1, 19, -19);
5348    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 1, 20, -19);
5349    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 10, 0, 0);
5350    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 10, 1, -1);
5351    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 10, 5, -5);
5352    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 10, 9, -9);
5353    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 10, 10, -10);
5354    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 10, 11, -10);
5355}
5356
5357void test51()
5358{
5359    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 19, 0, 0);
5360    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 19, 1, -1);
5361    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 19, 2, -1);
5362    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 20, 0, 0);
5363    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 20, 1, 0);
5364    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 21, 0, 0);
5365    test("abcdefghijklmnopqrst", 19, 1, "", 0, 0, 1);
5366    test("abcdefghijklmnopqrst", 19, 1, "", 0, 1, 1);
5367    test("abcdefghijklmnopqrst", 19, 1, "", 1, 0, 0);
5368    test("abcdefghijklmnopqrst", 19, 1, "abcde", 0, 0, 1);
5369    test("abcdefghijklmnopqrst", 19, 1, "abcde", 0, 1, 19);
5370    test("abcdefghijklmnopqrst", 19, 1, "abcde", 0, 2, 19);
5371    test("abcdefghijklmnopqrst", 19, 1, "abcde", 0, 4, 19);
5372    test("abcdefghijklmnopqrst", 19, 1, "abcde", 0, 5, 19);
5373    test("abcdefghijklmnopqrst", 19, 1, "abcde", 0, 6, 19);
5374    test("abcdefghijklmnopqrst", 19, 1, "abcde", 1, 0, 1);
5375    test("abcdefghijklmnopqrst", 19, 1, "abcde", 1, 1, 18);
5376    test("abcdefghijklmnopqrst", 19, 1, "abcde", 1, 2, 18);
5377    test("abcdefghijklmnopqrst", 19, 1, "abcde", 1, 3, 18);
5378    test("abcdefghijklmnopqrst", 19, 1, "abcde", 1, 4, 18);
5379    test("abcdefghijklmnopqrst", 19, 1, "abcde", 1, 5, 18);
5380    test("abcdefghijklmnopqrst", 19, 1, "abcde", 2, 0, 1);
5381    test("abcdefghijklmnopqrst", 19, 1, "abcde", 2, 1, 17);
5382    test("abcdefghijklmnopqrst", 19, 1, "abcde", 2, 2, 17);
5383    test("abcdefghijklmnopqrst", 19, 1, "abcde", 2, 3, 17);
5384    test("abcdefghijklmnopqrst", 19, 1, "abcde", 2, 4, 17);
5385    test("abcdefghijklmnopqrst", 19, 1, "abcde", 4, 0, 1);
5386    test("abcdefghijklmnopqrst", 19, 1, "abcde", 4, 1, 15);
5387    test("abcdefghijklmnopqrst", 19, 1, "abcde", 4, 2, 15);
5388    test("abcdefghijklmnopqrst", 19, 1, "abcde", 5, 0, 1);
5389    test("abcdefghijklmnopqrst", 19, 1, "abcde", 5, 1, 1);
5390    test("abcdefghijklmnopqrst", 19, 1, "abcde", 6, 0, 0);
5391    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 0, 0, 1);
5392    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 0, 1, 19);
5393    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 0, 5, 19);
5394    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 0, 9, 19);
5395    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 0, 10, 19);
5396    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 0, 11, 19);
5397    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 1, 0, 1);
5398    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 1, 1, 18);
5399    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 1, 4, 18);
5400    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 1, 8, 18);
5401    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 1, 9, 18);
5402    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 1, 10, 18);
5403    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 5, 0, 1);
5404    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 5, 1, 14);
5405    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 5, 2, 14);
5406    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 5, 4, 14);
5407    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 5, 5, 14);
5408    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 5, 6, 14);
5409    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 9, 0, 1);
5410    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 9, 1, 10);
5411    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 9, 2, 10);
5412    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 10, 0, 1);
5413    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 10, 1, 1);
5414    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 11, 0, 0);
5415    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 0, 0, 1);
5416    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 0, 1, 19);
5417    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 0, 10, 19);
5418    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 0, 19, 19);
5419    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 0, 20, 19);
5420    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 0, 21, 19);
5421    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 1, 0, 1);
5422    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 1, 1, 18);
5423    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 1, 9, 18);
5424    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 1, 18, 18);
5425    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 1, 19, 18);
5426    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 1, 20, 18);
5427    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 10, 0, 1);
5428    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 10, 1, 9);
5429    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 10, 5, 9);
5430    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 10, 9, 9);
5431    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 10, 10, 9);
5432    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 10, 11, 9);
5433    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 19, 0, 1);
5434    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 19, 1, 0);
5435    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 19, 2, 0);
5436    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 20, 0, 1);
5437    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 20, 1, 1);
5438    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 21, 0, 0);
5439    test("abcdefghijklmnopqrst", 19, 2, "", 0, 0, 1);
5440    test("abcdefghijklmnopqrst", 19, 2, "", 0, 1, 1);
5441    test("abcdefghijklmnopqrst", 19, 2, "", 1, 0, 0);
5442    test("abcdefghijklmnopqrst", 19, 2, "abcde", 0, 0, 1);
5443    test("abcdefghijklmnopqrst", 19, 2, "abcde", 0, 1, 19);
5444    test("abcdefghijklmnopqrst", 19, 2, "abcde", 0, 2, 19);
5445    test("abcdefghijklmnopqrst", 19, 2, "abcde", 0, 4, 19);
5446    test("abcdefghijklmnopqrst", 19, 2, "abcde", 0, 5, 19);
5447    test("abcdefghijklmnopqrst", 19, 2, "abcde", 0, 6, 19);
5448    test("abcdefghijklmnopqrst", 19, 2, "abcde", 1, 0, 1);
5449    test("abcdefghijklmnopqrst", 19, 2, "abcde", 1, 1, 18);
5450    test("abcdefghijklmnopqrst", 19, 2, "abcde", 1, 2, 18);
5451    test("abcdefghijklmnopqrst", 19, 2, "abcde", 1, 3, 18);
5452    test("abcdefghijklmnopqrst", 19, 2, "abcde", 1, 4, 18);
5453    test("abcdefghijklmnopqrst", 19, 2, "abcde", 1, 5, 18);
5454    test("abcdefghijklmnopqrst", 19, 2, "abcde", 2, 0, 1);
5455    test("abcdefghijklmnopqrst", 19, 2, "abcde", 2, 1, 17);
5456    test("abcdefghijklmnopqrst", 19, 2, "abcde", 2, 2, 17);
5457    test("abcdefghijklmnopqrst", 19, 2, "abcde", 2, 3, 17);
5458    test("abcdefghijklmnopqrst", 19, 2, "abcde", 2, 4, 17);
5459}
5460
5461void test52()
5462{
5463    test("abcdefghijklmnopqrst", 19, 2, "abcde", 4, 0, 1);
5464    test("abcdefghijklmnopqrst", 19, 2, "abcde", 4, 1, 15);
5465    test("abcdefghijklmnopqrst", 19, 2, "abcde", 4, 2, 15);
5466    test("abcdefghijklmnopqrst", 19, 2, "abcde", 5, 0, 1);
5467    test("abcdefghijklmnopqrst", 19, 2, "abcde", 5, 1, 1);
5468    test("abcdefghijklmnopqrst", 19, 2, "abcde", 6, 0, 0);
5469    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 0, 0, 1);
5470    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 0, 1, 19);
5471    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 0, 5, 19);
5472    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 0, 9, 19);
5473    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 0, 10, 19);
5474    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 0, 11, 19);
5475    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 1, 0, 1);
5476    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 1, 1, 18);
5477    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 1, 4, 18);
5478    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 1, 8, 18);
5479    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 1, 9, 18);
5480    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 1, 10, 18);
5481    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 5, 0, 1);
5482    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 5, 1, 14);
5483    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 5, 2, 14);
5484    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 5, 4, 14);
5485    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 5, 5, 14);
5486    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 5, 6, 14);
5487    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 9, 0, 1);
5488    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 9, 1, 10);
5489    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 9, 2, 10);
5490    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 10, 0, 1);
5491    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 10, 1, 1);
5492    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 11, 0, 0);
5493    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 0, 0, 1);
5494    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 0, 1, 19);
5495    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 0, 10, 19);
5496    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 0, 19, 19);
5497    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 0, 20, 19);
5498    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 0, 21, 19);
5499    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 1, 0, 1);
5500    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 1, 1, 18);
5501    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 1, 9, 18);
5502    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 1, 18, 18);
5503    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 1, 19, 18);
5504    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 1, 20, 18);
5505    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 10, 0, 1);
5506    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 10, 1, 9);
5507    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 10, 5, 9);
5508    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 10, 9, 9);
5509    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 10, 10, 9);
5510    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 10, 11, 9);
5511    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 19, 0, 1);
5512    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 19, 1, 0);
5513    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 19, 2, 0);
5514    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 20, 0, 1);
5515    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 20, 1, 1);
5516    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 21, 0, 0);
5517    test("abcdefghijklmnopqrst", 20, 0, "", 0, 0, 0);
5518    test("abcdefghijklmnopqrst", 20, 0, "", 0, 1, 0);
5519    test("abcdefghijklmnopqrst", 20, 0, "", 1, 0, 0);
5520    test("abcdefghijklmnopqrst", 20, 0, "abcde", 0, 0, 0);
5521    test("abcdefghijklmnopqrst", 20, 0, "abcde", 0, 1, -1);
5522    test("abcdefghijklmnopqrst", 20, 0, "abcde", 0, 2, -2);
5523    test("abcdefghijklmnopqrst", 20, 0, "abcde", 0, 4, -4);
5524    test("abcdefghijklmnopqrst", 20, 0, "abcde", 0, 5, -5);
5525    test("abcdefghijklmnopqrst", 20, 0, "abcde", 0, 6, -5);
5526    test("abcdefghijklmnopqrst", 20, 0, "abcde", 1, 0, 0);
5527    test("abcdefghijklmnopqrst", 20, 0, "abcde", 1, 1, -1);
5528    test("abcdefghijklmnopqrst", 20, 0, "abcde", 1, 2, -2);
5529    test("abcdefghijklmnopqrst", 20, 0, "abcde", 1, 3, -3);
5530    test("abcdefghijklmnopqrst", 20, 0, "abcde", 1, 4, -4);
5531    test("abcdefghijklmnopqrst", 20, 0, "abcde", 1, 5, -4);
5532    test("abcdefghijklmnopqrst", 20, 0, "abcde", 2, 0, 0);
5533    test("abcdefghijklmnopqrst", 20, 0, "abcde", 2, 1, -1);
5534    test("abcdefghijklmnopqrst", 20, 0, "abcde", 2, 2, -2);
5535    test("abcdefghijklmnopqrst", 20, 0, "abcde", 2, 3, -3);
5536    test("abcdefghijklmnopqrst", 20, 0, "abcde", 2, 4, -3);
5537    test("abcdefghijklmnopqrst", 20, 0, "abcde", 4, 0, 0);
5538    test("abcdefghijklmnopqrst", 20, 0, "abcde", 4, 1, -1);
5539    test("abcdefghijklmnopqrst", 20, 0, "abcde", 4, 2, -1);
5540    test("abcdefghijklmnopqrst", 20, 0, "abcde", 5, 0, 0);
5541    test("abcdefghijklmnopqrst", 20, 0, "abcde", 5, 1, 0);
5542    test("abcdefghijklmnopqrst", 20, 0, "abcde", 6, 0, 0);
5543    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 0, 0, 0);
5544    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 0, 1, -1);
5545    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 0, 5, -5);
5546    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 0, 9, -9);
5547    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 0, 10, -10);
5548    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 0, 11, -10);
5549    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 1, 0, 0);
5550    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 1, 1, -1);
5551    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 1, 4, -4);
5552    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 1, 8, -8);
5553    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 1, 9, -9);
5554    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 1, 10, -9);
5555    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 5, 0, 0);
5556    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 5, 1, -1);
5557    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 5, 2, -2);
5558    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 5, 4, -4);
5559    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 5, 5, -5);
5560    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 5, 6, -5);
5561    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 9, 0, 0);
5562    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 9, 1, -1);
5563}
5564
5565void test53()
5566{
5567    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 9, 2, -1);
5568    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 10, 0, 0);
5569    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 10, 1, 0);
5570    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 11, 0, 0);
5571    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 0, 0, 0);
5572    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 0, 1, -1);
5573    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 0, 10, -10);
5574    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 0, 19, -19);
5575    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 0, 20, -20);
5576    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 0, 21, -20);
5577    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 1, 0, 0);
5578    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 1, 1, -1);
5579    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 1, 9, -9);
5580    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 1, 18, -18);
5581    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 1, 19, -19);
5582    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 1, 20, -19);
5583    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 10, 0, 0);
5584    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 10, 1, -1);
5585    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 10, 5, -5);
5586    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 10, 9, -9);
5587    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 10, 10, -10);
5588    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 10, 11, -10);
5589    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 19, 0, 0);
5590    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 19, 1, -1);
5591    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 19, 2, -1);
5592    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 20, 0, 0);
5593    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 20, 1, 0);
5594    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 21, 0, 0);
5595    test("abcdefghijklmnopqrst", 20, 1, "", 0, 0, 0);
5596    test("abcdefghijklmnopqrst", 20, 1, "", 0, 1, 0);
5597    test("abcdefghijklmnopqrst", 20, 1, "", 1, 0, 0);
5598    test("abcdefghijklmnopqrst", 20, 1, "abcde", 0, 0, 0);
5599    test("abcdefghijklmnopqrst", 20, 1, "abcde", 0, 1, -1);
5600    test("abcdefghijklmnopqrst", 20, 1, "abcde", 0, 2, -2);
5601    test("abcdefghijklmnopqrst", 20, 1, "abcde", 0, 4, -4);
5602    test("abcdefghijklmnopqrst", 20, 1, "abcde", 0, 5, -5);
5603    test("abcdefghijklmnopqrst", 20, 1, "abcde", 0, 6, -5);
5604    test("abcdefghijklmnopqrst", 20, 1, "abcde", 1, 0, 0);
5605    test("abcdefghijklmnopqrst", 20, 1, "abcde", 1, 1, -1);
5606    test("abcdefghijklmnopqrst", 20, 1, "abcde", 1, 2, -2);
5607    test("abcdefghijklmnopqrst", 20, 1, "abcde", 1, 3, -3);
5608    test("abcdefghijklmnopqrst", 20, 1, "abcde", 1, 4, -4);
5609    test("abcdefghijklmnopqrst", 20, 1, "abcde", 1, 5, -4);
5610    test("abcdefghijklmnopqrst", 20, 1, "abcde", 2, 0, 0);
5611    test("abcdefghijklmnopqrst", 20, 1, "abcde", 2, 1, -1);
5612    test("abcdefghijklmnopqrst", 20, 1, "abcde", 2, 2, -2);
5613    test("abcdefghijklmnopqrst", 20, 1, "abcde", 2, 3, -3);
5614    test("abcdefghijklmnopqrst", 20, 1, "abcde", 2, 4, -3);
5615    test("abcdefghijklmnopqrst", 20, 1, "abcde", 4, 0, 0);
5616    test("abcdefghijklmnopqrst", 20, 1, "abcde", 4, 1, -1);
5617    test("abcdefghijklmnopqrst", 20, 1, "abcde", 4, 2, -1);
5618    test("abcdefghijklmnopqrst", 20, 1, "abcde", 5, 0, 0);
5619    test("abcdefghijklmnopqrst", 20, 1, "abcde", 5, 1, 0);
5620    test("abcdefghijklmnopqrst", 20, 1, "abcde", 6, 0, 0);
5621    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 0, 0, 0);
5622    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 0, 1, -1);
5623    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 0, 5, -5);
5624    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 0, 9, -9);
5625    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 0, 10, -10);
5626    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 0, 11, -10);
5627    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 1, 0, 0);
5628    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 1, 1, -1);
5629    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 1, 4, -4);
5630    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 1, 8, -8);
5631    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 1, 9, -9);
5632    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 1, 10, -9);
5633    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 5, 0, 0);
5634    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 5, 1, -1);
5635    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 5, 2, -2);
5636    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 5, 4, -4);
5637    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 5, 5, -5);
5638    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 5, 6, -5);
5639    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 9, 0, 0);
5640    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 9, 1, -1);
5641    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 9, 2, -1);
5642    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 10, 0, 0);
5643    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 10, 1, 0);
5644    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 11, 0, 0);
5645    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 0, 0, 0);
5646    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 0, 1, -1);
5647    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 0, 10, -10);
5648    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 0, 19, -19);
5649    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 0, 20, -20);
5650    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 0, 21, -20);
5651    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 1, 0, 0);
5652    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 1, 1, -1);
5653    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 1, 9, -9);
5654    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 1, 18, -18);
5655    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 1, 19, -19);
5656    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 1, 20, -19);
5657    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 10, 0, 0);
5658    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 10, 1, -1);
5659    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 10, 5, -5);
5660    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 10, 9, -9);
5661    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 10, 10, -10);
5662    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 10, 11, -10);
5663    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 19, 0, 0);
5664    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 19, 1, -1);
5665    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 19, 2, -1);
5666    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 20, 0, 0);
5667}
5668
5669void test54()
5670{
5671    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 20, 1, 0);
5672    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 21, 0, 0);
5673    test("abcdefghijklmnopqrst", 21, 0, "", 0, 0, 0);
5674    test("abcdefghijklmnopqrst", 21, 0, "", 0, 1, 0);
5675    test("abcdefghijklmnopqrst", 21, 0, "", 1, 0, 0);
5676    test("abcdefghijklmnopqrst", 21, 0, "abcde", 0, 0, 0);
5677    test("abcdefghijklmnopqrst", 21, 0, "abcde", 0, 1, 0);
5678    test("abcdefghijklmnopqrst", 21, 0, "abcde", 0, 2, 0);
5679    test("abcdefghijklmnopqrst", 21, 0, "abcde", 0, 4, 0);
5680    test("abcdefghijklmnopqrst", 21, 0, "abcde", 0, 5, 0);
5681    test("abcdefghijklmnopqrst", 21, 0, "abcde", 0, 6, 0);
5682    test("abcdefghijklmnopqrst", 21, 0, "abcde", 1, 0, 0);
5683    test("abcdefghijklmnopqrst", 21, 0, "abcde", 1, 1, 0);
5684    test("abcdefghijklmnopqrst", 21, 0, "abcde", 1, 2, 0);
5685    test("abcdefghijklmnopqrst", 21, 0, "abcde", 1, 3, 0);
5686    test("abcdefghijklmnopqrst", 21, 0, "abcde", 1, 4, 0);
5687    test("abcdefghijklmnopqrst", 21, 0, "abcde", 1, 5, 0);
5688    test("abcdefghijklmnopqrst", 21, 0, "abcde", 2, 0, 0);
5689    test("abcdefghijklmnopqrst", 21, 0, "abcde", 2, 1, 0);
5690    test("abcdefghijklmnopqrst", 21, 0, "abcde", 2, 2, 0);
5691    test("abcdefghijklmnopqrst", 21, 0, "abcde", 2, 3, 0);
5692    test("abcdefghijklmnopqrst", 21, 0, "abcde", 2, 4, 0);
5693    test("abcdefghijklmnopqrst", 21, 0, "abcde", 4, 0, 0);
5694    test("abcdefghijklmnopqrst", 21, 0, "abcde", 4, 1, 0);
5695    test("abcdefghijklmnopqrst", 21, 0, "abcde", 4, 2, 0);
5696    test("abcdefghijklmnopqrst", 21, 0, "abcde", 5, 0, 0);
5697    test("abcdefghijklmnopqrst", 21, 0, "abcde", 5, 1, 0);
5698    test("abcdefghijklmnopqrst", 21, 0, "abcde", 6, 0, 0);
5699    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 0, 0, 0);
5700    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 0, 1, 0);
5701    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 0, 5, 0);
5702    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 0, 9, 0);
5703    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 0, 10, 0);
5704    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 0, 11, 0);
5705    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 1, 0, 0);
5706    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 1, 1, 0);
5707    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 1, 4, 0);
5708    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 1, 8, 0);
5709    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 1, 9, 0);
5710    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 1, 10, 0);
5711    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 5, 0, 0);
5712    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 5, 1, 0);
5713    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 5, 2, 0);
5714    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 5, 4, 0);
5715    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 5, 5, 0);
5716    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 5, 6, 0);
5717    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 9, 0, 0);
5718    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 9, 1, 0);
5719    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 9, 2, 0);
5720    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 10, 0, 0);
5721    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 10, 1, 0);
5722    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 11, 0, 0);
5723    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 0, 0, 0);
5724    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 0, 1, 0);
5725    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 0, 10, 0);
5726    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 0, 19, 0);
5727    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 0, 20, 0);
5728    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 0, 21, 0);
5729    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 1, 0, 0);
5730    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 1, 1, 0);
5731    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 1, 9, 0);
5732    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 1, 18, 0);
5733    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 1, 19, 0);
5734    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 1, 20, 0);
5735    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 10, 0, 0);
5736    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 10, 1, 0);
5737    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 10, 5, 0);
5738    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 10, 9, 0);
5739    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 10, 10, 0);
5740    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 10, 11, 0);
5741    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 19, 0, 0);
5742    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 19, 1, 0);
5743    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 19, 2, 0);
5744    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 20, 0, 0);
5745    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 20, 1, 0);
5746    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 21, 0, 0);
5747}
5748
5749
5750int main () {
5751    test0();
5752    test1();
5753    test2();
5754    test3();
5755    test4();
5756    test5();
5757    test6();
5758    test7();
5759    test8();
5760    test9();
5761    test10();
5762    test11();
5763    test12();
5764    test13();
5765    test14();
5766    test15();
5767    test16();
5768    test17();
5769    test18();
5770    test19();
5771    test20();
5772    test21();
5773    test22();
5774    test23();
5775    test24();
5776    test25();
5777    test26();
5778    test27();
5779    test28();
5780    test29();
5781    test30();
5782    test31();
5783    test32();
5784    test33();
5785    test34();
5786    test35();
5787    test36();
5788    test37();
5789    test38();
5790    test39();
5791    test40();
5792    test41();
5793    test42();
5794    test43();
5795    test44();
5796    test45();
5797    test46();
5798    test47();
5799    test48();
5800    test49();
5801    test50();
5802    test51();
5803    test52();
5804    test53();
5805    test54();
5806
5807
5808    {
5809    test("abcde", 5, 1, "", 0, 0, 0);
5810    test("abcde", 2, 4, "", 0, 0, 3);
5811    test("abcde", 2, 4, "abcde", 3, 4, -2);
5812    test("ABCde", 2, 4, "abcde", 2, 4, -1);
5813    }
5814
5815    {
5816    test(L"abcde", 5, 1, L"", 0, 0, 0);
5817    test(L"abcde", 2, 4, L"", 0, 0, 3);
5818    test(L"abcde", 2, 4, L"abcde", 3, 4, -2);
5819    test(L"ABCde", 2, 4, L"abcde", 2, 4, -1);
5820    }
5821
5822#if TEST_STD_VER >= 11
5823    {
5824    test(u"abcde", 5, 1, u"", 0, 0, 0);
5825    test(u"abcde", 2, 4, u"", 0, 0, 3);
5826    test(u"abcde", 2, 4, u"abcde", 3, 4, -2);
5827    test(u"ABCde", 2, 4, u"abcde", 2, 4, -1);
5828    }
5829
5830    {
5831    test(U"abcde", 5, 1, U"", 0, 0, 0);
5832    test(U"abcde", 2, 4, U"", 0, 0, 3);
5833    test(U"abcde", 2, 4, U"abcde", 3, 4, -2);
5834    test(U"ABCde", 2, 4, U"abcde", 2, 4, -1);
5835    }
5836#endif
5837
5838#if TEST_STD_VER > 11
5839    {
5840    typedef std::basic_string_view<char, constexpr_char_traits<char>> SV;
5841    constexpr SV  sv1 { "abcde", 5 };
5842    static_assert ( sv1.compare(5, 1, "", 0, 0) == 0, "" );
5843    static_assert ( sv1.compare(2, 4, "", 0, 0) == 1, "" );
5844    static_assert ( sv1.compare(2, 4, "abcde", 3, 4) == -1, "" );
5845    }
5846#endif
5847}
5848