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
11// <string_view>
12
13// constexpr int compare(size_type pos1, size_type n1, basic_string_view str,
14//             size_type pos2, size_type n2) const;
15
16#include <experimental/string_view>
17#include <cassert>
18
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::experimental::basic_string_view<CharT> sv1, size_t pos1, size_t n1,
25             std::experimental::basic_string_view<CharT> sv2, size_t pos2, size_t n2,
26             int expected ) {
27
28    try
29    {
30        assert ( sign( sv1.compare(pos1, n1, sv2, pos2, n2)) == sign(expected));
31        assert(pos1 <= sv1.size());
32        assert(pos2 <= sv2.size());
33    }
34    catch (const std::out_of_range&) { assert(pos1 > sv1.size() || pos2 > sv2.size()); }
35}
36
37
38template<typename CharT>
39void test ( const CharT *s1, size_t pos1, size_t n1,
40            const CharT *s2, size_t pos2, size_t n2,
41            int expected ) {
42    typedef std::experimental::basic_string_view<CharT> string_view_t;
43
44    string_view_t sv1 ( s1 );
45    string_view_t sv2 ( s2 );
46    test1(sv1, pos1, n1, sv2, pos2, n2, expected);
47}
48
49void test0()
50{
51    test("", 0, 0, "", 0, 0, 0);
52    test("", 0, 0, "", 0, 1, 0);
53    test("", 0, 0, "", 1, 0, 0);
54    test("", 0, 0, "abcde", 0, 0, 0);
55    test("", 0, 0, "abcde", 0, 1, -1);
56    test("", 0, 0, "abcde", 0, 2, -2);
57    test("", 0, 0, "abcde", 0, 4, -4);
58    test("", 0, 0, "abcde", 0, 5, -5);
59    test("", 0, 0, "abcde", 0, 6, -5);
60    test("", 0, 0, "abcde", 1, 0, 0);
61    test("", 0, 0, "abcde", 1, 1, -1);
62    test("", 0, 0, "abcde", 1, 2, -2);
63    test("", 0, 0, "abcde", 1, 3, -3);
64    test("", 0, 0, "abcde", 1, 4, -4);
65    test("", 0, 0, "abcde", 1, 5, -4);
66    test("", 0, 0, "abcde", 2, 0, 0);
67    test("", 0, 0, "abcde", 2, 1, -1);
68    test("", 0, 0, "abcde", 2, 2, -2);
69    test("", 0, 0, "abcde", 2, 3, -3);
70    test("", 0, 0, "abcde", 2, 4, -3);
71    test("", 0, 0, "abcde", 4, 0, 0);
72    test("", 0, 0, "abcde", 4, 1, -1);
73    test("", 0, 0, "abcde", 4, 2, -1);
74    test("", 0, 0, "abcde", 5, 0, 0);
75    test("", 0, 0, "abcde", 5, 1, 0);
76    test("", 0, 0, "abcde", 6, 0, 0);
77    test("", 0, 0, "abcdefghij", 0, 0, 0);
78    test("", 0, 0, "abcdefghij", 0, 1, -1);
79    test("", 0, 0, "abcdefghij", 0, 5, -5);
80    test("", 0, 0, "abcdefghij", 0, 9, -9);
81    test("", 0, 0, "abcdefghij", 0, 10, -10);
82    test("", 0, 0, "abcdefghij", 0, 11, -10);
83    test("", 0, 0, "abcdefghij", 1, 0, 0);
84    test("", 0, 0, "abcdefghij", 1, 1, -1);
85    test("", 0, 0, "abcdefghij", 1, 4, -4);
86    test("", 0, 0, "abcdefghij", 1, 8, -8);
87    test("", 0, 0, "abcdefghij", 1, 9, -9);
88    test("", 0, 0, "abcdefghij", 1, 10, -9);
89    test("", 0, 0, "abcdefghij", 5, 0, 0);
90    test("", 0, 0, "abcdefghij", 5, 1, -1);
91    test("", 0, 0, "abcdefghij", 5, 2, -2);
92    test("", 0, 0, "abcdefghij", 5, 4, -4);
93    test("", 0, 0, "abcdefghij", 5, 5, -5);
94    test("", 0, 0, "abcdefghij", 5, 6, -5);
95    test("", 0, 0, "abcdefghij", 9, 0, 0);
96    test("", 0, 0, "abcdefghij", 9, 1, -1);
97    test("", 0, 0, "abcdefghij", 9, 2, -1);
98    test("", 0, 0, "abcdefghij", 10, 0, 0);
99    test("", 0, 0, "abcdefghij", 10, 1, 0);
100    test("", 0, 0, "abcdefghij", 11, 0, 0);
101    test("", 0, 0, "abcdefghijklmnopqrst", 0, 0, 0);
102    test("", 0, 0, "abcdefghijklmnopqrst", 0, 1, -1);
103    test("", 0, 0, "abcdefghijklmnopqrst", 0, 10, -10);
104    test("", 0, 0, "abcdefghijklmnopqrst", 0, 19, -19);
105    test("", 0, 0, "abcdefghijklmnopqrst", 0, 20, -20);
106    test("", 0, 0, "abcdefghijklmnopqrst", 0, 21, -20);
107    test("", 0, 0, "abcdefghijklmnopqrst", 1, 0, 0);
108    test("", 0, 0, "abcdefghijklmnopqrst", 1, 1, -1);
109    test("", 0, 0, "abcdefghijklmnopqrst", 1, 9, -9);
110    test("", 0, 0, "abcdefghijklmnopqrst", 1, 18, -18);
111    test("", 0, 0, "abcdefghijklmnopqrst", 1, 19, -19);
112    test("", 0, 0, "abcdefghijklmnopqrst", 1, 20, -19);
113    test("", 0, 0, "abcdefghijklmnopqrst", 10, 0, 0);
114    test("", 0, 0, "abcdefghijklmnopqrst", 10, 1, -1);
115    test("", 0, 0, "abcdefghijklmnopqrst", 10, 5, -5);
116    test("", 0, 0, "abcdefghijklmnopqrst", 10, 9, -9);
117    test("", 0, 0, "abcdefghijklmnopqrst", 10, 10, -10);
118    test("", 0, 0, "abcdefghijklmnopqrst", 10, 11, -10);
119    test("", 0, 0, "abcdefghijklmnopqrst", 19, 0, 0);
120    test("", 0, 0, "abcdefghijklmnopqrst", 19, 1, -1);
121    test("", 0, 0, "abcdefghijklmnopqrst", 19, 2, -1);
122    test("", 0, 0, "abcdefghijklmnopqrst", 20, 0, 0);
123    test("", 0, 0, "abcdefghijklmnopqrst", 20, 1, 0);
124    test("", 0, 0, "abcdefghijklmnopqrst", 21, 0, 0);
125    test("", 0, 1, "", 0, 0, 0);
126    test("", 0, 1, "", 0, 1, 0);
127    test("", 0, 1, "", 1, 0, 0);
128    test("", 0, 1, "abcde", 0, 0, 0);
129    test("", 0, 1, "abcde", 0, 1, -1);
130    test("", 0, 1, "abcde", 0, 2, -2);
131    test("", 0, 1, "abcde", 0, 4, -4);
132    test("", 0, 1, "abcde", 0, 5, -5);
133    test("", 0, 1, "abcde", 0, 6, -5);
134    test("", 0, 1, "abcde", 1, 0, 0);
135    test("", 0, 1, "abcde", 1, 1, -1);
136    test("", 0, 1, "abcde", 1, 2, -2);
137    test("", 0, 1, "abcde", 1, 3, -3);
138    test("", 0, 1, "abcde", 1, 4, -4);
139    test("", 0, 1, "abcde", 1, 5, -4);
140    test("", 0, 1, "abcde", 2, 0, 0);
141    test("", 0, 1, "abcde", 2, 1, -1);
142    test("", 0, 1, "abcde", 2, 2, -2);
143    test("", 0, 1, "abcde", 2, 3, -3);
144    test("", 0, 1, "abcde", 2, 4, -3);
145    test("", 0, 1, "abcde", 4, 0, 0);
146    test("", 0, 1, "abcde", 4, 1, -1);
147    test("", 0, 1, "abcde", 4, 2, -1);
148    test("", 0, 1, "abcde", 5, 0, 0);
149    test("", 0, 1, "abcde", 5, 1, 0);
150    test("", 0, 1, "abcde", 6, 0, 0);
151}
152
153void test1()
154{
155    test("", 0, 1, "abcdefghij", 0, 0, 0);
156    test("", 0, 1, "abcdefghij", 0, 1, -1);
157    test("", 0, 1, "abcdefghij", 0, 5, -5);
158    test("", 0, 1, "abcdefghij", 0, 9, -9);
159    test("", 0, 1, "abcdefghij", 0, 10, -10);
160    test("", 0, 1, "abcdefghij", 0, 11, -10);
161    test("", 0, 1, "abcdefghij", 1, 0, 0);
162    test("", 0, 1, "abcdefghij", 1, 1, -1);
163    test("", 0, 1, "abcdefghij", 1, 4, -4);
164    test("", 0, 1, "abcdefghij", 1, 8, -8);
165    test("", 0, 1, "abcdefghij", 1, 9, -9);
166    test("", 0, 1, "abcdefghij", 1, 10, -9);
167    test("", 0, 1, "abcdefghij", 5, 0, 0);
168    test("", 0, 1, "abcdefghij", 5, 1, -1);
169    test("", 0, 1, "abcdefghij", 5, 2, -2);
170    test("", 0, 1, "abcdefghij", 5, 4, -4);
171    test("", 0, 1, "abcdefghij", 5, 5, -5);
172    test("", 0, 1, "abcdefghij", 5, 6, -5);
173    test("", 0, 1, "abcdefghij", 9, 0, 0);
174    test("", 0, 1, "abcdefghij", 9, 1, -1);
175    test("", 0, 1, "abcdefghij", 9, 2, -1);
176    test("", 0, 1, "abcdefghij", 10, 0, 0);
177    test("", 0, 1, "abcdefghij", 10, 1, 0);
178    test("", 0, 1, "abcdefghij", 11, 0, 0);
179    test("", 0, 1, "abcdefghijklmnopqrst", 0, 0, 0);
180    test("", 0, 1, "abcdefghijklmnopqrst", 0, 1, -1);
181    test("", 0, 1, "abcdefghijklmnopqrst", 0, 10, -10);
182    test("", 0, 1, "abcdefghijklmnopqrst", 0, 19, -19);
183    test("", 0, 1, "abcdefghijklmnopqrst", 0, 20, -20);
184    test("", 0, 1, "abcdefghijklmnopqrst", 0, 21, -20);
185    test("", 0, 1, "abcdefghijklmnopqrst", 1, 0, 0);
186    test("", 0, 1, "abcdefghijklmnopqrst", 1, 1, -1);
187    test("", 0, 1, "abcdefghijklmnopqrst", 1, 9, -9);
188    test("", 0, 1, "abcdefghijklmnopqrst", 1, 18, -18);
189    test("", 0, 1, "abcdefghijklmnopqrst", 1, 19, -19);
190    test("", 0, 1, "abcdefghijklmnopqrst", 1, 20, -19);
191    test("", 0, 1, "abcdefghijklmnopqrst", 10, 0, 0);
192    test("", 0, 1, "abcdefghijklmnopqrst", 10, 1, -1);
193    test("", 0, 1, "abcdefghijklmnopqrst", 10, 5, -5);
194    test("", 0, 1, "abcdefghijklmnopqrst", 10, 9, -9);
195    test("", 0, 1, "abcdefghijklmnopqrst", 10, 10, -10);
196    test("", 0, 1, "abcdefghijklmnopqrst", 10, 11, -10);
197    test("", 0, 1, "abcdefghijklmnopqrst", 19, 0, 0);
198    test("", 0, 1, "abcdefghijklmnopqrst", 19, 1, -1);
199    test("", 0, 1, "abcdefghijklmnopqrst", 19, 2, -1);
200    test("", 0, 1, "abcdefghijklmnopqrst", 20, 0, 0);
201    test("", 0, 1, "abcdefghijklmnopqrst", 20, 1, 0);
202    test("", 0, 1, "abcdefghijklmnopqrst", 21, 0, 0);
203    test("", 1, 0, "", 0, 0, 0);
204    test("", 1, 0, "", 0, 1, 0);
205    test("", 1, 0, "", 1, 0, 0);
206    test("", 1, 0, "abcde", 0, 0, 0);
207    test("", 1, 0, "abcde", 0, 1, 0);
208    test("", 1, 0, "abcde", 0, 2, 0);
209    test("", 1, 0, "abcde", 0, 4, 0);
210    test("", 1, 0, "abcde", 0, 5, 0);
211    test("", 1, 0, "abcde", 0, 6, 0);
212    test("", 1, 0, "abcde", 1, 0, 0);
213    test("", 1, 0, "abcde", 1, 1, 0);
214    test("", 1, 0, "abcde", 1, 2, 0);
215    test("", 1, 0, "abcde", 1, 3, 0);
216    test("", 1, 0, "abcde", 1, 4, 0);
217    test("", 1, 0, "abcde", 1, 5, 0);
218    test("", 1, 0, "abcde", 2, 0, 0);
219    test("", 1, 0, "abcde", 2, 1, 0);
220    test("", 1, 0, "abcde", 2, 2, 0);
221    test("", 1, 0, "abcde", 2, 3, 0);
222    test("", 1, 0, "abcde", 2, 4, 0);
223    test("", 1, 0, "abcde", 4, 0, 0);
224    test("", 1, 0, "abcde", 4, 1, 0);
225    test("", 1, 0, "abcde", 4, 2, 0);
226    test("", 1, 0, "abcde", 5, 0, 0);
227    test("", 1, 0, "abcde", 5, 1, 0);
228    test("", 1, 0, "abcde", 6, 0, 0);
229    test("", 1, 0, "abcdefghij", 0, 0, 0);
230    test("", 1, 0, "abcdefghij", 0, 1, 0);
231    test("", 1, 0, "abcdefghij", 0, 5, 0);
232    test("", 1, 0, "abcdefghij", 0, 9, 0);
233    test("", 1, 0, "abcdefghij", 0, 10, 0);
234    test("", 1, 0, "abcdefghij", 0, 11, 0);
235    test("", 1, 0, "abcdefghij", 1, 0, 0);
236    test("", 1, 0, "abcdefghij", 1, 1, 0);
237    test("", 1, 0, "abcdefghij", 1, 4, 0);
238    test("", 1, 0, "abcdefghij", 1, 8, 0);
239    test("", 1, 0, "abcdefghij", 1, 9, 0);
240    test("", 1, 0, "abcdefghij", 1, 10, 0);
241    test("", 1, 0, "abcdefghij", 5, 0, 0);
242    test("", 1, 0, "abcdefghij", 5, 1, 0);
243    test("", 1, 0, "abcdefghij", 5, 2, 0);
244    test("", 1, 0, "abcdefghij", 5, 4, 0);
245    test("", 1, 0, "abcdefghij", 5, 5, 0);
246    test("", 1, 0, "abcdefghij", 5, 6, 0);
247    test("", 1, 0, "abcdefghij", 9, 0, 0);
248    test("", 1, 0, "abcdefghij", 9, 1, 0);
249    test("", 1, 0, "abcdefghij", 9, 2, 0);
250    test("", 1, 0, "abcdefghij", 10, 0, 0);
251    test("", 1, 0, "abcdefghij", 10, 1, 0);
252    test("", 1, 0, "abcdefghij", 11, 0, 0);
253    test("", 1, 0, "abcdefghijklmnopqrst", 0, 0, 0);
254    test("", 1, 0, "abcdefghijklmnopqrst", 0, 1, 0);
255}
256
257void test2()
258{
259    test("", 1, 0, "abcdefghijklmnopqrst", 0, 10, 0);
260    test("", 1, 0, "abcdefghijklmnopqrst", 0, 19, 0);
261    test("", 1, 0, "abcdefghijklmnopqrst", 0, 20, 0);
262    test("", 1, 0, "abcdefghijklmnopqrst", 0, 21, 0);
263    test("", 1, 0, "abcdefghijklmnopqrst", 1, 0, 0);
264    test("", 1, 0, "abcdefghijklmnopqrst", 1, 1, 0);
265    test("", 1, 0, "abcdefghijklmnopqrst", 1, 9, 0);
266    test("", 1, 0, "abcdefghijklmnopqrst", 1, 18, 0);
267    test("", 1, 0, "abcdefghijklmnopqrst", 1, 19, 0);
268    test("", 1, 0, "abcdefghijklmnopqrst", 1, 20, 0);
269    test("", 1, 0, "abcdefghijklmnopqrst", 10, 0, 0);
270    test("", 1, 0, "abcdefghijklmnopqrst", 10, 1, 0);
271    test("", 1, 0, "abcdefghijklmnopqrst", 10, 5, 0);
272    test("", 1, 0, "abcdefghijklmnopqrst", 10, 9, 0);
273    test("", 1, 0, "abcdefghijklmnopqrst", 10, 10, 0);
274    test("", 1, 0, "abcdefghijklmnopqrst", 10, 11, 0);
275    test("", 1, 0, "abcdefghijklmnopqrst", 19, 0, 0);
276    test("", 1, 0, "abcdefghijklmnopqrst", 19, 1, 0);
277    test("", 1, 0, "abcdefghijklmnopqrst", 19, 2, 0);
278    test("", 1, 0, "abcdefghijklmnopqrst", 20, 0, 0);
279    test("", 1, 0, "abcdefghijklmnopqrst", 20, 1, 0);
280    test("", 1, 0, "abcdefghijklmnopqrst", 21, 0, 0);
281    test("abcde", 0, 0, "", 0, 0, 0);
282    test("abcde", 0, 0, "", 0, 1, 0);
283    test("abcde", 0, 0, "", 1, 0, 0);
284    test("abcde", 0, 0, "abcde", 0, 0, 0);
285    test("abcde", 0, 0, "abcde", 0, 1, -1);
286    test("abcde", 0, 0, "abcde", 0, 2, -2);
287    test("abcde", 0, 0, "abcde", 0, 4, -4);
288    test("abcde", 0, 0, "abcde", 0, 5, -5);
289    test("abcde", 0, 0, "abcde", 0, 6, -5);
290    test("abcde", 0, 0, "abcde", 1, 0, 0);
291    test("abcde", 0, 0, "abcde", 1, 1, -1);
292    test("abcde", 0, 0, "abcde", 1, 2, -2);
293    test("abcde", 0, 0, "abcde", 1, 3, -3);
294    test("abcde", 0, 0, "abcde", 1, 4, -4);
295    test("abcde", 0, 0, "abcde", 1, 5, -4);
296    test("abcde", 0, 0, "abcde", 2, 0, 0);
297    test("abcde", 0, 0, "abcde", 2, 1, -1);
298    test("abcde", 0, 0, "abcde", 2, 2, -2);
299    test("abcde", 0, 0, "abcde", 2, 3, -3);
300    test("abcde", 0, 0, "abcde", 2, 4, -3);
301    test("abcde", 0, 0, "abcde", 4, 0, 0);
302    test("abcde", 0, 0, "abcde", 4, 1, -1);
303    test("abcde", 0, 0, "abcde", 4, 2, -1);
304    test("abcde", 0, 0, "abcde", 5, 0, 0);
305    test("abcde", 0, 0, "abcde", 5, 1, 0);
306    test("abcde", 0, 0, "abcde", 6, 0, 0);
307    test("abcde", 0, 0, "abcdefghij", 0, 0, 0);
308    test("abcde", 0, 0, "abcdefghij", 0, 1, -1);
309    test("abcde", 0, 0, "abcdefghij", 0, 5, -5);
310    test("abcde", 0, 0, "abcdefghij", 0, 9, -9);
311    test("abcde", 0, 0, "abcdefghij", 0, 10, -10);
312    test("abcde", 0, 0, "abcdefghij", 0, 11, -10);
313    test("abcde", 0, 0, "abcdefghij", 1, 0, 0);
314    test("abcde", 0, 0, "abcdefghij", 1, 1, -1);
315    test("abcde", 0, 0, "abcdefghij", 1, 4, -4);
316    test("abcde", 0, 0, "abcdefghij", 1, 8, -8);
317    test("abcde", 0, 0, "abcdefghij", 1, 9, -9);
318    test("abcde", 0, 0, "abcdefghij", 1, 10, -9);
319    test("abcde", 0, 0, "abcdefghij", 5, 0, 0);
320    test("abcde", 0, 0, "abcdefghij", 5, 1, -1);
321    test("abcde", 0, 0, "abcdefghij", 5, 2, -2);
322    test("abcde", 0, 0, "abcdefghij", 5, 4, -4);
323    test("abcde", 0, 0, "abcdefghij", 5, 5, -5);
324    test("abcde", 0, 0, "abcdefghij", 5, 6, -5);
325    test("abcde", 0, 0, "abcdefghij", 9, 0, 0);
326    test("abcde", 0, 0, "abcdefghij", 9, 1, -1);
327    test("abcde", 0, 0, "abcdefghij", 9, 2, -1);
328    test("abcde", 0, 0, "abcdefghij", 10, 0, 0);
329    test("abcde", 0, 0, "abcdefghij", 10, 1, 0);
330    test("abcde", 0, 0, "abcdefghij", 11, 0, 0);
331    test("abcde", 0, 0, "abcdefghijklmnopqrst", 0, 0, 0);
332    test("abcde", 0, 0, "abcdefghijklmnopqrst", 0, 1, -1);
333    test("abcde", 0, 0, "abcdefghijklmnopqrst", 0, 10, -10);
334    test("abcde", 0, 0, "abcdefghijklmnopqrst", 0, 19, -19);
335    test("abcde", 0, 0, "abcdefghijklmnopqrst", 0, 20, -20);
336    test("abcde", 0, 0, "abcdefghijklmnopqrst", 0, 21, -20);
337    test("abcde", 0, 0, "abcdefghijklmnopqrst", 1, 0, 0);
338    test("abcde", 0, 0, "abcdefghijklmnopqrst", 1, 1, -1);
339    test("abcde", 0, 0, "abcdefghijklmnopqrst", 1, 9, -9);
340    test("abcde", 0, 0, "abcdefghijklmnopqrst", 1, 18, -18);
341    test("abcde", 0, 0, "abcdefghijklmnopqrst", 1, 19, -19);
342    test("abcde", 0, 0, "abcdefghijklmnopqrst", 1, 20, -19);
343    test("abcde", 0, 0, "abcdefghijklmnopqrst", 10, 0, 0);
344    test("abcde", 0, 0, "abcdefghijklmnopqrst", 10, 1, -1);
345    test("abcde", 0, 0, "abcdefghijklmnopqrst", 10, 5, -5);
346    test("abcde", 0, 0, "abcdefghijklmnopqrst", 10, 9, -9);
347    test("abcde", 0, 0, "abcdefghijklmnopqrst", 10, 10, -10);
348    test("abcde", 0, 0, "abcdefghijklmnopqrst", 10, 11, -10);
349    test("abcde", 0, 0, "abcdefghijklmnopqrst", 19, 0, 0);
350    test("abcde", 0, 0, "abcdefghijklmnopqrst", 19, 1, -1);
351    test("abcde", 0, 0, "abcdefghijklmnopqrst", 19, 2, -1);
352    test("abcde", 0, 0, "abcdefghijklmnopqrst", 20, 0, 0);
353    test("abcde", 0, 0, "abcdefghijklmnopqrst", 20, 1, 0);
354    test("abcde", 0, 0, "abcdefghijklmnopqrst", 21, 0, 0);
355    test("abcde", 0, 1, "", 0, 0, 1);
356    test("abcde", 0, 1, "", 0, 1, 1);
357    test("abcde", 0, 1, "", 1, 0, 0);
358    test("abcde", 0, 1, "abcde", 0, 0, 1);
359}
360
361void test3()
362{
363    test("abcde", 0, 1, "abcde", 0, 1, 0);
364    test("abcde", 0, 1, "abcde", 0, 2, -1);
365    test("abcde", 0, 1, "abcde", 0, 4, -3);
366    test("abcde", 0, 1, "abcde", 0, 5, -4);
367    test("abcde", 0, 1, "abcde", 0, 6, -4);
368    test("abcde", 0, 1, "abcde", 1, 0, 1);
369    test("abcde", 0, 1, "abcde", 1, 1, -1);
370    test("abcde", 0, 1, "abcde", 1, 2, -1);
371    test("abcde", 0, 1, "abcde", 1, 3, -1);
372    test("abcde", 0, 1, "abcde", 1, 4, -1);
373    test("abcde", 0, 1, "abcde", 1, 5, -1);
374    test("abcde", 0, 1, "abcde", 2, 0, 1);
375    test("abcde", 0, 1, "abcde", 2, 1, -2);
376    test("abcde", 0, 1, "abcde", 2, 2, -2);
377    test("abcde", 0, 1, "abcde", 2, 3, -2);
378    test("abcde", 0, 1, "abcde", 2, 4, -2);
379    test("abcde", 0, 1, "abcde", 4, 0, 1);
380    test("abcde", 0, 1, "abcde", 4, 1, -4);
381    test("abcde", 0, 1, "abcde", 4, 2, -4);
382    test("abcde", 0, 1, "abcde", 5, 0, 1);
383    test("abcde", 0, 1, "abcde", 5, 1, 1);
384    test("abcde", 0, 1, "abcde", 6, 0, 0);
385    test("abcde", 0, 1, "abcdefghij", 0, 0, 1);
386    test("abcde", 0, 1, "abcdefghij", 0, 1, 0);
387    test("abcde", 0, 1, "abcdefghij", 0, 5, -4);
388    test("abcde", 0, 1, "abcdefghij", 0, 9, -8);
389    test("abcde", 0, 1, "abcdefghij", 0, 10, -9);
390    test("abcde", 0, 1, "abcdefghij", 0, 11, -9);
391    test("abcde", 0, 1, "abcdefghij", 1, 0, 1);
392    test("abcde", 0, 1, "abcdefghij", 1, 1, -1);
393    test("abcde", 0, 1, "abcdefghij", 1, 4, -1);
394    test("abcde", 0, 1, "abcdefghij", 1, 8, -1);
395    test("abcde", 0, 1, "abcdefghij", 1, 9, -1);
396    test("abcde", 0, 1, "abcdefghij", 1, 10, -1);
397    test("abcde", 0, 1, "abcdefghij", 5, 0, 1);
398    test("abcde", 0, 1, "abcdefghij", 5, 1, -5);
399    test("abcde", 0, 1, "abcdefghij", 5, 2, -5);
400    test("abcde", 0, 1, "abcdefghij", 5, 4, -5);
401    test("abcde", 0, 1, "abcdefghij", 5, 5, -5);
402    test("abcde", 0, 1, "abcdefghij", 5, 6, -5);
403    test("abcde", 0, 1, "abcdefghij", 9, 0, 1);
404    test("abcde", 0, 1, "abcdefghij", 9, 1, -9);
405    test("abcde", 0, 1, "abcdefghij", 9, 2, -9);
406    test("abcde", 0, 1, "abcdefghij", 10, 0, 1);
407    test("abcde", 0, 1, "abcdefghij", 10, 1, 1);
408    test("abcde", 0, 1, "abcdefghij", 11, 0, 0);
409    test("abcde", 0, 1, "abcdefghijklmnopqrst", 0, 0, 1);
410    test("abcde", 0, 1, "abcdefghijklmnopqrst", 0, 1, 0);
411    test("abcde", 0, 1, "abcdefghijklmnopqrst", 0, 10, -9);
412    test("abcde", 0, 1, "abcdefghijklmnopqrst", 0, 19, -18);
413    test("abcde", 0, 1, "abcdefghijklmnopqrst", 0, 20, -19);
414    test("abcde", 0, 1, "abcdefghijklmnopqrst", 0, 21, -19);
415    test("abcde", 0, 1, "abcdefghijklmnopqrst", 1, 0, 1);
416    test("abcde", 0, 1, "abcdefghijklmnopqrst", 1, 1, -1);
417    test("abcde", 0, 1, "abcdefghijklmnopqrst", 1, 9, -1);
418    test("abcde", 0, 1, "abcdefghijklmnopqrst", 1, 18, -1);
419    test("abcde", 0, 1, "abcdefghijklmnopqrst", 1, 19, -1);
420    test("abcde", 0, 1, "abcdefghijklmnopqrst", 1, 20, -1);
421    test("abcde", 0, 1, "abcdefghijklmnopqrst", 10, 0, 1);
422    test("abcde", 0, 1, "abcdefghijklmnopqrst", 10, 1, -10);
423    test("abcde", 0, 1, "abcdefghijklmnopqrst", 10, 5, -10);
424    test("abcde", 0, 1, "abcdefghijklmnopqrst", 10, 9, -10);
425    test("abcde", 0, 1, "abcdefghijklmnopqrst", 10, 10, -10);
426    test("abcde", 0, 1, "abcdefghijklmnopqrst", 10, 11, -10);
427    test("abcde", 0, 1, "abcdefghijklmnopqrst", 19, 0, 1);
428    test("abcde", 0, 1, "abcdefghijklmnopqrst", 19, 1, -19);
429    test("abcde", 0, 1, "abcdefghijklmnopqrst", 19, 2, -19);
430    test("abcde", 0, 1, "abcdefghijklmnopqrst", 20, 0, 1);
431    test("abcde", 0, 1, "abcdefghijklmnopqrst", 20, 1, 1);
432    test("abcde", 0, 1, "abcdefghijklmnopqrst", 21, 0, 0);
433    test("abcde", 0, 2, "", 0, 0, 2);
434    test("abcde", 0, 2, "", 0, 1, 2);
435    test("abcde", 0, 2, "", 1, 0, 0);
436    test("abcde", 0, 2, "abcde", 0, 0, 2);
437    test("abcde", 0, 2, "abcde", 0, 1, 1);
438    test("abcde", 0, 2, "abcde", 0, 2, 0);
439    test("abcde", 0, 2, "abcde", 0, 4, -2);
440    test("abcde", 0, 2, "abcde", 0, 5, -3);
441    test("abcde", 0, 2, "abcde", 0, 6, -3);
442    test("abcde", 0, 2, "abcde", 1, 0, 2);
443    test("abcde", 0, 2, "abcde", 1, 1, -1);
444    test("abcde", 0, 2, "abcde", 1, 2, -1);
445    test("abcde", 0, 2, "abcde", 1, 3, -1);
446    test("abcde", 0, 2, "abcde", 1, 4, -1);
447    test("abcde", 0, 2, "abcde", 1, 5, -1);
448    test("abcde", 0, 2, "abcde", 2, 0, 2);
449    test("abcde", 0, 2, "abcde", 2, 1, -2);
450    test("abcde", 0, 2, "abcde", 2, 2, -2);
451    test("abcde", 0, 2, "abcde", 2, 3, -2);
452    test("abcde", 0, 2, "abcde", 2, 4, -2);
453    test("abcde", 0, 2, "abcde", 4, 0, 2);
454    test("abcde", 0, 2, "abcde", 4, 1, -4);
455    test("abcde", 0, 2, "abcde", 4, 2, -4);
456    test("abcde", 0, 2, "abcde", 5, 0, 2);
457    test("abcde", 0, 2, "abcde", 5, 1, 2);
458    test("abcde", 0, 2, "abcde", 6, 0, 0);
459    test("abcde", 0, 2, "abcdefghij", 0, 0, 2);
460    test("abcde", 0, 2, "abcdefghij", 0, 1, 1);
461    test("abcde", 0, 2, "abcdefghij", 0, 5, -3);
462    test("abcde", 0, 2, "abcdefghij", 0, 9, -7);
463}
464
465void test4()
466{
467    test("abcde", 0, 2, "abcdefghij", 0, 10, -8);
468    test("abcde", 0, 2, "abcdefghij", 0, 11, -8);
469    test("abcde", 0, 2, "abcdefghij", 1, 0, 2);
470    test("abcde", 0, 2, "abcdefghij", 1, 1, -1);
471    test("abcde", 0, 2, "abcdefghij", 1, 4, -1);
472    test("abcde", 0, 2, "abcdefghij", 1, 8, -1);
473    test("abcde", 0, 2, "abcdefghij", 1, 9, -1);
474    test("abcde", 0, 2, "abcdefghij", 1, 10, -1);
475    test("abcde", 0, 2, "abcdefghij", 5, 0, 2);
476    test("abcde", 0, 2, "abcdefghij", 5, 1, -5);
477    test("abcde", 0, 2, "abcdefghij", 5, 2, -5);
478    test("abcde", 0, 2, "abcdefghij", 5, 4, -5);
479    test("abcde", 0, 2, "abcdefghij", 5, 5, -5);
480    test("abcde", 0, 2, "abcdefghij", 5, 6, -5);
481    test("abcde", 0, 2, "abcdefghij", 9, 0, 2);
482    test("abcde", 0, 2, "abcdefghij", 9, 1, -9);
483    test("abcde", 0, 2, "abcdefghij", 9, 2, -9);
484    test("abcde", 0, 2, "abcdefghij", 10, 0, 2);
485    test("abcde", 0, 2, "abcdefghij", 10, 1, 2);
486    test("abcde", 0, 2, "abcdefghij", 11, 0, 0);
487    test("abcde", 0, 2, "abcdefghijklmnopqrst", 0, 0, 2);
488    test("abcde", 0, 2, "abcdefghijklmnopqrst", 0, 1, 1);
489    test("abcde", 0, 2, "abcdefghijklmnopqrst", 0, 10, -8);
490    test("abcde", 0, 2, "abcdefghijklmnopqrst", 0, 19, -17);
491    test("abcde", 0, 2, "abcdefghijklmnopqrst", 0, 20, -18);
492    test("abcde", 0, 2, "abcdefghijklmnopqrst", 0, 21, -18);
493    test("abcde", 0, 2, "abcdefghijklmnopqrst", 1, 0, 2);
494    test("abcde", 0, 2, "abcdefghijklmnopqrst", 1, 1, -1);
495    test("abcde", 0, 2, "abcdefghijklmnopqrst", 1, 9, -1);
496    test("abcde", 0, 2, "abcdefghijklmnopqrst", 1, 18, -1);
497    test("abcde", 0, 2, "abcdefghijklmnopqrst", 1, 19, -1);
498    test("abcde", 0, 2, "abcdefghijklmnopqrst", 1, 20, -1);
499    test("abcde", 0, 2, "abcdefghijklmnopqrst", 10, 0, 2);
500    test("abcde", 0, 2, "abcdefghijklmnopqrst", 10, 1, -10);
501    test("abcde", 0, 2, "abcdefghijklmnopqrst", 10, 5, -10);
502    test("abcde", 0, 2, "abcdefghijklmnopqrst", 10, 9, -10);
503    test("abcde", 0, 2, "abcdefghijklmnopqrst", 10, 10, -10);
504    test("abcde", 0, 2, "abcdefghijklmnopqrst", 10, 11, -10);
505    test("abcde", 0, 2, "abcdefghijklmnopqrst", 19, 0, 2);
506    test("abcde", 0, 2, "abcdefghijklmnopqrst", 19, 1, -19);
507    test("abcde", 0, 2, "abcdefghijklmnopqrst", 19, 2, -19);
508    test("abcde", 0, 2, "abcdefghijklmnopqrst", 20, 0, 2);
509    test("abcde", 0, 2, "abcdefghijklmnopqrst", 20, 1, 2);
510    test("abcde", 0, 2, "abcdefghijklmnopqrst", 21, 0, 0);
511    test("abcde", 0, 4, "", 0, 0, 4);
512    test("abcde", 0, 4, "", 0, 1, 4);
513    test("abcde", 0, 4, "", 1, 0, 0);
514    test("abcde", 0, 4, "abcde", 0, 0, 4);
515    test("abcde", 0, 4, "abcde", 0, 1, 3);
516    test("abcde", 0, 4, "abcde", 0, 2, 2);
517    test("abcde", 0, 4, "abcde", 0, 4, 0);
518    test("abcde", 0, 4, "abcde", 0, 5, -1);
519    test("abcde", 0, 4, "abcde", 0, 6, -1);
520    test("abcde", 0, 4, "abcde", 1, 0, 4);
521    test("abcde", 0, 4, "abcde", 1, 1, -1);
522    test("abcde", 0, 4, "abcde", 1, 2, -1);
523    test("abcde", 0, 4, "abcde", 1, 3, -1);
524    test("abcde", 0, 4, "abcde", 1, 4, -1);
525    test("abcde", 0, 4, "abcde", 1, 5, -1);
526    test("abcde", 0, 4, "abcde", 2, 0, 4);
527    test("abcde", 0, 4, "abcde", 2, 1, -2);
528    test("abcde", 0, 4, "abcde", 2, 2, -2);
529    test("abcde", 0, 4, "abcde", 2, 3, -2);
530    test("abcde", 0, 4, "abcde", 2, 4, -2);
531    test("abcde", 0, 4, "abcde", 4, 0, 4);
532    test("abcde", 0, 4, "abcde", 4, 1, -4);
533    test("abcde", 0, 4, "abcde", 4, 2, -4);
534    test("abcde", 0, 4, "abcde", 5, 0, 4);
535    test("abcde", 0, 4, "abcde", 5, 1, 4);
536    test("abcde", 0, 4, "abcde", 6, 0, 0);
537    test("abcde", 0, 4, "abcdefghij", 0, 0, 4);
538    test("abcde", 0, 4, "abcdefghij", 0, 1, 3);
539    test("abcde", 0, 4, "abcdefghij", 0, 5, -1);
540    test("abcde", 0, 4, "abcdefghij", 0, 9, -5);
541    test("abcde", 0, 4, "abcdefghij", 0, 10, -6);
542    test("abcde", 0, 4, "abcdefghij", 0, 11, -6);
543    test("abcde", 0, 4, "abcdefghij", 1, 0, 4);
544    test("abcde", 0, 4, "abcdefghij", 1, 1, -1);
545    test("abcde", 0, 4, "abcdefghij", 1, 4, -1);
546    test("abcde", 0, 4, "abcdefghij", 1, 8, -1);
547    test("abcde", 0, 4, "abcdefghij", 1, 9, -1);
548    test("abcde", 0, 4, "abcdefghij", 1, 10, -1);
549    test("abcde", 0, 4, "abcdefghij", 5, 0, 4);
550    test("abcde", 0, 4, "abcdefghij", 5, 1, -5);
551    test("abcde", 0, 4, "abcdefghij", 5, 2, -5);
552    test("abcde", 0, 4, "abcdefghij", 5, 4, -5);
553    test("abcde", 0, 4, "abcdefghij", 5, 5, -5);
554    test("abcde", 0, 4, "abcdefghij", 5, 6, -5);
555    test("abcde", 0, 4, "abcdefghij", 9, 0, 4);
556    test("abcde", 0, 4, "abcdefghij", 9, 1, -9);
557    test("abcde", 0, 4, "abcdefghij", 9, 2, -9);
558    test("abcde", 0, 4, "abcdefghij", 10, 0, 4);
559    test("abcde", 0, 4, "abcdefghij", 10, 1, 4);
560    test("abcde", 0, 4, "abcdefghij", 11, 0, 0);
561    test("abcde", 0, 4, "abcdefghijklmnopqrst", 0, 0, 4);
562    test("abcde", 0, 4, "abcdefghijklmnopqrst", 0, 1, 3);
563    test("abcde", 0, 4, "abcdefghijklmnopqrst", 0, 10, -6);
564    test("abcde", 0, 4, "abcdefghijklmnopqrst", 0, 19, -15);
565    test("abcde", 0, 4, "abcdefghijklmnopqrst", 0, 20, -16);
566    test("abcde", 0, 4, "abcdefghijklmnopqrst", 0, 21, -16);
567}
568
569void test5()
570{
571    test("abcde", 0, 4, "abcdefghijklmnopqrst", 1, 0, 4);
572    test("abcde", 0, 4, "abcdefghijklmnopqrst", 1, 1, -1);
573    test("abcde", 0, 4, "abcdefghijklmnopqrst", 1, 9, -1);
574    test("abcde", 0, 4, "abcdefghijklmnopqrst", 1, 18, -1);
575    test("abcde", 0, 4, "abcdefghijklmnopqrst", 1, 19, -1);
576    test("abcde", 0, 4, "abcdefghijklmnopqrst", 1, 20, -1);
577    test("abcde", 0, 4, "abcdefghijklmnopqrst", 10, 0, 4);
578    test("abcde", 0, 4, "abcdefghijklmnopqrst", 10, 1, -10);
579    test("abcde", 0, 4, "abcdefghijklmnopqrst", 10, 5, -10);
580    test("abcde", 0, 4, "abcdefghijklmnopqrst", 10, 9, -10);
581    test("abcde", 0, 4, "abcdefghijklmnopqrst", 10, 10, -10);
582    test("abcde", 0, 4, "abcdefghijklmnopqrst", 10, 11, -10);
583    test("abcde", 0, 4, "abcdefghijklmnopqrst", 19, 0, 4);
584    test("abcde", 0, 4, "abcdefghijklmnopqrst", 19, 1, -19);
585    test("abcde", 0, 4, "abcdefghijklmnopqrst", 19, 2, -19);
586    test("abcde", 0, 4, "abcdefghijklmnopqrst", 20, 0, 4);
587    test("abcde", 0, 4, "abcdefghijklmnopqrst", 20, 1, 4);
588    test("abcde", 0, 4, "abcdefghijklmnopqrst", 21, 0, 0);
589    test("abcde", 0, 5, "", 0, 0, 5);
590    test("abcde", 0, 5, "", 0, 1, 5);
591    test("abcde", 0, 5, "", 1, 0, 0);
592    test("abcde", 0, 5, "abcde", 0, 0, 5);
593    test("abcde", 0, 5, "abcde", 0, 1, 4);
594    test("abcde", 0, 5, "abcde", 0, 2, 3);
595    test("abcde", 0, 5, "abcde", 0, 4, 1);
596    test("abcde", 0, 5, "abcde", 0, 5, 0);
597    test("abcde", 0, 5, "abcde", 0, 6, 0);
598    test("abcde", 0, 5, "abcde", 1, 0, 5);
599    test("abcde", 0, 5, "abcde", 1, 1, -1);
600    test("abcde", 0, 5, "abcde", 1, 2, -1);
601    test("abcde", 0, 5, "abcde", 1, 3, -1);
602    test("abcde", 0, 5, "abcde", 1, 4, -1);
603    test("abcde", 0, 5, "abcde", 1, 5, -1);
604    test("abcde", 0, 5, "abcde", 2, 0, 5);
605    test("abcde", 0, 5, "abcde", 2, 1, -2);
606    test("abcde", 0, 5, "abcde", 2, 2, -2);
607    test("abcde", 0, 5, "abcde", 2, 3, -2);
608    test("abcde", 0, 5, "abcde", 2, 4, -2);
609    test("abcde", 0, 5, "abcde", 4, 0, 5);
610    test("abcde", 0, 5, "abcde", 4, 1, -4);
611    test("abcde", 0, 5, "abcde", 4, 2, -4);
612    test("abcde", 0, 5, "abcde", 5, 0, 5);
613    test("abcde", 0, 5, "abcde", 5, 1, 5);
614    test("abcde", 0, 5, "abcde", 6, 0, 0);
615    test("abcde", 0, 5, "abcdefghij", 0, 0, 5);
616    test("abcde", 0, 5, "abcdefghij", 0, 1, 4);
617    test("abcde", 0, 5, "abcdefghij", 0, 5, 0);
618    test("abcde", 0, 5, "abcdefghij", 0, 9, -4);
619    test("abcde", 0, 5, "abcdefghij", 0, 10, -5);
620    test("abcde", 0, 5, "abcdefghij", 0, 11, -5);
621    test("abcde", 0, 5, "abcdefghij", 1, 0, 5);
622    test("abcde", 0, 5, "abcdefghij", 1, 1, -1);
623    test("abcde", 0, 5, "abcdefghij", 1, 4, -1);
624    test("abcde", 0, 5, "abcdefghij", 1, 8, -1);
625    test("abcde", 0, 5, "abcdefghij", 1, 9, -1);
626    test("abcde", 0, 5, "abcdefghij", 1, 10, -1);
627    test("abcde", 0, 5, "abcdefghij", 5, 0, 5);
628    test("abcde", 0, 5, "abcdefghij", 5, 1, -5);
629    test("abcde", 0, 5, "abcdefghij", 5, 2, -5);
630    test("abcde", 0, 5, "abcdefghij", 5, 4, -5);
631    test("abcde", 0, 5, "abcdefghij", 5, 5, -5);
632    test("abcde", 0, 5, "abcdefghij", 5, 6, -5);
633    test("abcde", 0, 5, "abcdefghij", 9, 0, 5);
634    test("abcde", 0, 5, "abcdefghij", 9, 1, -9);
635    test("abcde", 0, 5, "abcdefghij", 9, 2, -9);
636    test("abcde", 0, 5, "abcdefghij", 10, 0, 5);
637    test("abcde", 0, 5, "abcdefghij", 10, 1, 5);
638    test("abcde", 0, 5, "abcdefghij", 11, 0, 0);
639    test("abcde", 0, 5, "abcdefghijklmnopqrst", 0, 0, 5);
640    test("abcde", 0, 5, "abcdefghijklmnopqrst", 0, 1, 4);
641    test("abcde", 0, 5, "abcdefghijklmnopqrst", 0, 10, -5);
642    test("abcde", 0, 5, "abcdefghijklmnopqrst", 0, 19, -14);
643    test("abcde", 0, 5, "abcdefghijklmnopqrst", 0, 20, -15);
644    test("abcde", 0, 5, "abcdefghijklmnopqrst", 0, 21, -15);
645    test("abcde", 0, 5, "abcdefghijklmnopqrst", 1, 0, 5);
646    test("abcde", 0, 5, "abcdefghijklmnopqrst", 1, 1, -1);
647    test("abcde", 0, 5, "abcdefghijklmnopqrst", 1, 9, -1);
648    test("abcde", 0, 5, "abcdefghijklmnopqrst", 1, 18, -1);
649    test("abcde", 0, 5, "abcdefghijklmnopqrst", 1, 19, -1);
650    test("abcde", 0, 5, "abcdefghijklmnopqrst", 1, 20, -1);
651    test("abcde", 0, 5, "abcdefghijklmnopqrst", 10, 0, 5);
652    test("abcde", 0, 5, "abcdefghijklmnopqrst", 10, 1, -10);
653    test("abcde", 0, 5, "abcdefghijklmnopqrst", 10, 5, -10);
654    test("abcde", 0, 5, "abcdefghijklmnopqrst", 10, 9, -10);
655    test("abcde", 0, 5, "abcdefghijklmnopqrst", 10, 10, -10);
656    test("abcde", 0, 5, "abcdefghijklmnopqrst", 10, 11, -10);
657    test("abcde", 0, 5, "abcdefghijklmnopqrst", 19, 0, 5);
658    test("abcde", 0, 5, "abcdefghijklmnopqrst", 19, 1, -19);
659    test("abcde", 0, 5, "abcdefghijklmnopqrst", 19, 2, -19);
660    test("abcde", 0, 5, "abcdefghijklmnopqrst", 20, 0, 5);
661    test("abcde", 0, 5, "abcdefghijklmnopqrst", 20, 1, 5);
662    test("abcde", 0, 5, "abcdefghijklmnopqrst", 21, 0, 0);
663    test("abcde", 0, 6, "", 0, 0, 5);
664    test("abcde", 0, 6, "", 0, 1, 5);
665    test("abcde", 0, 6, "", 1, 0, 0);
666    test("abcde", 0, 6, "abcde", 0, 0, 5);
667    test("abcde", 0, 6, "abcde", 0, 1, 4);
668    test("abcde", 0, 6, "abcde", 0, 2, 3);
669    test("abcde", 0, 6, "abcde", 0, 4, 1);
670    test("abcde", 0, 6, "abcde", 0, 5, 0);
671}
672
673void test6()
674{
675    test("abcde", 0, 6, "abcde", 0, 6, 0);
676    test("abcde", 0, 6, "abcde", 1, 0, 5);
677    test("abcde", 0, 6, "abcde", 1, 1, -1);
678    test("abcde", 0, 6, "abcde", 1, 2, -1);
679    test("abcde", 0, 6, "abcde", 1, 3, -1);
680    test("abcde", 0, 6, "abcde", 1, 4, -1);
681    test("abcde", 0, 6, "abcde", 1, 5, -1);
682    test("abcde", 0, 6, "abcde", 2, 0, 5);
683    test("abcde", 0, 6, "abcde", 2, 1, -2);
684    test("abcde", 0, 6, "abcde", 2, 2, -2);
685    test("abcde", 0, 6, "abcde", 2, 3, -2);
686    test("abcde", 0, 6, "abcde", 2, 4, -2);
687    test("abcde", 0, 6, "abcde", 4, 0, 5);
688    test("abcde", 0, 6, "abcde", 4, 1, -4);
689    test("abcde", 0, 6, "abcde", 4, 2, -4);
690    test("abcde", 0, 6, "abcde", 5, 0, 5);
691    test("abcde", 0, 6, "abcde", 5, 1, 5);
692    test("abcde", 0, 6, "abcde", 6, 0, 0);
693    test("abcde", 0, 6, "abcdefghij", 0, 0, 5);
694    test("abcde", 0, 6, "abcdefghij", 0, 1, 4);
695    test("abcde", 0, 6, "abcdefghij", 0, 5, 0);
696    test("abcde", 0, 6, "abcdefghij", 0, 9, -4);
697    test("abcde", 0, 6, "abcdefghij", 0, 10, -5);
698    test("abcde", 0, 6, "abcdefghij", 0, 11, -5);
699    test("abcde", 0, 6, "abcdefghij", 1, 0, 5);
700    test("abcde", 0, 6, "abcdefghij", 1, 1, -1);
701    test("abcde", 0, 6, "abcdefghij", 1, 4, -1);
702    test("abcde", 0, 6, "abcdefghij", 1, 8, -1);
703    test("abcde", 0, 6, "abcdefghij", 1, 9, -1);
704    test("abcde", 0, 6, "abcdefghij", 1, 10, -1);
705    test("abcde", 0, 6, "abcdefghij", 5, 0, 5);
706    test("abcde", 0, 6, "abcdefghij", 5, 1, -5);
707    test("abcde", 0, 6, "abcdefghij", 5, 2, -5);
708    test("abcde", 0, 6, "abcdefghij", 5, 4, -5);
709    test("abcde", 0, 6, "abcdefghij", 5, 5, -5);
710    test("abcde", 0, 6, "abcdefghij", 5, 6, -5);
711    test("abcde", 0, 6, "abcdefghij", 9, 0, 5);
712    test("abcde", 0, 6, "abcdefghij", 9, 1, -9);
713    test("abcde", 0, 6, "abcdefghij", 9, 2, -9);
714    test("abcde", 0, 6, "abcdefghij", 10, 0, 5);
715    test("abcde", 0, 6, "abcdefghij", 10, 1, 5);
716    test("abcde", 0, 6, "abcdefghij", 11, 0, 0);
717    test("abcde", 0, 6, "abcdefghijklmnopqrst", 0, 0, 5);
718    test("abcde", 0, 6, "abcdefghijklmnopqrst", 0, 1, 4);
719    test("abcde", 0, 6, "abcdefghijklmnopqrst", 0, 10, -5);
720    test("abcde", 0, 6, "abcdefghijklmnopqrst", 0, 19, -14);
721    test("abcde", 0, 6, "abcdefghijklmnopqrst", 0, 20, -15);
722    test("abcde", 0, 6, "abcdefghijklmnopqrst", 0, 21, -15);
723    test("abcde", 0, 6, "abcdefghijklmnopqrst", 1, 0, 5);
724    test("abcde", 0, 6, "abcdefghijklmnopqrst", 1, 1, -1);
725    test("abcde", 0, 6, "abcdefghijklmnopqrst", 1, 9, -1);
726    test("abcde", 0, 6, "abcdefghijklmnopqrst", 1, 18, -1);
727    test("abcde", 0, 6, "abcdefghijklmnopqrst", 1, 19, -1);
728    test("abcde", 0, 6, "abcdefghijklmnopqrst", 1, 20, -1);
729    test("abcde", 0, 6, "abcdefghijklmnopqrst", 10, 0, 5);
730    test("abcde", 0, 6, "abcdefghijklmnopqrst", 10, 1, -10);
731    test("abcde", 0, 6, "abcdefghijklmnopqrst", 10, 5, -10);
732    test("abcde", 0, 6, "abcdefghijklmnopqrst", 10, 9, -10);
733    test("abcde", 0, 6, "abcdefghijklmnopqrst", 10, 10, -10);
734    test("abcde", 0, 6, "abcdefghijklmnopqrst", 10, 11, -10);
735    test("abcde", 0, 6, "abcdefghijklmnopqrst", 19, 0, 5);
736    test("abcde", 0, 6, "abcdefghijklmnopqrst", 19, 1, -19);
737    test("abcde", 0, 6, "abcdefghijklmnopqrst", 19, 2, -19);
738    test("abcde", 0, 6, "abcdefghijklmnopqrst", 20, 0, 5);
739    test("abcde", 0, 6, "abcdefghijklmnopqrst", 20, 1, 5);
740    test("abcde", 0, 6, "abcdefghijklmnopqrst", 21, 0, 0);
741    test("abcde", 1, 0, "", 0, 0, 0);
742    test("abcde", 1, 0, "", 0, 1, 0);
743    test("abcde", 1, 0, "", 1, 0, 0);
744    test("abcde", 1, 0, "abcde", 0, 0, 0);
745    test("abcde", 1, 0, "abcde", 0, 1, -1);
746    test("abcde", 1, 0, "abcde", 0, 2, -2);
747    test("abcde", 1, 0, "abcde", 0, 4, -4);
748    test("abcde", 1, 0, "abcde", 0, 5, -5);
749    test("abcde", 1, 0, "abcde", 0, 6, -5);
750    test("abcde", 1, 0, "abcde", 1, 0, 0);
751    test("abcde", 1, 0, "abcde", 1, 1, -1);
752    test("abcde", 1, 0, "abcde", 1, 2, -2);
753    test("abcde", 1, 0, "abcde", 1, 3, -3);
754    test("abcde", 1, 0, "abcde", 1, 4, -4);
755    test("abcde", 1, 0, "abcde", 1, 5, -4);
756    test("abcde", 1, 0, "abcde", 2, 0, 0);
757    test("abcde", 1, 0, "abcde", 2, 1, -1);
758    test("abcde", 1, 0, "abcde", 2, 2, -2);
759    test("abcde", 1, 0, "abcde", 2, 3, -3);
760    test("abcde", 1, 0, "abcde", 2, 4, -3);
761    test("abcde", 1, 0, "abcde", 4, 0, 0);
762    test("abcde", 1, 0, "abcde", 4, 1, -1);
763    test("abcde", 1, 0, "abcde", 4, 2, -1);
764    test("abcde", 1, 0, "abcde", 5, 0, 0);
765    test("abcde", 1, 0, "abcde", 5, 1, 0);
766    test("abcde", 1, 0, "abcde", 6, 0, 0);
767    test("abcde", 1, 0, "abcdefghij", 0, 0, 0);
768    test("abcde", 1, 0, "abcdefghij", 0, 1, -1);
769    test("abcde", 1, 0, "abcdefghij", 0, 5, -5);
770    test("abcde", 1, 0, "abcdefghij", 0, 9, -9);
771    test("abcde", 1, 0, "abcdefghij", 0, 10, -10);
772    test("abcde", 1, 0, "abcdefghij", 0, 11, -10);
773    test("abcde", 1, 0, "abcdefghij", 1, 0, 0);
774    test("abcde", 1, 0, "abcdefghij", 1, 1, -1);
775}
776
777void test7()
778{
779    test("abcde", 1, 0, "abcdefghij", 1, 4, -4);
780    test("abcde", 1, 0, "abcdefghij", 1, 8, -8);
781    test("abcde", 1, 0, "abcdefghij", 1, 9, -9);
782    test("abcde", 1, 0, "abcdefghij", 1, 10, -9);
783    test("abcde", 1, 0, "abcdefghij", 5, 0, 0);
784    test("abcde", 1, 0, "abcdefghij", 5, 1, -1);
785    test("abcde", 1, 0, "abcdefghij", 5, 2, -2);
786    test("abcde", 1, 0, "abcdefghij", 5, 4, -4);
787    test("abcde", 1, 0, "abcdefghij", 5, 5, -5);
788    test("abcde", 1, 0, "abcdefghij", 5, 6, -5);
789    test("abcde", 1, 0, "abcdefghij", 9, 0, 0);
790    test("abcde", 1, 0, "abcdefghij", 9, 1, -1);
791    test("abcde", 1, 0, "abcdefghij", 9, 2, -1);
792    test("abcde", 1, 0, "abcdefghij", 10, 0, 0);
793    test("abcde", 1, 0, "abcdefghij", 10, 1, 0);
794    test("abcde", 1, 0, "abcdefghij", 11, 0, 0);
795    test("abcde", 1, 0, "abcdefghijklmnopqrst", 0, 0, 0);
796    test("abcde", 1, 0, "abcdefghijklmnopqrst", 0, 1, -1);
797    test("abcde", 1, 0, "abcdefghijklmnopqrst", 0, 10, -10);
798    test("abcde", 1, 0, "abcdefghijklmnopqrst", 0, 19, -19);
799    test("abcde", 1, 0, "abcdefghijklmnopqrst", 0, 20, -20);
800    test("abcde", 1, 0, "abcdefghijklmnopqrst", 0, 21, -20);
801    test("abcde", 1, 0, "abcdefghijklmnopqrst", 1, 0, 0);
802    test("abcde", 1, 0, "abcdefghijklmnopqrst", 1, 1, -1);
803    test("abcde", 1, 0, "abcdefghijklmnopqrst", 1, 9, -9);
804    test("abcde", 1, 0, "abcdefghijklmnopqrst", 1, 18, -18);
805    test("abcde", 1, 0, "abcdefghijklmnopqrst", 1, 19, -19);
806    test("abcde", 1, 0, "abcdefghijklmnopqrst", 1, 20, -19);
807    test("abcde", 1, 0, "abcdefghijklmnopqrst", 10, 0, 0);
808    test("abcde", 1, 0, "abcdefghijklmnopqrst", 10, 1, -1);
809    test("abcde", 1, 0, "abcdefghijklmnopqrst", 10, 5, -5);
810    test("abcde", 1, 0, "abcdefghijklmnopqrst", 10, 9, -9);
811    test("abcde", 1, 0, "abcdefghijklmnopqrst", 10, 10, -10);
812    test("abcde", 1, 0, "abcdefghijklmnopqrst", 10, 11, -10);
813    test("abcde", 1, 0, "abcdefghijklmnopqrst", 19, 0, 0);
814    test("abcde", 1, 0, "abcdefghijklmnopqrst", 19, 1, -1);
815    test("abcde", 1, 0, "abcdefghijklmnopqrst", 19, 2, -1);
816    test("abcde", 1, 0, "abcdefghijklmnopqrst", 20, 0, 0);
817    test("abcde", 1, 0, "abcdefghijklmnopqrst", 20, 1, 0);
818    test("abcde", 1, 0, "abcdefghijklmnopqrst", 21, 0, 0);
819    test("abcde", 1, 1, "", 0, 0, 1);
820    test("abcde", 1, 1, "", 0, 1, 1);
821    test("abcde", 1, 1, "", 1, 0, 0);
822    test("abcde", 1, 1, "abcde", 0, 0, 1);
823    test("abcde", 1, 1, "abcde", 0, 1, 1);
824    test("abcde", 1, 1, "abcde", 0, 2, 1);
825    test("abcde", 1, 1, "abcde", 0, 4, 1);
826    test("abcde", 1, 1, "abcde", 0, 5, 1);
827    test("abcde", 1, 1, "abcde", 0, 6, 1);
828    test("abcde", 1, 1, "abcde", 1, 0, 1);
829    test("abcde", 1, 1, "abcde", 1, 1, 0);
830    test("abcde", 1, 1, "abcde", 1, 2, -1);
831    test("abcde", 1, 1, "abcde", 1, 3, -2);
832    test("abcde", 1, 1, "abcde", 1, 4, -3);
833    test("abcde", 1, 1, "abcde", 1, 5, -3);
834    test("abcde", 1, 1, "abcde", 2, 0, 1);
835    test("abcde", 1, 1, "abcde", 2, 1, -1);
836    test("abcde", 1, 1, "abcde", 2, 2, -1);
837    test("abcde", 1, 1, "abcde", 2, 3, -1);
838    test("abcde", 1, 1, "abcde", 2, 4, -1);
839    test("abcde", 1, 1, "abcde", 4, 0, 1);
840    test("abcde", 1, 1, "abcde", 4, 1, -3);
841    test("abcde", 1, 1, "abcde", 4, 2, -3);
842    test("abcde", 1, 1, "abcde", 5, 0, 1);
843    test("abcde", 1, 1, "abcde", 5, 1, 1);
844    test("abcde", 1, 1, "abcde", 6, 0, 0);
845    test("abcde", 1, 1, "abcdefghij", 0, 0, 1);
846    test("abcde", 1, 1, "abcdefghij", 0, 1, 1);
847    test("abcde", 1, 1, "abcdefghij", 0, 5, 1);
848    test("abcde", 1, 1, "abcdefghij", 0, 9, 1);
849    test("abcde", 1, 1, "abcdefghij", 0, 10, 1);
850    test("abcde", 1, 1, "abcdefghij", 0, 11, 1);
851    test("abcde", 1, 1, "abcdefghij", 1, 0, 1);
852    test("abcde", 1, 1, "abcdefghij", 1, 1, 0);
853    test("abcde", 1, 1, "abcdefghij", 1, 4, -3);
854    test("abcde", 1, 1, "abcdefghij", 1, 8, -7);
855    test("abcde", 1, 1, "abcdefghij", 1, 9, -8);
856    test("abcde", 1, 1, "abcdefghij", 1, 10, -8);
857    test("abcde", 1, 1, "abcdefghij", 5, 0, 1);
858    test("abcde", 1, 1, "abcdefghij", 5, 1, -4);
859    test("abcde", 1, 1, "abcdefghij", 5, 2, -4);
860    test("abcde", 1, 1, "abcdefghij", 5, 4, -4);
861    test("abcde", 1, 1, "abcdefghij", 5, 5, -4);
862    test("abcde", 1, 1, "abcdefghij", 5, 6, -4);
863    test("abcde", 1, 1, "abcdefghij", 9, 0, 1);
864    test("abcde", 1, 1, "abcdefghij", 9, 1, -8);
865    test("abcde", 1, 1, "abcdefghij", 9, 2, -8);
866    test("abcde", 1, 1, "abcdefghij", 10, 0, 1);
867    test("abcde", 1, 1, "abcdefghij", 10, 1, 1);
868    test("abcde", 1, 1, "abcdefghij", 11, 0, 0);
869    test("abcde", 1, 1, "abcdefghijklmnopqrst", 0, 0, 1);
870    test("abcde", 1, 1, "abcdefghijklmnopqrst", 0, 1, 1);
871    test("abcde", 1, 1, "abcdefghijklmnopqrst", 0, 10, 1);
872    test("abcde", 1, 1, "abcdefghijklmnopqrst", 0, 19, 1);
873    test("abcde", 1, 1, "abcdefghijklmnopqrst", 0, 20, 1);
874    test("abcde", 1, 1, "abcdefghijklmnopqrst", 0, 21, 1);
875    test("abcde", 1, 1, "abcdefghijklmnopqrst", 1, 0, 1);
876    test("abcde", 1, 1, "abcdefghijklmnopqrst", 1, 1, 0);
877    test("abcde", 1, 1, "abcdefghijklmnopqrst", 1, 9, -8);
878    test("abcde", 1, 1, "abcdefghijklmnopqrst", 1, 18, -17);
879}
880
881void test8()
882{
883    test("abcde", 1, 1, "abcdefghijklmnopqrst", 1, 19, -18);
884    test("abcde", 1, 1, "abcdefghijklmnopqrst", 1, 20, -18);
885    test("abcde", 1, 1, "abcdefghijklmnopqrst", 10, 0, 1);
886    test("abcde", 1, 1, "abcdefghijklmnopqrst", 10, 1, -9);
887    test("abcde", 1, 1, "abcdefghijklmnopqrst", 10, 5, -9);
888    test("abcde", 1, 1, "abcdefghijklmnopqrst", 10, 9, -9);
889    test("abcde", 1, 1, "abcdefghijklmnopqrst", 10, 10, -9);
890    test("abcde", 1, 1, "abcdefghijklmnopqrst", 10, 11, -9);
891    test("abcde", 1, 1, "abcdefghijklmnopqrst", 19, 0, 1);
892    test("abcde", 1, 1, "abcdefghijklmnopqrst", 19, 1, -18);
893    test("abcde", 1, 1, "abcdefghijklmnopqrst", 19, 2, -18);
894    test("abcde", 1, 1, "abcdefghijklmnopqrst", 20, 0, 1);
895    test("abcde", 1, 1, "abcdefghijklmnopqrst", 20, 1, 1);
896    test("abcde", 1, 1, "abcdefghijklmnopqrst", 21, 0, 0);
897    test("abcde", 1, 2, "", 0, 0, 2);
898    test("abcde", 1, 2, "", 0, 1, 2);
899    test("abcde", 1, 2, "", 1, 0, 0);
900    test("abcde", 1, 2, "abcde", 0, 0, 2);
901    test("abcde", 1, 2, "abcde", 0, 1, 1);
902    test("abcde", 1, 2, "abcde", 0, 2, 1);
903    test("abcde", 1, 2, "abcde", 0, 4, 1);
904    test("abcde", 1, 2, "abcde", 0, 5, 1);
905    test("abcde", 1, 2, "abcde", 0, 6, 1);
906    test("abcde", 1, 2, "abcde", 1, 0, 2);
907    test("abcde", 1, 2, "abcde", 1, 1, 1);
908    test("abcde", 1, 2, "abcde", 1, 2, 0);
909    test("abcde", 1, 2, "abcde", 1, 3, -1);
910    test("abcde", 1, 2, "abcde", 1, 4, -2);
911    test("abcde", 1, 2, "abcde", 1, 5, -2);
912    test("abcde", 1, 2, "abcde", 2, 0, 2);
913    test("abcde", 1, 2, "abcde", 2, 1, -1);
914    test("abcde", 1, 2, "abcde", 2, 2, -1);
915    test("abcde", 1, 2, "abcde", 2, 3, -1);
916    test("abcde", 1, 2, "abcde", 2, 4, -1);
917    test("abcde", 1, 2, "abcde", 4, 0, 2);
918    test("abcde", 1, 2, "abcde", 4, 1, -3);
919    test("abcde", 1, 2, "abcde", 4, 2, -3);
920    test("abcde", 1, 2, "abcde", 5, 0, 2);
921    test("abcde", 1, 2, "abcde", 5, 1, 2);
922    test("abcde", 1, 2, "abcde", 6, 0, 0);
923    test("abcde", 1, 2, "abcdefghij", 0, 0, 2);
924    test("abcde", 1, 2, "abcdefghij", 0, 1, 1);
925    test("abcde", 1, 2, "abcdefghij", 0, 5, 1);
926    test("abcde", 1, 2, "abcdefghij", 0, 9, 1);
927    test("abcde", 1, 2, "abcdefghij", 0, 10, 1);
928    test("abcde", 1, 2, "abcdefghij", 0, 11, 1);
929    test("abcde", 1, 2, "abcdefghij", 1, 0, 2);
930    test("abcde", 1, 2, "abcdefghij", 1, 1, 1);
931    test("abcde", 1, 2, "abcdefghij", 1, 4, -2);
932    test("abcde", 1, 2, "abcdefghij", 1, 8, -6);
933    test("abcde", 1, 2, "abcdefghij", 1, 9, -7);
934    test("abcde", 1, 2, "abcdefghij", 1, 10, -7);
935    test("abcde", 1, 2, "abcdefghij", 5, 0, 2);
936    test("abcde", 1, 2, "abcdefghij", 5, 1, -4);
937    test("abcde", 1, 2, "abcdefghij", 5, 2, -4);
938    test("abcde", 1, 2, "abcdefghij", 5, 4, -4);
939    test("abcde", 1, 2, "abcdefghij", 5, 5, -4);
940    test("abcde", 1, 2, "abcdefghij", 5, 6, -4);
941    test("abcde", 1, 2, "abcdefghij", 9, 0, 2);
942    test("abcde", 1, 2, "abcdefghij", 9, 1, -8);
943    test("abcde", 1, 2, "abcdefghij", 9, 2, -8);
944    test("abcde", 1, 2, "abcdefghij", 10, 0, 2);
945    test("abcde", 1, 2, "abcdefghij", 10, 1, 2);
946    test("abcde", 1, 2, "abcdefghij", 11, 0, 0);
947    test("abcde", 1, 2, "abcdefghijklmnopqrst", 0, 0, 2);
948    test("abcde", 1, 2, "abcdefghijklmnopqrst", 0, 1, 1);
949    test("abcde", 1, 2, "abcdefghijklmnopqrst", 0, 10, 1);
950    test("abcde", 1, 2, "abcdefghijklmnopqrst", 0, 19, 1);
951    test("abcde", 1, 2, "abcdefghijklmnopqrst", 0, 20, 1);
952    test("abcde", 1, 2, "abcdefghijklmnopqrst", 0, 21, 1);
953    test("abcde", 1, 2, "abcdefghijklmnopqrst", 1, 0, 2);
954    test("abcde", 1, 2, "abcdefghijklmnopqrst", 1, 1, 1);
955    test("abcde", 1, 2, "abcdefghijklmnopqrst", 1, 9, -7);
956    test("abcde", 1, 2, "abcdefghijklmnopqrst", 1, 18, -16);
957    test("abcde", 1, 2, "abcdefghijklmnopqrst", 1, 19, -17);
958    test("abcde", 1, 2, "abcdefghijklmnopqrst", 1, 20, -17);
959    test("abcde", 1, 2, "abcdefghijklmnopqrst", 10, 0, 2);
960    test("abcde", 1, 2, "abcdefghijklmnopqrst", 10, 1, -9);
961    test("abcde", 1, 2, "abcdefghijklmnopqrst", 10, 5, -9);
962    test("abcde", 1, 2, "abcdefghijklmnopqrst", 10, 9, -9);
963    test("abcde", 1, 2, "abcdefghijklmnopqrst", 10, 10, -9);
964    test("abcde", 1, 2, "abcdefghijklmnopqrst", 10, 11, -9);
965    test("abcde", 1, 2, "abcdefghijklmnopqrst", 19, 0, 2);
966    test("abcde", 1, 2, "abcdefghijklmnopqrst", 19, 1, -18);
967    test("abcde", 1, 2, "abcdefghijklmnopqrst", 19, 2, -18);
968    test("abcde", 1, 2, "abcdefghijklmnopqrst", 20, 0, 2);
969    test("abcde", 1, 2, "abcdefghijklmnopqrst", 20, 1, 2);
970    test("abcde", 1, 2, "abcdefghijklmnopqrst", 21, 0, 0);
971    test("abcde", 1, 3, "", 0, 0, 3);
972    test("abcde", 1, 3, "", 0, 1, 3);
973    test("abcde", 1, 3, "", 1, 0, 0);
974    test("abcde", 1, 3, "abcde", 0, 0, 3);
975    test("abcde", 1, 3, "abcde", 0, 1, 1);
976    test("abcde", 1, 3, "abcde", 0, 2, 1);
977    test("abcde", 1, 3, "abcde", 0, 4, 1);
978    test("abcde", 1, 3, "abcde", 0, 5, 1);
979    test("abcde", 1, 3, "abcde", 0, 6, 1);
980    test("abcde", 1, 3, "abcde", 1, 0, 3);
981    test("abcde", 1, 3, "abcde", 1, 1, 2);
982    test("abcde", 1, 3, "abcde", 1, 2, 1);
983}
984
985void test9()
986{
987    test("abcde", 1, 3, "abcde", 1, 3, 0);
988    test("abcde", 1, 3, "abcde", 1, 4, -1);
989    test("abcde", 1, 3, "abcde", 1, 5, -1);
990    test("abcde", 1, 3, "abcde", 2, 0, 3);
991    test("abcde", 1, 3, "abcde", 2, 1, -1);
992    test("abcde", 1, 3, "abcde", 2, 2, -1);
993    test("abcde", 1, 3, "abcde", 2, 3, -1);
994    test("abcde", 1, 3, "abcde", 2, 4, -1);
995    test("abcde", 1, 3, "abcde", 4, 0, 3);
996    test("abcde", 1, 3, "abcde", 4, 1, -3);
997    test("abcde", 1, 3, "abcde", 4, 2, -3);
998    test("abcde", 1, 3, "abcde", 5, 0, 3);
999    test("abcde", 1, 3, "abcde", 5, 1, 3);
1000    test("abcde", 1, 3, "abcde", 6, 0, 0);
1001    test("abcde", 1, 3, "abcdefghij", 0, 0, 3);
1002    test("abcde", 1, 3, "abcdefghij", 0, 1, 1);
1003    test("abcde", 1, 3, "abcdefghij", 0, 5, 1);
1004    test("abcde", 1, 3, "abcdefghij", 0, 9, 1);
1005    test("abcde", 1, 3, "abcdefghij", 0, 10, 1);
1006    test("abcde", 1, 3, "abcdefghij", 0, 11, 1);
1007    test("abcde", 1, 3, "abcdefghij", 1, 0, 3);
1008    test("abcde", 1, 3, "abcdefghij", 1, 1, 2);
1009    test("abcde", 1, 3, "abcdefghij", 1, 4, -1);
1010    test("abcde", 1, 3, "abcdefghij", 1, 8, -5);
1011    test("abcde", 1, 3, "abcdefghij", 1, 9, -6);
1012    test("abcde", 1, 3, "abcdefghij", 1, 10, -6);
1013    test("abcde", 1, 3, "abcdefghij", 5, 0, 3);
1014    test("abcde", 1, 3, "abcdefghij", 5, 1, -4);
1015    test("abcde", 1, 3, "abcdefghij", 5, 2, -4);
1016    test("abcde", 1, 3, "abcdefghij", 5, 4, -4);
1017    test("abcde", 1, 3, "abcdefghij", 5, 5, -4);
1018    test("abcde", 1, 3, "abcdefghij", 5, 6, -4);
1019    test("abcde", 1, 3, "abcdefghij", 9, 0, 3);
1020    test("abcde", 1, 3, "abcdefghij", 9, 1, -8);
1021    test("abcde", 1, 3, "abcdefghij", 9, 2, -8);
1022    test("abcde", 1, 3, "abcdefghij", 10, 0, 3);
1023    test("abcde", 1, 3, "abcdefghij", 10, 1, 3);
1024    test("abcde", 1, 3, "abcdefghij", 11, 0, 0);
1025    test("abcde", 1, 3, "abcdefghijklmnopqrst", 0, 0, 3);
1026    test("abcde", 1, 3, "abcdefghijklmnopqrst", 0, 1, 1);
1027    test("abcde", 1, 3, "abcdefghijklmnopqrst", 0, 10, 1);
1028    test("abcde", 1, 3, "abcdefghijklmnopqrst", 0, 19, 1);
1029    test("abcde", 1, 3, "abcdefghijklmnopqrst", 0, 20, 1);
1030    test("abcde", 1, 3, "abcdefghijklmnopqrst", 0, 21, 1);
1031    test("abcde", 1, 3, "abcdefghijklmnopqrst", 1, 0, 3);
1032    test("abcde", 1, 3, "abcdefghijklmnopqrst", 1, 1, 2);
1033    test("abcde", 1, 3, "abcdefghijklmnopqrst", 1, 9, -6);
1034    test("abcde", 1, 3, "abcdefghijklmnopqrst", 1, 18, -15);
1035    test("abcde", 1, 3, "abcdefghijklmnopqrst", 1, 19, -16);
1036    test("abcde", 1, 3, "abcdefghijklmnopqrst", 1, 20, -16);
1037    test("abcde", 1, 3, "abcdefghijklmnopqrst", 10, 0, 3);
1038    test("abcde", 1, 3, "abcdefghijklmnopqrst", 10, 1, -9);
1039    test("abcde", 1, 3, "abcdefghijklmnopqrst", 10, 5, -9);
1040    test("abcde", 1, 3, "abcdefghijklmnopqrst", 10, 9, -9);
1041    test("abcde", 1, 3, "abcdefghijklmnopqrst", 10, 10, -9);
1042    test("abcde", 1, 3, "abcdefghijklmnopqrst", 10, 11, -9);
1043    test("abcde", 1, 3, "abcdefghijklmnopqrst", 19, 0, 3);
1044    test("abcde", 1, 3, "abcdefghijklmnopqrst", 19, 1, -18);
1045    test("abcde", 1, 3, "abcdefghijklmnopqrst", 19, 2, -18);
1046    test("abcde", 1, 3, "abcdefghijklmnopqrst", 20, 0, 3);
1047    test("abcde", 1, 3, "abcdefghijklmnopqrst", 20, 1, 3);
1048    test("abcde", 1, 3, "abcdefghijklmnopqrst", 21, 0, 0);
1049    test("abcde", 1, 4, "", 0, 0, 4);
1050    test("abcde", 1, 4, "", 0, 1, 4);
1051    test("abcde", 1, 4, "", 1, 0, 0);
1052    test("abcde", 1, 4, "abcde", 0, 0, 4);
1053    test("abcde", 1, 4, "abcde", 0, 1, 1);
1054    test("abcde", 1, 4, "abcde", 0, 2, 1);
1055    test("abcde", 1, 4, "abcde", 0, 4, 1);
1056    test("abcde", 1, 4, "abcde", 0, 5, 1);
1057    test("abcde", 1, 4, "abcde", 0, 6, 1);
1058    test("abcde", 1, 4, "abcde", 1, 0, 4);
1059    test("abcde", 1, 4, "abcde", 1, 1, 3);
1060    test("abcde", 1, 4, "abcde", 1, 2, 2);
1061    test("abcde", 1, 4, "abcde", 1, 3, 1);
1062    test("abcde", 1, 4, "abcde", 1, 4, 0);
1063    test("abcde", 1, 4, "abcde", 1, 5, 0);
1064    test("abcde", 1, 4, "abcde", 2, 0, 4);
1065    test("abcde", 1, 4, "abcde", 2, 1, -1);
1066    test("abcde", 1, 4, "abcde", 2, 2, -1);
1067    test("abcde", 1, 4, "abcde", 2, 3, -1);
1068    test("abcde", 1, 4, "abcde", 2, 4, -1);
1069    test("abcde", 1, 4, "abcde", 4, 0, 4);
1070    test("abcde", 1, 4, "abcde", 4, 1, -3);
1071    test("abcde", 1, 4, "abcde", 4, 2, -3);
1072    test("abcde", 1, 4, "abcde", 5, 0, 4);
1073    test("abcde", 1, 4, "abcde", 5, 1, 4);
1074    test("abcde", 1, 4, "abcde", 6, 0, 0);
1075    test("abcde", 1, 4, "abcdefghij", 0, 0, 4);
1076    test("abcde", 1, 4, "abcdefghij", 0, 1, 1);
1077    test("abcde", 1, 4, "abcdefghij", 0, 5, 1);
1078    test("abcde", 1, 4, "abcdefghij", 0, 9, 1);
1079    test("abcde", 1, 4, "abcdefghij", 0, 10, 1);
1080    test("abcde", 1, 4, "abcdefghij", 0, 11, 1);
1081    test("abcde", 1, 4, "abcdefghij", 1, 0, 4);
1082    test("abcde", 1, 4, "abcdefghij", 1, 1, 3);
1083    test("abcde", 1, 4, "abcdefghij", 1, 4, 0);
1084    test("abcde", 1, 4, "abcdefghij", 1, 8, -4);
1085    test("abcde", 1, 4, "abcdefghij", 1, 9, -5);
1086    test("abcde", 1, 4, "abcdefghij", 1, 10, -5);
1087}
1088
1089void test10()
1090{
1091    test("abcde", 1, 4, "abcdefghij", 5, 0, 4);
1092    test("abcde", 1, 4, "abcdefghij", 5, 1, -4);
1093    test("abcde", 1, 4, "abcdefghij", 5, 2, -4);
1094    test("abcde", 1, 4, "abcdefghij", 5, 4, -4);
1095    test("abcde", 1, 4, "abcdefghij", 5, 5, -4);
1096    test("abcde", 1, 4, "abcdefghij", 5, 6, -4);
1097    test("abcde", 1, 4, "abcdefghij", 9, 0, 4);
1098    test("abcde", 1, 4, "abcdefghij", 9, 1, -8);
1099    test("abcde", 1, 4, "abcdefghij", 9, 2, -8);
1100    test("abcde", 1, 4, "abcdefghij", 10, 0, 4);
1101    test("abcde", 1, 4, "abcdefghij", 10, 1, 4);
1102    test("abcde", 1, 4, "abcdefghij", 11, 0, 0);
1103    test("abcde", 1, 4, "abcdefghijklmnopqrst", 0, 0, 4);
1104    test("abcde", 1, 4, "abcdefghijklmnopqrst", 0, 1, 1);
1105    test("abcde", 1, 4, "abcdefghijklmnopqrst", 0, 10, 1);
1106    test("abcde", 1, 4, "abcdefghijklmnopqrst", 0, 19, 1);
1107    test("abcde", 1, 4, "abcdefghijklmnopqrst", 0, 20, 1);
1108    test("abcde", 1, 4, "abcdefghijklmnopqrst", 0, 21, 1);
1109    test("abcde", 1, 4, "abcdefghijklmnopqrst", 1, 0, 4);
1110    test("abcde", 1, 4, "abcdefghijklmnopqrst", 1, 1, 3);
1111    test("abcde", 1, 4, "abcdefghijklmnopqrst", 1, 9, -5);
1112    test("abcde", 1, 4, "abcdefghijklmnopqrst", 1, 18, -14);
1113    test("abcde", 1, 4, "abcdefghijklmnopqrst", 1, 19, -15);
1114    test("abcde", 1, 4, "abcdefghijklmnopqrst", 1, 20, -15);
1115    test("abcde", 1, 4, "abcdefghijklmnopqrst", 10, 0, 4);
1116    test("abcde", 1, 4, "abcdefghijklmnopqrst", 10, 1, -9);
1117    test("abcde", 1, 4, "abcdefghijklmnopqrst", 10, 5, -9);
1118    test("abcde", 1, 4, "abcdefghijklmnopqrst", 10, 9, -9);
1119    test("abcde", 1, 4, "abcdefghijklmnopqrst", 10, 10, -9);
1120    test("abcde", 1, 4, "abcdefghijklmnopqrst", 10, 11, -9);
1121    test("abcde", 1, 4, "abcdefghijklmnopqrst", 19, 0, 4);
1122    test("abcde", 1, 4, "abcdefghijklmnopqrst", 19, 1, -18);
1123    test("abcde", 1, 4, "abcdefghijklmnopqrst", 19, 2, -18);
1124    test("abcde", 1, 4, "abcdefghijklmnopqrst", 20, 0, 4);
1125    test("abcde", 1, 4, "abcdefghijklmnopqrst", 20, 1, 4);
1126    test("abcde", 1, 4, "abcdefghijklmnopqrst", 21, 0, 0);
1127    test("abcde", 1, 5, "", 0, 0, 4);
1128    test("abcde", 1, 5, "", 0, 1, 4);
1129    test("abcde", 1, 5, "", 1, 0, 0);
1130    test("abcde", 1, 5, "abcde", 0, 0, 4);
1131    test("abcde", 1, 5, "abcde", 0, 1, 1);
1132    test("abcde", 1, 5, "abcde", 0, 2, 1);
1133    test("abcde", 1, 5, "abcde", 0, 4, 1);
1134    test("abcde", 1, 5, "abcde", 0, 5, 1);
1135    test("abcde", 1, 5, "abcde", 0, 6, 1);
1136    test("abcde", 1, 5, "abcde", 1, 0, 4);
1137    test("abcde", 1, 5, "abcde", 1, 1, 3);
1138    test("abcde", 1, 5, "abcde", 1, 2, 2);
1139    test("abcde", 1, 5, "abcde", 1, 3, 1);
1140    test("abcde", 1, 5, "abcde", 1, 4, 0);
1141    test("abcde", 1, 5, "abcde", 1, 5, 0);
1142    test("abcde", 1, 5, "abcde", 2, 0, 4);
1143    test("abcde", 1, 5, "abcde", 2, 1, -1);
1144    test("abcde", 1, 5, "abcde", 2, 2, -1);
1145    test("abcde", 1, 5, "abcde", 2, 3, -1);
1146    test("abcde", 1, 5, "abcde", 2, 4, -1);
1147    test("abcde", 1, 5, "abcde", 4, 0, 4);
1148    test("abcde", 1, 5, "abcde", 4, 1, -3);
1149    test("abcde", 1, 5, "abcde", 4, 2, -3);
1150    test("abcde", 1, 5, "abcde", 5, 0, 4);
1151    test("abcde", 1, 5, "abcde", 5, 1, 4);
1152    test("abcde", 1, 5, "abcde", 6, 0, 0);
1153    test("abcde", 1, 5, "abcdefghij", 0, 0, 4);
1154    test("abcde", 1, 5, "abcdefghij", 0, 1, 1);
1155    test("abcde", 1, 5, "abcdefghij", 0, 5, 1);
1156    test("abcde", 1, 5, "abcdefghij", 0, 9, 1);
1157    test("abcde", 1, 5, "abcdefghij", 0, 10, 1);
1158    test("abcde", 1, 5, "abcdefghij", 0, 11, 1);
1159    test("abcde", 1, 5, "abcdefghij", 1, 0, 4);
1160    test("abcde", 1, 5, "abcdefghij", 1, 1, 3);
1161    test("abcde", 1, 5, "abcdefghij", 1, 4, 0);
1162    test("abcde", 1, 5, "abcdefghij", 1, 8, -4);
1163    test("abcde", 1, 5, "abcdefghij", 1, 9, -5);
1164    test("abcde", 1, 5, "abcdefghij", 1, 10, -5);
1165    test("abcde", 1, 5, "abcdefghij", 5, 0, 4);
1166    test("abcde", 1, 5, "abcdefghij", 5, 1, -4);
1167    test("abcde", 1, 5, "abcdefghij", 5, 2, -4);
1168    test("abcde", 1, 5, "abcdefghij", 5, 4, -4);
1169    test("abcde", 1, 5, "abcdefghij", 5, 5, -4);
1170    test("abcde", 1, 5, "abcdefghij", 5, 6, -4);
1171    test("abcde", 1, 5, "abcdefghij", 9, 0, 4);
1172    test("abcde", 1, 5, "abcdefghij", 9, 1, -8);
1173    test("abcde", 1, 5, "abcdefghij", 9, 2, -8);
1174    test("abcde", 1, 5, "abcdefghij", 10, 0, 4);
1175    test("abcde", 1, 5, "abcdefghij", 10, 1, 4);
1176    test("abcde", 1, 5, "abcdefghij", 11, 0, 0);
1177    test("abcde", 1, 5, "abcdefghijklmnopqrst", 0, 0, 4);
1178    test("abcde", 1, 5, "abcdefghijklmnopqrst", 0, 1, 1);
1179    test("abcde", 1, 5, "abcdefghijklmnopqrst", 0, 10, 1);
1180    test("abcde", 1, 5, "abcdefghijklmnopqrst", 0, 19, 1);
1181    test("abcde", 1, 5, "abcdefghijklmnopqrst", 0, 20, 1);
1182    test("abcde", 1, 5, "abcdefghijklmnopqrst", 0, 21, 1);
1183    test("abcde", 1, 5, "abcdefghijklmnopqrst", 1, 0, 4);
1184    test("abcde", 1, 5, "abcdefghijklmnopqrst", 1, 1, 3);
1185    test("abcde", 1, 5, "abcdefghijklmnopqrst", 1, 9, -5);
1186    test("abcde", 1, 5, "abcdefghijklmnopqrst", 1, 18, -14);
1187    test("abcde", 1, 5, "abcdefghijklmnopqrst", 1, 19, -15);
1188    test("abcde", 1, 5, "abcdefghijklmnopqrst", 1, 20, -15);
1189    test("abcde", 1, 5, "abcdefghijklmnopqrst", 10, 0, 4);
1190    test("abcde", 1, 5, "abcdefghijklmnopqrst", 10, 1, -9);
1191}
1192
1193void test11()
1194{
1195    test("abcde", 1, 5, "abcdefghijklmnopqrst", 10, 5, -9);
1196    test("abcde", 1, 5, "abcdefghijklmnopqrst", 10, 9, -9);
1197    test("abcde", 1, 5, "abcdefghijklmnopqrst", 10, 10, -9);
1198    test("abcde", 1, 5, "abcdefghijklmnopqrst", 10, 11, -9);
1199    test("abcde", 1, 5, "abcdefghijklmnopqrst", 19, 0, 4);
1200    test("abcde", 1, 5, "abcdefghijklmnopqrst", 19, 1, -18);
1201    test("abcde", 1, 5, "abcdefghijklmnopqrst", 19, 2, -18);
1202    test("abcde", 1, 5, "abcdefghijklmnopqrst", 20, 0, 4);
1203    test("abcde", 1, 5, "abcdefghijklmnopqrst", 20, 1, 4);
1204    test("abcde", 1, 5, "abcdefghijklmnopqrst", 21, 0, 0);
1205    test("abcde", 2, 0, "", 0, 0, 0);
1206    test("abcde", 2, 0, "", 0, 1, 0);
1207    test("abcde", 2, 0, "", 1, 0, 0);
1208    test("abcde", 2, 0, "abcde", 0, 0, 0);
1209    test("abcde", 2, 0, "abcde", 0, 1, -1);
1210    test("abcde", 2, 0, "abcde", 0, 2, -2);
1211    test("abcde", 2, 0, "abcde", 0, 4, -4);
1212    test("abcde", 2, 0, "abcde", 0, 5, -5);
1213    test("abcde", 2, 0, "abcde", 0, 6, -5);
1214    test("abcde", 2, 0, "abcde", 1, 0, 0);
1215    test("abcde", 2, 0, "abcde", 1, 1, -1);
1216    test("abcde", 2, 0, "abcde", 1, 2, -2);
1217    test("abcde", 2, 0, "abcde", 1, 3, -3);
1218    test("abcde", 2, 0, "abcde", 1, 4, -4);
1219    test("abcde", 2, 0, "abcde", 1, 5, -4);
1220    test("abcde", 2, 0, "abcde", 2, 0, 0);
1221    test("abcde", 2, 0, "abcde", 2, 1, -1);
1222    test("abcde", 2, 0, "abcde", 2, 2, -2);
1223    test("abcde", 2, 0, "abcde", 2, 3, -3);
1224    test("abcde", 2, 0, "abcde", 2, 4, -3);
1225    test("abcde", 2, 0, "abcde", 4, 0, 0);
1226    test("abcde", 2, 0, "abcde", 4, 1, -1);
1227    test("abcde", 2, 0, "abcde", 4, 2, -1);
1228    test("abcde", 2, 0, "abcde", 5, 0, 0);
1229    test("abcde", 2, 0, "abcde", 5, 1, 0);
1230    test("abcde", 2, 0, "abcde", 6, 0, 0);
1231    test("abcde", 2, 0, "abcdefghij", 0, 0, 0);
1232    test("abcde", 2, 0, "abcdefghij", 0, 1, -1);
1233    test("abcde", 2, 0, "abcdefghij", 0, 5, -5);
1234    test("abcde", 2, 0, "abcdefghij", 0, 9, -9);
1235    test("abcde", 2, 0, "abcdefghij", 0, 10, -10);
1236    test("abcde", 2, 0, "abcdefghij", 0, 11, -10);
1237    test("abcde", 2, 0, "abcdefghij", 1, 0, 0);
1238    test("abcde", 2, 0, "abcdefghij", 1, 1, -1);
1239    test("abcde", 2, 0, "abcdefghij", 1, 4, -4);
1240    test("abcde", 2, 0, "abcdefghij", 1, 8, -8);
1241    test("abcde", 2, 0, "abcdefghij", 1, 9, -9);
1242    test("abcde", 2, 0, "abcdefghij", 1, 10, -9);
1243    test("abcde", 2, 0, "abcdefghij", 5, 0, 0);
1244    test("abcde", 2, 0, "abcdefghij", 5, 1, -1);
1245    test("abcde", 2, 0, "abcdefghij", 5, 2, -2);
1246    test("abcde", 2, 0, "abcdefghij", 5, 4, -4);
1247    test("abcde", 2, 0, "abcdefghij", 5, 5, -5);
1248    test("abcde", 2, 0, "abcdefghij", 5, 6, -5);
1249    test("abcde", 2, 0, "abcdefghij", 9, 0, 0);
1250    test("abcde", 2, 0, "abcdefghij", 9, 1, -1);
1251    test("abcde", 2, 0, "abcdefghij", 9, 2, -1);
1252    test("abcde", 2, 0, "abcdefghij", 10, 0, 0);
1253    test("abcde", 2, 0, "abcdefghij", 10, 1, 0);
1254    test("abcde", 2, 0, "abcdefghij", 11, 0, 0);
1255    test("abcde", 2, 0, "abcdefghijklmnopqrst", 0, 0, 0);
1256    test("abcde", 2, 0, "abcdefghijklmnopqrst", 0, 1, -1);
1257    test("abcde", 2, 0, "abcdefghijklmnopqrst", 0, 10, -10);
1258    test("abcde", 2, 0, "abcdefghijklmnopqrst", 0, 19, -19);
1259    test("abcde", 2, 0, "abcdefghijklmnopqrst", 0, 20, -20);
1260    test("abcde", 2, 0, "abcdefghijklmnopqrst", 0, 21, -20);
1261    test("abcde", 2, 0, "abcdefghijklmnopqrst", 1, 0, 0);
1262    test("abcde", 2, 0, "abcdefghijklmnopqrst", 1, 1, -1);
1263    test("abcde", 2, 0, "abcdefghijklmnopqrst", 1, 9, -9);
1264    test("abcde", 2, 0, "abcdefghijklmnopqrst", 1, 18, -18);
1265    test("abcde", 2, 0, "abcdefghijklmnopqrst", 1, 19, -19);
1266    test("abcde", 2, 0, "abcdefghijklmnopqrst", 1, 20, -19);
1267    test("abcde", 2, 0, "abcdefghijklmnopqrst", 10, 0, 0);
1268    test("abcde", 2, 0, "abcdefghijklmnopqrst", 10, 1, -1);
1269    test("abcde", 2, 0, "abcdefghijklmnopqrst", 10, 5, -5);
1270    test("abcde", 2, 0, "abcdefghijklmnopqrst", 10, 9, -9);
1271    test("abcde", 2, 0, "abcdefghijklmnopqrst", 10, 10, -10);
1272    test("abcde", 2, 0, "abcdefghijklmnopqrst", 10, 11, -10);
1273    test("abcde", 2, 0, "abcdefghijklmnopqrst", 19, 0, 0);
1274    test("abcde", 2, 0, "abcdefghijklmnopqrst", 19, 1, -1);
1275    test("abcde", 2, 0, "abcdefghijklmnopqrst", 19, 2, -1);
1276    test("abcde", 2, 0, "abcdefghijklmnopqrst", 20, 0, 0);
1277    test("abcde", 2, 0, "abcdefghijklmnopqrst", 20, 1, 0);
1278    test("abcde", 2, 0, "abcdefghijklmnopqrst", 21, 0, 0);
1279    test("abcde", 2, 1, "", 0, 0, 1);
1280    test("abcde", 2, 1, "", 0, 1, 1);
1281    test("abcde", 2, 1, "", 1, 0, 0);
1282    test("abcde", 2, 1, "abcde", 0, 0, 1);
1283    test("abcde", 2, 1, "abcde", 0, 1, 2);
1284    test("abcde", 2, 1, "abcde", 0, 2, 2);
1285    test("abcde", 2, 1, "abcde", 0, 4, 2);
1286    test("abcde", 2, 1, "abcde", 0, 5, 2);
1287    test("abcde", 2, 1, "abcde", 0, 6, 2);
1288    test("abcde", 2, 1, "abcde", 1, 0, 1);
1289    test("abcde", 2, 1, "abcde", 1, 1, 1);
1290    test("abcde", 2, 1, "abcde", 1, 2, 1);
1291    test("abcde", 2, 1, "abcde", 1, 3, 1);
1292    test("abcde", 2, 1, "abcde", 1, 4, 1);
1293    test("abcde", 2, 1, "abcde", 1, 5, 1);
1294    test("abcde", 2, 1, "abcde", 2, 0, 1);
1295}
1296
1297void test12()
1298{
1299    test("abcde", 2, 1, "abcde", 2, 1, 0);
1300    test("abcde", 2, 1, "abcde", 2, 2, -1);
1301    test("abcde", 2, 1, "abcde", 2, 3, -2);
1302    test("abcde", 2, 1, "abcde", 2, 4, -2);
1303    test("abcde", 2, 1, "abcde", 4, 0, 1);
1304    test("abcde", 2, 1, "abcde", 4, 1, -2);
1305    test("abcde", 2, 1, "abcde", 4, 2, -2);
1306    test("abcde", 2, 1, "abcde", 5, 0, 1);
1307    test("abcde", 2, 1, "abcde", 5, 1, 1);
1308    test("abcde", 2, 1, "abcde", 6, 0, 0);
1309    test("abcde", 2, 1, "abcdefghij", 0, 0, 1);
1310    test("abcde", 2, 1, "abcdefghij", 0, 1, 2);
1311    test("abcde", 2, 1, "abcdefghij", 0, 5, 2);
1312    test("abcde", 2, 1, "abcdefghij", 0, 9, 2);
1313    test("abcde", 2, 1, "abcdefghij", 0, 10, 2);
1314    test("abcde", 2, 1, "abcdefghij", 0, 11, 2);
1315    test("abcde", 2, 1, "abcdefghij", 1, 0, 1);
1316    test("abcde", 2, 1, "abcdefghij", 1, 1, 1);
1317    test("abcde", 2, 1, "abcdefghij", 1, 4, 1);
1318    test("abcde", 2, 1, "abcdefghij", 1, 8, 1);
1319    test("abcde", 2, 1, "abcdefghij", 1, 9, 1);
1320    test("abcde", 2, 1, "abcdefghij", 1, 10, 1);
1321    test("abcde", 2, 1, "abcdefghij", 5, 0, 1);
1322    test("abcde", 2, 1, "abcdefghij", 5, 1, -3);
1323    test("abcde", 2, 1, "abcdefghij", 5, 2, -3);
1324    test("abcde", 2, 1, "abcdefghij", 5, 4, -3);
1325    test("abcde", 2, 1, "abcdefghij", 5, 5, -3);
1326    test("abcde", 2, 1, "abcdefghij", 5, 6, -3);
1327    test("abcde", 2, 1, "abcdefghij", 9, 0, 1);
1328    test("abcde", 2, 1, "abcdefghij", 9, 1, -7);
1329    test("abcde", 2, 1, "abcdefghij", 9, 2, -7);
1330    test("abcde", 2, 1, "abcdefghij", 10, 0, 1);
1331    test("abcde", 2, 1, "abcdefghij", 10, 1, 1);
1332    test("abcde", 2, 1, "abcdefghij", 11, 0, 0);
1333    test("abcde", 2, 1, "abcdefghijklmnopqrst", 0, 0, 1);
1334    test("abcde", 2, 1, "abcdefghijklmnopqrst", 0, 1, 2);
1335    test("abcde", 2, 1, "abcdefghijklmnopqrst", 0, 10, 2);
1336    test("abcde", 2, 1, "abcdefghijklmnopqrst", 0, 19, 2);
1337    test("abcde", 2, 1, "abcdefghijklmnopqrst", 0, 20, 2);
1338    test("abcde", 2, 1, "abcdefghijklmnopqrst", 0, 21, 2);
1339    test("abcde", 2, 1, "abcdefghijklmnopqrst", 1, 0, 1);
1340    test("abcde", 2, 1, "abcdefghijklmnopqrst", 1, 1, 1);
1341    test("abcde", 2, 1, "abcdefghijklmnopqrst", 1, 9, 1);
1342    test("abcde", 2, 1, "abcdefghijklmnopqrst", 1, 18, 1);
1343    test("abcde", 2, 1, "abcdefghijklmnopqrst", 1, 19, 1);
1344    test("abcde", 2, 1, "abcdefghijklmnopqrst", 1, 20, 1);
1345    test("abcde", 2, 1, "abcdefghijklmnopqrst", 10, 0, 1);
1346    test("abcde", 2, 1, "abcdefghijklmnopqrst", 10, 1, -8);
1347    test("abcde", 2, 1, "abcdefghijklmnopqrst", 10, 5, -8);
1348    test("abcde", 2, 1, "abcdefghijklmnopqrst", 10, 9, -8);
1349    test("abcde", 2, 1, "abcdefghijklmnopqrst", 10, 10, -8);
1350    test("abcde", 2, 1, "abcdefghijklmnopqrst", 10, 11, -8);
1351    test("abcde", 2, 1, "abcdefghijklmnopqrst", 19, 0, 1);
1352    test("abcde", 2, 1, "abcdefghijklmnopqrst", 19, 1, -17);
1353    test("abcde", 2, 1, "abcdefghijklmnopqrst", 19, 2, -17);
1354    test("abcde", 2, 1, "abcdefghijklmnopqrst", 20, 0, 1);
1355    test("abcde", 2, 1, "abcdefghijklmnopqrst", 20, 1, 1);
1356    test("abcde", 2, 1, "abcdefghijklmnopqrst", 21, 0, 0);
1357    test("abcde", 2, 2, "", 0, 0, 2);
1358    test("abcde", 2, 2, "", 0, 1, 2);
1359    test("abcde", 2, 2, "", 1, 0, 0);
1360    test("abcde", 2, 2, "abcde", 0, 0, 2);
1361    test("abcde", 2, 2, "abcde", 0, 1, 2);
1362    test("abcde", 2, 2, "abcde", 0, 2, 2);
1363    test("abcde", 2, 2, "abcde", 0, 4, 2);
1364    test("abcde", 2, 2, "abcde", 0, 5, 2);
1365    test("abcde", 2, 2, "abcde", 0, 6, 2);
1366    test("abcde", 2, 2, "abcde", 1, 0, 2);
1367    test("abcde", 2, 2, "abcde", 1, 1, 1);
1368    test("abcde", 2, 2, "abcde", 1, 2, 1);
1369    test("abcde", 2, 2, "abcde", 1, 3, 1);
1370    test("abcde", 2, 2, "abcde", 1, 4, 1);
1371    test("abcde", 2, 2, "abcde", 1, 5, 1);
1372    test("abcde", 2, 2, "abcde", 2, 0, 2);
1373    test("abcde", 2, 2, "abcde", 2, 1, 1);
1374    test("abcde", 2, 2, "abcde", 2, 2, 0);
1375    test("abcde", 2, 2, "abcde", 2, 3, -1);
1376    test("abcde", 2, 2, "abcde", 2, 4, -1);
1377    test("abcde", 2, 2, "abcde", 4, 0, 2);
1378    test("abcde", 2, 2, "abcde", 4, 1, -2);
1379    test("abcde", 2, 2, "abcde", 4, 2, -2);
1380    test("abcde", 2, 2, "abcde", 5, 0, 2);
1381    test("abcde", 2, 2, "abcde", 5, 1, 2);
1382    test("abcde", 2, 2, "abcde", 6, 0, 0);
1383    test("abcde", 2, 2, "abcdefghij", 0, 0, 2);
1384    test("abcde", 2, 2, "abcdefghij", 0, 1, 2);
1385    test("abcde", 2, 2, "abcdefghij", 0, 5, 2);
1386    test("abcde", 2, 2, "abcdefghij", 0, 9, 2);
1387    test("abcde", 2, 2, "abcdefghij", 0, 10, 2);
1388    test("abcde", 2, 2, "abcdefghij", 0, 11, 2);
1389    test("abcde", 2, 2, "abcdefghij", 1, 0, 2);
1390    test("abcde", 2, 2, "abcdefghij", 1, 1, 1);
1391    test("abcde", 2, 2, "abcdefghij", 1, 4, 1);
1392    test("abcde", 2, 2, "abcdefghij", 1, 8, 1);
1393    test("abcde", 2, 2, "abcdefghij", 1, 9, 1);
1394    test("abcde", 2, 2, "abcdefghij", 1, 10, 1);
1395    test("abcde", 2, 2, "abcdefghij", 5, 0, 2);
1396    test("abcde", 2, 2, "abcdefghij", 5, 1, -3);
1397    test("abcde", 2, 2, "abcdefghij", 5, 2, -3);
1398    test("abcde", 2, 2, "abcdefghij", 5, 4, -3);
1399}
1400
1401void test13()
1402{
1403    test("abcde", 2, 2, "abcdefghij", 5, 5, -3);
1404    test("abcde", 2, 2, "abcdefghij", 5, 6, -3);
1405    test("abcde", 2, 2, "abcdefghij", 9, 0, 2);
1406    test("abcde", 2, 2, "abcdefghij", 9, 1, -7);
1407    test("abcde", 2, 2, "abcdefghij", 9, 2, -7);
1408    test("abcde", 2, 2, "abcdefghij", 10, 0, 2);
1409    test("abcde", 2, 2, "abcdefghij", 10, 1, 2);
1410    test("abcde", 2, 2, "abcdefghij", 11, 0, 0);
1411    test("abcde", 2, 2, "abcdefghijklmnopqrst", 0, 0, 2);
1412    test("abcde", 2, 2, "abcdefghijklmnopqrst", 0, 1, 2);
1413    test("abcde", 2, 2, "abcdefghijklmnopqrst", 0, 10, 2);
1414    test("abcde", 2, 2, "abcdefghijklmnopqrst", 0, 19, 2);
1415    test("abcde", 2, 2, "abcdefghijklmnopqrst", 0, 20, 2);
1416    test("abcde", 2, 2, "abcdefghijklmnopqrst", 0, 21, 2);
1417    test("abcde", 2, 2, "abcdefghijklmnopqrst", 1, 0, 2);
1418    test("abcde", 2, 2, "abcdefghijklmnopqrst", 1, 1, 1);
1419    test("abcde", 2, 2, "abcdefghijklmnopqrst", 1, 9, 1);
1420    test("abcde", 2, 2, "abcdefghijklmnopqrst", 1, 18, 1);
1421    test("abcde", 2, 2, "abcdefghijklmnopqrst", 1, 19, 1);
1422    test("abcde", 2, 2, "abcdefghijklmnopqrst", 1, 20, 1);
1423    test("abcde", 2, 2, "abcdefghijklmnopqrst", 10, 0, 2);
1424    test("abcde", 2, 2, "abcdefghijklmnopqrst", 10, 1, -8);
1425    test("abcde", 2, 2, "abcdefghijklmnopqrst", 10, 5, -8);
1426    test("abcde", 2, 2, "abcdefghijklmnopqrst", 10, 9, -8);
1427    test("abcde", 2, 2, "abcdefghijklmnopqrst", 10, 10, -8);
1428    test("abcde", 2, 2, "abcdefghijklmnopqrst", 10, 11, -8);
1429    test("abcde", 2, 2, "abcdefghijklmnopqrst", 19, 0, 2);
1430    test("abcde", 2, 2, "abcdefghijklmnopqrst", 19, 1, -17);
1431    test("abcde", 2, 2, "abcdefghijklmnopqrst", 19, 2, -17);
1432    test("abcde", 2, 2, "abcdefghijklmnopqrst", 20, 0, 2);
1433    test("abcde", 2, 2, "abcdefghijklmnopqrst", 20, 1, 2);
1434    test("abcde", 2, 2, "abcdefghijklmnopqrst", 21, 0, 0);
1435    test("abcde", 2, 3, "", 0, 0, 3);
1436    test("abcde", 2, 3, "", 0, 1, 3);
1437    test("abcde", 2, 3, "", 1, 0, 0);
1438    test("abcde", 2, 3, "abcde", 0, 0, 3);
1439    test("abcde", 2, 3, "abcde", 0, 1, 2);
1440    test("abcde", 2, 3, "abcde", 0, 2, 2);
1441    test("abcde", 2, 3, "abcde", 0, 4, 2);
1442    test("abcde", 2, 3, "abcde", 0, 5, 2);
1443    test("abcde", 2, 3, "abcde", 0, 6, 2);
1444    test("abcde", 2, 3, "abcde", 1, 0, 3);
1445    test("abcde", 2, 3, "abcde", 1, 1, 1);
1446    test("abcde", 2, 3, "abcde", 1, 2, 1);
1447    test("abcde", 2, 3, "abcde", 1, 3, 1);
1448    test("abcde", 2, 3, "abcde", 1, 4, 1);
1449    test("abcde", 2, 3, "abcde", 1, 5, 1);
1450    test("abcde", 2, 3, "abcde", 2, 0, 3);
1451    test("abcde", 2, 3, "abcde", 2, 1, 2);
1452    test("abcde", 2, 3, "abcde", 2, 2, 1);
1453    test("abcde", 2, 3, "abcde", 2, 3, 0);
1454    test("abcde", 2, 3, "abcde", 2, 4, 0);
1455    test("abcde", 2, 3, "abcde", 4, 0, 3);
1456    test("abcde", 2, 3, "abcde", 4, 1, -2);
1457    test("abcde", 2, 3, "abcde", 4, 2, -2);
1458    test("abcde", 2, 3, "abcde", 5, 0, 3);
1459    test("abcde", 2, 3, "abcde", 5, 1, 3);
1460    test("abcde", 2, 3, "abcde", 6, 0, 0);
1461    test("abcde", 2, 3, "abcdefghij", 0, 0, 3);
1462    test("abcde", 2, 3, "abcdefghij", 0, 1, 2);
1463    test("abcde", 2, 3, "abcdefghij", 0, 5, 2);
1464    test("abcde", 2, 3, "abcdefghij", 0, 9, 2);
1465    test("abcde", 2, 3, "abcdefghij", 0, 10, 2);
1466    test("abcde", 2, 3, "abcdefghij", 0, 11, 2);
1467    test("abcde", 2, 3, "abcdefghij", 1, 0, 3);
1468    test("abcde", 2, 3, "abcdefghij", 1, 1, 1);
1469    test("abcde", 2, 3, "abcdefghij", 1, 4, 1);
1470    test("abcde", 2, 3, "abcdefghij", 1, 8, 1);
1471    test("abcde", 2, 3, "abcdefghij", 1, 9, 1);
1472    test("abcde", 2, 3, "abcdefghij", 1, 10, 1);
1473    test("abcde", 2, 3, "abcdefghij", 5, 0, 3);
1474    test("abcde", 2, 3, "abcdefghij", 5, 1, -3);
1475    test("abcde", 2, 3, "abcdefghij", 5, 2, -3);
1476    test("abcde", 2, 3, "abcdefghij", 5, 4, -3);
1477    test("abcde", 2, 3, "abcdefghij", 5, 5, -3);
1478    test("abcde", 2, 3, "abcdefghij", 5, 6, -3);
1479    test("abcde", 2, 3, "abcdefghij", 9, 0, 3);
1480    test("abcde", 2, 3, "abcdefghij", 9, 1, -7);
1481    test("abcde", 2, 3, "abcdefghij", 9, 2, -7);
1482    test("abcde", 2, 3, "abcdefghij", 10, 0, 3);
1483    test("abcde", 2, 3, "abcdefghij", 10, 1, 3);
1484    test("abcde", 2, 3, "abcdefghij", 11, 0, 0);
1485    test("abcde", 2, 3, "abcdefghijklmnopqrst", 0, 0, 3);
1486    test("abcde", 2, 3, "abcdefghijklmnopqrst", 0, 1, 2);
1487    test("abcde", 2, 3, "abcdefghijklmnopqrst", 0, 10, 2);
1488    test("abcde", 2, 3, "abcdefghijklmnopqrst", 0, 19, 2);
1489    test("abcde", 2, 3, "abcdefghijklmnopqrst", 0, 20, 2);
1490    test("abcde", 2, 3, "abcdefghijklmnopqrst", 0, 21, 2);
1491    test("abcde", 2, 3, "abcdefghijklmnopqrst", 1, 0, 3);
1492    test("abcde", 2, 3, "abcdefghijklmnopqrst", 1, 1, 1);
1493    test("abcde", 2, 3, "abcdefghijklmnopqrst", 1, 9, 1);
1494    test("abcde", 2, 3, "abcdefghijklmnopqrst", 1, 18, 1);
1495    test("abcde", 2, 3, "abcdefghijklmnopqrst", 1, 19, 1);
1496    test("abcde", 2, 3, "abcdefghijklmnopqrst", 1, 20, 1);
1497    test("abcde", 2, 3, "abcdefghijklmnopqrst", 10, 0, 3);
1498    test("abcde", 2, 3, "abcdefghijklmnopqrst", 10, 1, -8);
1499    test("abcde", 2, 3, "abcdefghijklmnopqrst", 10, 5, -8);
1500    test("abcde", 2, 3, "abcdefghijklmnopqrst", 10, 9, -8);
1501    test("abcde", 2, 3, "abcdefghijklmnopqrst", 10, 10, -8);
1502    test("abcde", 2, 3, "abcdefghijklmnopqrst", 10, 11, -8);
1503}
1504
1505void test14()
1506{
1507    test("abcde", 2, 3, "abcdefghijklmnopqrst", 19, 0, 3);
1508    test("abcde", 2, 3, "abcdefghijklmnopqrst", 19, 1, -17);
1509    test("abcde", 2, 3, "abcdefghijklmnopqrst", 19, 2, -17);
1510    test("abcde", 2, 3, "abcdefghijklmnopqrst", 20, 0, 3);
1511    test("abcde", 2, 3, "abcdefghijklmnopqrst", 20, 1, 3);
1512    test("abcde", 2, 3, "abcdefghijklmnopqrst", 21, 0, 0);
1513    test("abcde", 2, 4, "", 0, 0, 3);
1514    test("abcde", 2, 4, "", 0, 1, 3);
1515    test("abcde", 2, 4, "", 1, 0, 0);
1516    test("abcde", 2, 4, "abcde", 0, 0, 3);
1517    test("abcde", 2, 4, "abcde", 0, 1, 2);
1518    test("abcde", 2, 4, "abcde", 0, 2, 2);
1519    test("abcde", 2, 4, "abcde", 0, 4, 2);
1520    test("abcde", 2, 4, "abcde", 0, 5, 2);
1521    test("abcde", 2, 4, "abcde", 0, 6, 2);
1522    test("abcde", 2, 4, "abcde", 1, 0, 3);
1523    test("abcde", 2, 4, "abcde", 1, 1, 1);
1524    test("abcde", 2, 4, "abcde", 1, 2, 1);
1525    test("abcde", 2, 4, "abcde", 1, 3, 1);
1526    test("abcde", 2, 4, "abcde", 1, 4, 1);
1527    test("abcde", 2, 4, "abcde", 1, 5, 1);
1528    test("abcde", 2, 4, "abcde", 2, 0, 3);
1529    test("abcde", 2, 4, "abcde", 2, 1, 2);
1530    test("abcde", 2, 4, "abcde", 2, 2, 1);
1531    test("abcde", 2, 4, "abcde", 2, 3, 0);
1532    test("abcde", 2, 4, "abcde", 2, 4, 0);
1533    test("abcde", 2, 4, "abcde", 4, 0, 3);
1534    test("abcde", 2, 4, "abcde", 4, 1, -2);
1535    test("abcde", 2, 4, "abcde", 4, 2, -2);
1536    test("abcde", 2, 4, "abcde", 5, 0, 3);
1537    test("abcde", 2, 4, "abcde", 5, 1, 3);
1538    test("abcde", 2, 4, "abcde", 6, 0, 0);
1539    test("abcde", 2, 4, "abcdefghij", 0, 0, 3);
1540    test("abcde", 2, 4, "abcdefghij", 0, 1, 2);
1541    test("abcde", 2, 4, "abcdefghij", 0, 5, 2);
1542    test("abcde", 2, 4, "abcdefghij", 0, 9, 2);
1543    test("abcde", 2, 4, "abcdefghij", 0, 10, 2);
1544    test("abcde", 2, 4, "abcdefghij", 0, 11, 2);
1545    test("abcde", 2, 4, "abcdefghij", 1, 0, 3);
1546    test("abcde", 2, 4, "abcdefghij", 1, 1, 1);
1547    test("abcde", 2, 4, "abcdefghij", 1, 4, 1);
1548    test("abcde", 2, 4, "abcdefghij", 1, 8, 1);
1549    test("abcde", 2, 4, "abcdefghij", 1, 9, 1);
1550    test("abcde", 2, 4, "abcdefghij", 1, 10, 1);
1551    test("abcde", 2, 4, "abcdefghij", 5, 0, 3);
1552    test("abcde", 2, 4, "abcdefghij", 5, 1, -3);
1553    test("abcde", 2, 4, "abcdefghij", 5, 2, -3);
1554    test("abcde", 2, 4, "abcdefghij", 5, 4, -3);
1555    test("abcde", 2, 4, "abcdefghij", 5, 5, -3);
1556    test("abcde", 2, 4, "abcdefghij", 5, 6, -3);
1557    test("abcde", 2, 4, "abcdefghij", 9, 0, 3);
1558    test("abcde", 2, 4, "abcdefghij", 9, 1, -7);
1559    test("abcde", 2, 4, "abcdefghij", 9, 2, -7);
1560    test("abcde", 2, 4, "abcdefghij", 10, 0, 3);
1561    test("abcde", 2, 4, "abcdefghij", 10, 1, 3);
1562    test("abcde", 2, 4, "abcdefghij", 11, 0, 0);
1563    test("abcde", 2, 4, "abcdefghijklmnopqrst", 0, 0, 3);
1564    test("abcde", 2, 4, "abcdefghijklmnopqrst", 0, 1, 2);
1565    test("abcde", 2, 4, "abcdefghijklmnopqrst", 0, 10, 2);
1566    test("abcde", 2, 4, "abcdefghijklmnopqrst", 0, 19, 2);
1567    test("abcde", 2, 4, "abcdefghijklmnopqrst", 0, 20, 2);
1568    test("abcde", 2, 4, "abcdefghijklmnopqrst", 0, 21, 2);
1569    test("abcde", 2, 4, "abcdefghijklmnopqrst", 1, 0, 3);
1570    test("abcde", 2, 4, "abcdefghijklmnopqrst", 1, 1, 1);
1571    test("abcde", 2, 4, "abcdefghijklmnopqrst", 1, 9, 1);
1572    test("abcde", 2, 4, "abcdefghijklmnopqrst", 1, 18, 1);
1573    test("abcde", 2, 4, "abcdefghijklmnopqrst", 1, 19, 1);
1574    test("abcde", 2, 4, "abcdefghijklmnopqrst", 1, 20, 1);
1575    test("abcde", 2, 4, "abcdefghijklmnopqrst", 10, 0, 3);
1576    test("abcde", 2, 4, "abcdefghijklmnopqrst", 10, 1, -8);
1577    test("abcde", 2, 4, "abcdefghijklmnopqrst", 10, 5, -8);
1578    test("abcde", 2, 4, "abcdefghijklmnopqrst", 10, 9, -8);
1579    test("abcde", 2, 4, "abcdefghijklmnopqrst", 10, 10, -8);
1580    test("abcde", 2, 4, "abcdefghijklmnopqrst", 10, 11, -8);
1581    test("abcde", 2, 4, "abcdefghijklmnopqrst", 19, 0, 3);
1582    test("abcde", 2, 4, "abcdefghijklmnopqrst", 19, 1, -17);
1583    test("abcde", 2, 4, "abcdefghijklmnopqrst", 19, 2, -17);
1584    test("abcde", 2, 4, "abcdefghijklmnopqrst", 20, 0, 3);
1585    test("abcde", 2, 4, "abcdefghijklmnopqrst", 20, 1, 3);
1586    test("abcde", 2, 4, "abcdefghijklmnopqrst", 21, 0, 0);
1587    test("abcde", 4, 0, "", 0, 0, 0);
1588    test("abcde", 4, 0, "", 0, 1, 0);
1589    test("abcde", 4, 0, "", 1, 0, 0);
1590    test("abcde", 4, 0, "abcde", 0, 0, 0);
1591    test("abcde", 4, 0, "abcde", 0, 1, -1);
1592    test("abcde", 4, 0, "abcde", 0, 2, -2);
1593    test("abcde", 4, 0, "abcde", 0, 4, -4);
1594    test("abcde", 4, 0, "abcde", 0, 5, -5);
1595    test("abcde", 4, 0, "abcde", 0, 6, -5);
1596    test("abcde", 4, 0, "abcde", 1, 0, 0);
1597    test("abcde", 4, 0, "abcde", 1, 1, -1);
1598    test("abcde", 4, 0, "abcde", 1, 2, -2);
1599    test("abcde", 4, 0, "abcde", 1, 3, -3);
1600    test("abcde", 4, 0, "abcde", 1, 4, -4);
1601    test("abcde", 4, 0, "abcde", 1, 5, -4);
1602    test("abcde", 4, 0, "abcde", 2, 0, 0);
1603    test("abcde", 4, 0, "abcde", 2, 1, -1);
1604    test("abcde", 4, 0, "abcde", 2, 2, -2);
1605    test("abcde", 4, 0, "abcde", 2, 3, -3);
1606    test("abcde", 4, 0, "abcde", 2, 4, -3);
1607}
1608
1609void test15()
1610{
1611    test("abcde", 4, 0, "abcde", 4, 0, 0);
1612    test("abcde", 4, 0, "abcde", 4, 1, -1);
1613    test("abcde", 4, 0, "abcde", 4, 2, -1);
1614    test("abcde", 4, 0, "abcde", 5, 0, 0);
1615    test("abcde", 4, 0, "abcde", 5, 1, 0);
1616    test("abcde", 4, 0, "abcde", 6, 0, 0);
1617    test("abcde", 4, 0, "abcdefghij", 0, 0, 0);
1618    test("abcde", 4, 0, "abcdefghij", 0, 1, -1);
1619    test("abcde", 4, 0, "abcdefghij", 0, 5, -5);
1620    test("abcde", 4, 0, "abcdefghij", 0, 9, -9);
1621    test("abcde", 4, 0, "abcdefghij", 0, 10, -10);
1622    test("abcde", 4, 0, "abcdefghij", 0, 11, -10);
1623    test("abcde", 4, 0, "abcdefghij", 1, 0, 0);
1624    test("abcde", 4, 0, "abcdefghij", 1, 1, -1);
1625    test("abcde", 4, 0, "abcdefghij", 1, 4, -4);
1626    test("abcde", 4, 0, "abcdefghij", 1, 8, -8);
1627    test("abcde", 4, 0, "abcdefghij", 1, 9, -9);
1628    test("abcde", 4, 0, "abcdefghij", 1, 10, -9);
1629    test("abcde", 4, 0, "abcdefghij", 5, 0, 0);
1630    test("abcde", 4, 0, "abcdefghij", 5, 1, -1);
1631    test("abcde", 4, 0, "abcdefghij", 5, 2, -2);
1632    test("abcde", 4, 0, "abcdefghij", 5, 4, -4);
1633    test("abcde", 4, 0, "abcdefghij", 5, 5, -5);
1634    test("abcde", 4, 0, "abcdefghij", 5, 6, -5);
1635    test("abcde", 4, 0, "abcdefghij", 9, 0, 0);
1636    test("abcde", 4, 0, "abcdefghij", 9, 1, -1);
1637    test("abcde", 4, 0, "abcdefghij", 9, 2, -1);
1638    test("abcde", 4, 0, "abcdefghij", 10, 0, 0);
1639    test("abcde", 4, 0, "abcdefghij", 10, 1, 0);
1640    test("abcde", 4, 0, "abcdefghij", 11, 0, 0);
1641    test("abcde", 4, 0, "abcdefghijklmnopqrst", 0, 0, 0);
1642    test("abcde", 4, 0, "abcdefghijklmnopqrst", 0, 1, -1);
1643    test("abcde", 4, 0, "abcdefghijklmnopqrst", 0, 10, -10);
1644    test("abcde", 4, 0, "abcdefghijklmnopqrst", 0, 19, -19);
1645    test("abcde", 4, 0, "abcdefghijklmnopqrst", 0, 20, -20);
1646    test("abcde", 4, 0, "abcdefghijklmnopqrst", 0, 21, -20);
1647    test("abcde", 4, 0, "abcdefghijklmnopqrst", 1, 0, 0);
1648    test("abcde", 4, 0, "abcdefghijklmnopqrst", 1, 1, -1);
1649    test("abcde", 4, 0, "abcdefghijklmnopqrst", 1, 9, -9);
1650    test("abcde", 4, 0, "abcdefghijklmnopqrst", 1, 18, -18);
1651    test("abcde", 4, 0, "abcdefghijklmnopqrst", 1, 19, -19);
1652    test("abcde", 4, 0, "abcdefghijklmnopqrst", 1, 20, -19);
1653    test("abcde", 4, 0, "abcdefghijklmnopqrst", 10, 0, 0);
1654    test("abcde", 4, 0, "abcdefghijklmnopqrst", 10, 1, -1);
1655    test("abcde", 4, 0, "abcdefghijklmnopqrst", 10, 5, -5);
1656    test("abcde", 4, 0, "abcdefghijklmnopqrst", 10, 9, -9);
1657    test("abcde", 4, 0, "abcdefghijklmnopqrst", 10, 10, -10);
1658    test("abcde", 4, 0, "abcdefghijklmnopqrst", 10, 11, -10);
1659    test("abcde", 4, 0, "abcdefghijklmnopqrst", 19, 0, 0);
1660    test("abcde", 4, 0, "abcdefghijklmnopqrst", 19, 1, -1);
1661    test("abcde", 4, 0, "abcdefghijklmnopqrst", 19, 2, -1);
1662    test("abcde", 4, 0, "abcdefghijklmnopqrst", 20, 0, 0);
1663    test("abcde", 4, 0, "abcdefghijklmnopqrst", 20, 1, 0);
1664    test("abcde", 4, 0, "abcdefghijklmnopqrst", 21, 0, 0);
1665    test("abcde", 4, 1, "", 0, 0, 1);
1666    test("abcde", 4, 1, "", 0, 1, 1);
1667    test("abcde", 4, 1, "", 1, 0, 0);
1668    test("abcde", 4, 1, "abcde", 0, 0, 1);
1669    test("abcde", 4, 1, "abcde", 0, 1, 4);
1670    test("abcde", 4, 1, "abcde", 0, 2, 4);
1671    test("abcde", 4, 1, "abcde", 0, 4, 4);
1672    test("abcde", 4, 1, "abcde", 0, 5, 4);
1673    test("abcde", 4, 1, "abcde", 0, 6, 4);
1674    test("abcde", 4, 1, "abcde", 1, 0, 1);
1675    test("abcde", 4, 1, "abcde", 1, 1, 3);
1676    test("abcde", 4, 1, "abcde", 1, 2, 3);
1677    test("abcde", 4, 1, "abcde", 1, 3, 3);
1678    test("abcde", 4, 1, "abcde", 1, 4, 3);
1679    test("abcde", 4, 1, "abcde", 1, 5, 3);
1680    test("abcde", 4, 1, "abcde", 2, 0, 1);
1681    test("abcde", 4, 1, "abcde", 2, 1, 2);
1682    test("abcde", 4, 1, "abcde", 2, 2, 2);
1683    test("abcde", 4, 1, "abcde", 2, 3, 2);
1684    test("abcde", 4, 1, "abcde", 2, 4, 2);
1685    test("abcde", 4, 1, "abcde", 4, 0, 1);
1686    test("abcde", 4, 1, "abcde", 4, 1, 0);
1687    test("abcde", 4, 1, "abcde", 4, 2, 0);
1688    test("abcde", 4, 1, "abcde", 5, 0, 1);
1689    test("abcde", 4, 1, "abcde", 5, 1, 1);
1690    test("abcde", 4, 1, "abcde", 6, 0, 0);
1691    test("abcde", 4, 1, "abcdefghij", 0, 0, 1);
1692    test("abcde", 4, 1, "abcdefghij", 0, 1, 4);
1693    test("abcde", 4, 1, "abcdefghij", 0, 5, 4);
1694    test("abcde", 4, 1, "abcdefghij", 0, 9, 4);
1695    test("abcde", 4, 1, "abcdefghij", 0, 10, 4);
1696    test("abcde", 4, 1, "abcdefghij", 0, 11, 4);
1697    test("abcde", 4, 1, "abcdefghij", 1, 0, 1);
1698    test("abcde", 4, 1, "abcdefghij", 1, 1, 3);
1699    test("abcde", 4, 1, "abcdefghij", 1, 4, 3);
1700    test("abcde", 4, 1, "abcdefghij", 1, 8, 3);
1701    test("abcde", 4, 1, "abcdefghij", 1, 9, 3);
1702    test("abcde", 4, 1, "abcdefghij", 1, 10, 3);
1703    test("abcde", 4, 1, "abcdefghij", 5, 0, 1);
1704    test("abcde", 4, 1, "abcdefghij", 5, 1, -1);
1705    test("abcde", 4, 1, "abcdefghij", 5, 2, -1);
1706    test("abcde", 4, 1, "abcdefghij", 5, 4, -1);
1707    test("abcde", 4, 1, "abcdefghij", 5, 5, -1);
1708    test("abcde", 4, 1, "abcdefghij", 5, 6, -1);
1709    test("abcde", 4, 1, "abcdefghij", 9, 0, 1);
1710    test("abcde", 4, 1, "abcdefghij", 9, 1, -5);
1711}
1712
1713void test16()
1714{
1715    test("abcde", 4, 1, "abcdefghij", 9, 2, -5);
1716    test("abcde", 4, 1, "abcdefghij", 10, 0, 1);
1717    test("abcde", 4, 1, "abcdefghij", 10, 1, 1);
1718    test("abcde", 4, 1, "abcdefghij", 11, 0, 0);
1719    test("abcde", 4, 1, "abcdefghijklmnopqrst", 0, 0, 1);
1720    test("abcde", 4, 1, "abcdefghijklmnopqrst", 0, 1, 4);
1721    test("abcde", 4, 1, "abcdefghijklmnopqrst", 0, 10, 4);
1722    test("abcde", 4, 1, "abcdefghijklmnopqrst", 0, 19, 4);
1723    test("abcde", 4, 1, "abcdefghijklmnopqrst", 0, 20, 4);
1724    test("abcde", 4, 1, "abcdefghijklmnopqrst", 0, 21, 4);
1725    test("abcde", 4, 1, "abcdefghijklmnopqrst", 1, 0, 1);
1726    test("abcde", 4, 1, "abcdefghijklmnopqrst", 1, 1, 3);
1727    test("abcde", 4, 1, "abcdefghijklmnopqrst", 1, 9, 3);
1728    test("abcde", 4, 1, "abcdefghijklmnopqrst", 1, 18, 3);
1729    test("abcde", 4, 1, "abcdefghijklmnopqrst", 1, 19, 3);
1730    test("abcde", 4, 1, "abcdefghijklmnopqrst", 1, 20, 3);
1731    test("abcde", 4, 1, "abcdefghijklmnopqrst", 10, 0, 1);
1732    test("abcde", 4, 1, "abcdefghijklmnopqrst", 10, 1, -6);
1733    test("abcde", 4, 1, "abcdefghijklmnopqrst", 10, 5, -6);
1734    test("abcde", 4, 1, "abcdefghijklmnopqrst", 10, 9, -6);
1735    test("abcde", 4, 1, "abcdefghijklmnopqrst", 10, 10, -6);
1736    test("abcde", 4, 1, "abcdefghijklmnopqrst", 10, 11, -6);
1737    test("abcde", 4, 1, "abcdefghijklmnopqrst", 19, 0, 1);
1738    test("abcde", 4, 1, "abcdefghijklmnopqrst", 19, 1, -15);
1739    test("abcde", 4, 1, "abcdefghijklmnopqrst", 19, 2, -15);
1740    test("abcde", 4, 1, "abcdefghijklmnopqrst", 20, 0, 1);
1741    test("abcde", 4, 1, "abcdefghijklmnopqrst", 20, 1, 1);
1742    test("abcde", 4, 1, "abcdefghijklmnopqrst", 21, 0, 0);
1743    test("abcde", 4, 2, "", 0, 0, 1);
1744    test("abcde", 4, 2, "", 0, 1, 1);
1745    test("abcde", 4, 2, "", 1, 0, 0);
1746    test("abcde", 4, 2, "abcde", 0, 0, 1);
1747    test("abcde", 4, 2, "abcde", 0, 1, 4);
1748    test("abcde", 4, 2, "abcde", 0, 2, 4);
1749    test("abcde", 4, 2, "abcde", 0, 4, 4);
1750    test("abcde", 4, 2, "abcde", 0, 5, 4);
1751    test("abcde", 4, 2, "abcde", 0, 6, 4);
1752    test("abcde", 4, 2, "abcde", 1, 0, 1);
1753    test("abcde", 4, 2, "abcde", 1, 1, 3);
1754    test("abcde", 4, 2, "abcde", 1, 2, 3);
1755    test("abcde", 4, 2, "abcde", 1, 3, 3);
1756    test("abcde", 4, 2, "abcde", 1, 4, 3);
1757    test("abcde", 4, 2, "abcde", 1, 5, 3);
1758    test("abcde", 4, 2, "abcde", 2, 0, 1);
1759    test("abcde", 4, 2, "abcde", 2, 1, 2);
1760    test("abcde", 4, 2, "abcde", 2, 2, 2);
1761    test("abcde", 4, 2, "abcde", 2, 3, 2);
1762    test("abcde", 4, 2, "abcde", 2, 4, 2);
1763    test("abcde", 4, 2, "abcde", 4, 0, 1);
1764    test("abcde", 4, 2, "abcde", 4, 1, 0);
1765    test("abcde", 4, 2, "abcde", 4, 2, 0);
1766    test("abcde", 4, 2, "abcde", 5, 0, 1);
1767    test("abcde", 4, 2, "abcde", 5, 1, 1);
1768    test("abcde", 4, 2, "abcde", 6, 0, 0);
1769    test("abcde", 4, 2, "abcdefghij", 0, 0, 1);
1770    test("abcde", 4, 2, "abcdefghij", 0, 1, 4);
1771    test("abcde", 4, 2, "abcdefghij", 0, 5, 4);
1772    test("abcde", 4, 2, "abcdefghij", 0, 9, 4);
1773    test("abcde", 4, 2, "abcdefghij", 0, 10, 4);
1774    test("abcde", 4, 2, "abcdefghij", 0, 11, 4);
1775    test("abcde", 4, 2, "abcdefghij", 1, 0, 1);
1776    test("abcde", 4, 2, "abcdefghij", 1, 1, 3);
1777    test("abcde", 4, 2, "abcdefghij", 1, 4, 3);
1778    test("abcde", 4, 2, "abcdefghij", 1, 8, 3);
1779    test("abcde", 4, 2, "abcdefghij", 1, 9, 3);
1780    test("abcde", 4, 2, "abcdefghij", 1, 10, 3);
1781    test("abcde", 4, 2, "abcdefghij", 5, 0, 1);
1782    test("abcde", 4, 2, "abcdefghij", 5, 1, -1);
1783    test("abcde", 4, 2, "abcdefghij", 5, 2, -1);
1784    test("abcde", 4, 2, "abcdefghij", 5, 4, -1);
1785    test("abcde", 4, 2, "abcdefghij", 5, 5, -1);
1786    test("abcde", 4, 2, "abcdefghij", 5, 6, -1);
1787    test("abcde", 4, 2, "abcdefghij", 9, 0, 1);
1788    test("abcde", 4, 2, "abcdefghij", 9, 1, -5);
1789    test("abcde", 4, 2, "abcdefghij", 9, 2, -5);
1790    test("abcde", 4, 2, "abcdefghij", 10, 0, 1);
1791    test("abcde", 4, 2, "abcdefghij", 10, 1, 1);
1792    test("abcde", 4, 2, "abcdefghij", 11, 0, 0);
1793    test("abcde", 4, 2, "abcdefghijklmnopqrst", 0, 0, 1);
1794    test("abcde", 4, 2, "abcdefghijklmnopqrst", 0, 1, 4);
1795    test("abcde", 4, 2, "abcdefghijklmnopqrst", 0, 10, 4);
1796    test("abcde", 4, 2, "abcdefghijklmnopqrst", 0, 19, 4);
1797    test("abcde", 4, 2, "abcdefghijklmnopqrst", 0, 20, 4);
1798    test("abcde", 4, 2, "abcdefghijklmnopqrst", 0, 21, 4);
1799    test("abcde", 4, 2, "abcdefghijklmnopqrst", 1, 0, 1);
1800    test("abcde", 4, 2, "abcdefghijklmnopqrst", 1, 1, 3);
1801    test("abcde", 4, 2, "abcdefghijklmnopqrst", 1, 9, 3);
1802    test("abcde", 4, 2, "abcdefghijklmnopqrst", 1, 18, 3);
1803    test("abcde", 4, 2, "abcdefghijklmnopqrst", 1, 19, 3);
1804    test("abcde", 4, 2, "abcdefghijklmnopqrst", 1, 20, 3);
1805    test("abcde", 4, 2, "abcdefghijklmnopqrst", 10, 0, 1);
1806    test("abcde", 4, 2, "abcdefghijklmnopqrst", 10, 1, -6);
1807    test("abcde", 4, 2, "abcdefghijklmnopqrst", 10, 5, -6);
1808    test("abcde", 4, 2, "abcdefghijklmnopqrst", 10, 9, -6);
1809    test("abcde", 4, 2, "abcdefghijklmnopqrst", 10, 10, -6);
1810    test("abcde", 4, 2, "abcdefghijklmnopqrst", 10, 11, -6);
1811    test("abcde", 4, 2, "abcdefghijklmnopqrst", 19, 0, 1);
1812    test("abcde", 4, 2, "abcdefghijklmnopqrst", 19, 1, -15);
1813    test("abcde", 4, 2, "abcdefghijklmnopqrst", 19, 2, -15);
1814    test("abcde", 4, 2, "abcdefghijklmnopqrst", 20, 0, 1);
1815}
1816
1817void test17()
1818{
1819    test("abcde", 4, 2, "abcdefghijklmnopqrst", 20, 1, 1);
1820    test("abcde", 4, 2, "abcdefghijklmnopqrst", 21, 0, 0);
1821    test("abcde", 5, 0, "", 0, 0, 0);
1822    test("abcde", 5, 0, "", 0, 1, 0);
1823    test("abcde", 5, 0, "", 1, 0, 0);
1824    test("abcde", 5, 0, "abcde", 0, 0, 0);
1825    test("abcde", 5, 0, "abcde", 0, 1, -1);
1826    test("abcde", 5, 0, "abcde", 0, 2, -2);
1827    test("abcde", 5, 0, "abcde", 0, 4, -4);
1828    test("abcde", 5, 0, "abcde", 0, 5, -5);
1829    test("abcde", 5, 0, "abcde", 0, 6, -5);
1830    test("abcde", 5, 0, "abcde", 1, 0, 0);
1831    test("abcde", 5, 0, "abcde", 1, 1, -1);
1832    test("abcde", 5, 0, "abcde", 1, 2, -2);
1833    test("abcde", 5, 0, "abcde", 1, 3, -3);
1834    test("abcde", 5, 0, "abcde", 1, 4, -4);
1835    test("abcde", 5, 0, "abcde", 1, 5, -4);
1836    test("abcde", 5, 0, "abcde", 2, 0, 0);
1837    test("abcde", 5, 0, "abcde", 2, 1, -1);
1838    test("abcde", 5, 0, "abcde", 2, 2, -2);
1839    test("abcde", 5, 0, "abcde", 2, 3, -3);
1840    test("abcde", 5, 0, "abcde", 2, 4, -3);
1841    test("abcde", 5, 0, "abcde", 4, 0, 0);
1842    test("abcde", 5, 0, "abcde", 4, 1, -1);
1843    test("abcde", 5, 0, "abcde", 4, 2, -1);
1844    test("abcde", 5, 0, "abcde", 5, 0, 0);
1845    test("abcde", 5, 0, "abcde", 5, 1, 0);
1846    test("abcde", 5, 0, "abcde", 6, 0, 0);
1847    test("abcde", 5, 0, "abcdefghij", 0, 0, 0);
1848    test("abcde", 5, 0, "abcdefghij", 0, 1, -1);
1849    test("abcde", 5, 0, "abcdefghij", 0, 5, -5);
1850    test("abcde", 5, 0, "abcdefghij", 0, 9, -9);
1851    test("abcde", 5, 0, "abcdefghij", 0, 10, -10);
1852    test("abcde", 5, 0, "abcdefghij", 0, 11, -10);
1853    test("abcde", 5, 0, "abcdefghij", 1, 0, 0);
1854    test("abcde", 5, 0, "abcdefghij", 1, 1, -1);
1855    test("abcde", 5, 0, "abcdefghij", 1, 4, -4);
1856    test("abcde", 5, 0, "abcdefghij", 1, 8, -8);
1857    test("abcde", 5, 0, "abcdefghij", 1, 9, -9);
1858    test("abcde", 5, 0, "abcdefghij", 1, 10, -9);
1859    test("abcde", 5, 0, "abcdefghij", 5, 0, 0);
1860    test("abcde", 5, 0, "abcdefghij", 5, 1, -1);
1861    test("abcde", 5, 0, "abcdefghij", 5, 2, -2);
1862    test("abcde", 5, 0, "abcdefghij", 5, 4, -4);
1863    test("abcde", 5, 0, "abcdefghij", 5, 5, -5);
1864    test("abcde", 5, 0, "abcdefghij", 5, 6, -5);
1865    test("abcde", 5, 0, "abcdefghij", 9, 0, 0);
1866    test("abcde", 5, 0, "abcdefghij", 9, 1, -1);
1867    test("abcde", 5, 0, "abcdefghij", 9, 2, -1);
1868    test("abcde", 5, 0, "abcdefghij", 10, 0, 0);
1869    test("abcde", 5, 0, "abcdefghij", 10, 1, 0);
1870    test("abcde", 5, 0, "abcdefghij", 11, 0, 0);
1871    test("abcde", 5, 0, "abcdefghijklmnopqrst", 0, 0, 0);
1872    test("abcde", 5, 0, "abcdefghijklmnopqrst", 0, 1, -1);
1873    test("abcde", 5, 0, "abcdefghijklmnopqrst", 0, 10, -10);
1874    test("abcde", 5, 0, "abcdefghijklmnopqrst", 0, 19, -19);
1875    test("abcde", 5, 0, "abcdefghijklmnopqrst", 0, 20, -20);
1876    test("abcde", 5, 0, "abcdefghijklmnopqrst", 0, 21, -20);
1877    test("abcde", 5, 0, "abcdefghijklmnopqrst", 1, 0, 0);
1878    test("abcde", 5, 0, "abcdefghijklmnopqrst", 1, 1, -1);
1879    test("abcde", 5, 0, "abcdefghijklmnopqrst", 1, 9, -9);
1880    test("abcde", 5, 0, "abcdefghijklmnopqrst", 1, 18, -18);
1881    test("abcde", 5, 0, "abcdefghijklmnopqrst", 1, 19, -19);
1882    test("abcde", 5, 0, "abcdefghijklmnopqrst", 1, 20, -19);
1883    test("abcde", 5, 0, "abcdefghijklmnopqrst", 10, 0, 0);
1884    test("abcde", 5, 0, "abcdefghijklmnopqrst", 10, 1, -1);
1885    test("abcde", 5, 0, "abcdefghijklmnopqrst", 10, 5, -5);
1886    test("abcde", 5, 0, "abcdefghijklmnopqrst", 10, 9, -9);
1887    test("abcde", 5, 0, "abcdefghijklmnopqrst", 10, 10, -10);
1888    test("abcde", 5, 0, "abcdefghijklmnopqrst", 10, 11, -10);
1889    test("abcde", 5, 0, "abcdefghijklmnopqrst", 19, 0, 0);
1890    test("abcde", 5, 0, "abcdefghijklmnopqrst", 19, 1, -1);
1891    test("abcde", 5, 0, "abcdefghijklmnopqrst", 19, 2, -1);
1892    test("abcde", 5, 0, "abcdefghijklmnopqrst", 20, 0, 0);
1893    test("abcde", 5, 0, "abcdefghijklmnopqrst", 20, 1, 0);
1894    test("abcde", 5, 0, "abcdefghijklmnopqrst", 21, 0, 0);
1895    test("abcde", 5, 1, "", 0, 0, 0);
1896    test("abcde", 5, 1, "", 0, 1, 0);
1897    test("abcde", 5, 1, "", 1, 0, 0);
1898    test("abcde", 5, 1, "abcde", 0, 0, 0);
1899    test("abcde", 5, 1, "abcde", 0, 1, -1);
1900    test("abcde", 5, 1, "abcde", 0, 2, -2);
1901    test("abcde", 5, 1, "abcde", 0, 4, -4);
1902    test("abcde", 5, 1, "abcde", 0, 5, -5);
1903    test("abcde", 5, 1, "abcde", 0, 6, -5);
1904    test("abcde", 5, 1, "abcde", 1, 0, 0);
1905    test("abcde", 5, 1, "abcde", 1, 1, -1);
1906    test("abcde", 5, 1, "abcde", 1, 2, -2);
1907    test("abcde", 5, 1, "abcde", 1, 3, -3);
1908    test("abcde", 5, 1, "abcde", 1, 4, -4);
1909    test("abcde", 5, 1, "abcde", 1, 5, -4);
1910    test("abcde", 5, 1, "abcde", 2, 0, 0);
1911    test("abcde", 5, 1, "abcde", 2, 1, -1);
1912    test("abcde", 5, 1, "abcde", 2, 2, -2);
1913    test("abcde", 5, 1, "abcde", 2, 3, -3);
1914    test("abcde", 5, 1, "abcde", 2, 4, -3);
1915    test("abcde", 5, 1, "abcde", 4, 0, 0);
1916    test("abcde", 5, 1, "abcde", 4, 1, -1);
1917    test("abcde", 5, 1, "abcde", 4, 2, -1);
1918    test("abcde", 5, 1, "abcde", 5, 0, 0);
1919}
1920
1921void test18()
1922{
1923    test("abcde", 5, 1, "abcde", 5, 1, 0);
1924    test("abcde", 5, 1, "abcde", 6, 0, 0);
1925    test("abcde", 5, 1, "abcdefghij", 0, 0, 0);
1926    test("abcde", 5, 1, "abcdefghij", 0, 1, -1);
1927    test("abcde", 5, 1, "abcdefghij", 0, 5, -5);
1928    test("abcde", 5, 1, "abcdefghij", 0, 9, -9);
1929    test("abcde", 5, 1, "abcdefghij", 0, 10, -10);
1930    test("abcde", 5, 1, "abcdefghij", 0, 11, -10);
1931    test("abcde", 5, 1, "abcdefghij", 1, 0, 0);
1932    test("abcde", 5, 1, "abcdefghij", 1, 1, -1);
1933    test("abcde", 5, 1, "abcdefghij", 1, 4, -4);
1934    test("abcde", 5, 1, "abcdefghij", 1, 8, -8);
1935    test("abcde", 5, 1, "abcdefghij", 1, 9, -9);
1936    test("abcde", 5, 1, "abcdefghij", 1, 10, -9);
1937    test("abcde", 5, 1, "abcdefghij", 5, 0, 0);
1938    test("abcde", 5, 1, "abcdefghij", 5, 1, -1);
1939    test("abcde", 5, 1, "abcdefghij", 5, 2, -2);
1940    test("abcde", 5, 1, "abcdefghij", 5, 4, -4);
1941    test("abcde", 5, 1, "abcdefghij", 5, 5, -5);
1942    test("abcde", 5, 1, "abcdefghij", 5, 6, -5);
1943    test("abcde", 5, 1, "abcdefghij", 9, 0, 0);
1944    test("abcde", 5, 1, "abcdefghij", 9, 1, -1);
1945    test("abcde", 5, 1, "abcdefghij", 9, 2, -1);
1946    test("abcde", 5, 1, "abcdefghij", 10, 0, 0);
1947    test("abcde", 5, 1, "abcdefghij", 10, 1, 0);
1948    test("abcde", 5, 1, "abcdefghij", 11, 0, 0);
1949    test("abcde", 5, 1, "abcdefghijklmnopqrst", 0, 0, 0);
1950    test("abcde", 5, 1, "abcdefghijklmnopqrst", 0, 1, -1);
1951    test("abcde", 5, 1, "abcdefghijklmnopqrst", 0, 10, -10);
1952    test("abcde", 5, 1, "abcdefghijklmnopqrst", 0, 19, -19);
1953    test("abcde", 5, 1, "abcdefghijklmnopqrst", 0, 20, -20);
1954    test("abcde", 5, 1, "abcdefghijklmnopqrst", 0, 21, -20);
1955    test("abcde", 5, 1, "abcdefghijklmnopqrst", 1, 0, 0);
1956    test("abcde", 5, 1, "abcdefghijklmnopqrst", 1, 1, -1);
1957    test("abcde", 5, 1, "abcdefghijklmnopqrst", 1, 9, -9);
1958    test("abcde", 5, 1, "abcdefghijklmnopqrst", 1, 18, -18);
1959    test("abcde", 5, 1, "abcdefghijklmnopqrst", 1, 19, -19);
1960    test("abcde", 5, 1, "abcdefghijklmnopqrst", 1, 20, -19);
1961    test("abcde", 5, 1, "abcdefghijklmnopqrst", 10, 0, 0);
1962    test("abcde", 5, 1, "abcdefghijklmnopqrst", 10, 1, -1);
1963    test("abcde", 5, 1, "abcdefghijklmnopqrst", 10, 5, -5);
1964    test("abcde", 5, 1, "abcdefghijklmnopqrst", 10, 9, -9);
1965    test("abcde", 5, 1, "abcdefghijklmnopqrst", 10, 10, -10);
1966    test("abcde", 5, 1, "abcdefghijklmnopqrst", 10, 11, -10);
1967    test("abcde", 5, 1, "abcdefghijklmnopqrst", 19, 0, 0);
1968    test("abcde", 5, 1, "abcdefghijklmnopqrst", 19, 1, -1);
1969    test("abcde", 5, 1, "abcdefghijklmnopqrst", 19, 2, -1);
1970    test("abcde", 5, 1, "abcdefghijklmnopqrst", 20, 0, 0);
1971    test("abcde", 5, 1, "abcdefghijklmnopqrst", 20, 1, 0);
1972    test("abcde", 5, 1, "abcdefghijklmnopqrst", 21, 0, 0);
1973    test("abcde", 6, 0, "", 0, 0, 0);
1974    test("abcde", 6, 0, "", 0, 1, 0);
1975    test("abcde", 6, 0, "", 1, 0, 0);
1976    test("abcde", 6, 0, "abcde", 0, 0, 0);
1977    test("abcde", 6, 0, "abcde", 0, 1, 0);
1978    test("abcde", 6, 0, "abcde", 0, 2, 0);
1979    test("abcde", 6, 0, "abcde", 0, 4, 0);
1980    test("abcde", 6, 0, "abcde", 0, 5, 0);
1981    test("abcde", 6, 0, "abcde", 0, 6, 0);
1982    test("abcde", 6, 0, "abcde", 1, 0, 0);
1983    test("abcde", 6, 0, "abcde", 1, 1, 0);
1984    test("abcde", 6, 0, "abcde", 1, 2, 0);
1985    test("abcde", 6, 0, "abcde", 1, 3, 0);
1986    test("abcde", 6, 0, "abcde", 1, 4, 0);
1987    test("abcde", 6, 0, "abcde", 1, 5, 0);
1988    test("abcde", 6, 0, "abcde", 2, 0, 0);
1989    test("abcde", 6, 0, "abcde", 2, 1, 0);
1990    test("abcde", 6, 0, "abcde", 2, 2, 0);
1991    test("abcde", 6, 0, "abcde", 2, 3, 0);
1992    test("abcde", 6, 0, "abcde", 2, 4, 0);
1993    test("abcde", 6, 0, "abcde", 4, 0, 0);
1994    test("abcde", 6, 0, "abcde", 4, 1, 0);
1995    test("abcde", 6, 0, "abcde", 4, 2, 0);
1996    test("abcde", 6, 0, "abcde", 5, 0, 0);
1997    test("abcde", 6, 0, "abcde", 5, 1, 0);
1998    test("abcde", 6, 0, "abcde", 6, 0, 0);
1999    test("abcde", 6, 0, "abcdefghij", 0, 0, 0);
2000    test("abcde", 6, 0, "abcdefghij", 0, 1, 0);
2001    test("abcde", 6, 0, "abcdefghij", 0, 5, 0);
2002    test("abcde", 6, 0, "abcdefghij", 0, 9, 0);
2003    test("abcde", 6, 0, "abcdefghij", 0, 10, 0);
2004    test("abcde", 6, 0, "abcdefghij", 0, 11, 0);
2005    test("abcde", 6, 0, "abcdefghij", 1, 0, 0);
2006    test("abcde", 6, 0, "abcdefghij", 1, 1, 0);
2007    test("abcde", 6, 0, "abcdefghij", 1, 4, 0);
2008    test("abcde", 6, 0, "abcdefghij", 1, 8, 0);
2009    test("abcde", 6, 0, "abcdefghij", 1, 9, 0);
2010    test("abcde", 6, 0, "abcdefghij", 1, 10, 0);
2011    test("abcde", 6, 0, "abcdefghij", 5, 0, 0);
2012    test("abcde", 6, 0, "abcdefghij", 5, 1, 0);
2013    test("abcde", 6, 0, "abcdefghij", 5, 2, 0);
2014    test("abcde", 6, 0, "abcdefghij", 5, 4, 0);
2015    test("abcde", 6, 0, "abcdefghij", 5, 5, 0);
2016    test("abcde", 6, 0, "abcdefghij", 5, 6, 0);
2017    test("abcde", 6, 0, "abcdefghij", 9, 0, 0);
2018    test("abcde", 6, 0, "abcdefghij", 9, 1, 0);
2019    test("abcde", 6, 0, "abcdefghij", 9, 2, 0);
2020    test("abcde", 6, 0, "abcdefghij", 10, 0, 0);
2021    test("abcde", 6, 0, "abcdefghij", 10, 1, 0);
2022    test("abcde", 6, 0, "abcdefghij", 11, 0, 0);
2023}
2024
2025void test19()
2026{
2027    test("abcde", 6, 0, "abcdefghijklmnopqrst", 0, 0, 0);
2028    test("abcde", 6, 0, "abcdefghijklmnopqrst", 0, 1, 0);
2029    test("abcde", 6, 0, "abcdefghijklmnopqrst", 0, 10, 0);
2030    test("abcde", 6, 0, "abcdefghijklmnopqrst", 0, 19, 0);
2031    test("abcde", 6, 0, "abcdefghijklmnopqrst", 0, 20, 0);
2032    test("abcde", 6, 0, "abcdefghijklmnopqrst", 0, 21, 0);
2033    test("abcde", 6, 0, "abcdefghijklmnopqrst", 1, 0, 0);
2034    test("abcde", 6, 0, "abcdefghijklmnopqrst", 1, 1, 0);
2035    test("abcde", 6, 0, "abcdefghijklmnopqrst", 1, 9, 0);
2036    test("abcde", 6, 0, "abcdefghijklmnopqrst", 1, 18, 0);
2037    test("abcde", 6, 0, "abcdefghijklmnopqrst", 1, 19, 0);
2038    test("abcde", 6, 0, "abcdefghijklmnopqrst", 1, 20, 0);
2039    test("abcde", 6, 0, "abcdefghijklmnopqrst", 10, 0, 0);
2040    test("abcde", 6, 0, "abcdefghijklmnopqrst", 10, 1, 0);
2041    test("abcde", 6, 0, "abcdefghijklmnopqrst", 10, 5, 0);
2042    test("abcde", 6, 0, "abcdefghijklmnopqrst", 10, 9, 0);
2043    test("abcde", 6, 0, "abcdefghijklmnopqrst", 10, 10, 0);
2044    test("abcde", 6, 0, "abcdefghijklmnopqrst", 10, 11, 0);
2045    test("abcde", 6, 0, "abcdefghijklmnopqrst", 19, 0, 0);
2046    test("abcde", 6, 0, "abcdefghijklmnopqrst", 19, 1, 0);
2047    test("abcde", 6, 0, "abcdefghijklmnopqrst", 19, 2, 0);
2048    test("abcde", 6, 0, "abcdefghijklmnopqrst", 20, 0, 0);
2049    test("abcde", 6, 0, "abcdefghijklmnopqrst", 20, 1, 0);
2050    test("abcde", 6, 0, "abcdefghijklmnopqrst", 21, 0, 0);
2051    test("abcdefghij", 0, 0, "", 0, 0, 0);
2052    test("abcdefghij", 0, 0, "", 0, 1, 0);
2053    test("abcdefghij", 0, 0, "", 1, 0, 0);
2054    test("abcdefghij", 0, 0, "abcde", 0, 0, 0);
2055    test("abcdefghij", 0, 0, "abcde", 0, 1, -1);
2056    test("abcdefghij", 0, 0, "abcde", 0, 2, -2);
2057    test("abcdefghij", 0, 0, "abcde", 0, 4, -4);
2058    test("abcdefghij", 0, 0, "abcde", 0, 5, -5);
2059    test("abcdefghij", 0, 0, "abcde", 0, 6, -5);
2060    test("abcdefghij", 0, 0, "abcde", 1, 0, 0);
2061    test("abcdefghij", 0, 0, "abcde", 1, 1, -1);
2062    test("abcdefghij", 0, 0, "abcde", 1, 2, -2);
2063    test("abcdefghij", 0, 0, "abcde", 1, 3, -3);
2064    test("abcdefghij", 0, 0, "abcde", 1, 4, -4);
2065    test("abcdefghij", 0, 0, "abcde", 1, 5, -4);
2066    test("abcdefghij", 0, 0, "abcde", 2, 0, 0);
2067    test("abcdefghij", 0, 0, "abcde", 2, 1, -1);
2068    test("abcdefghij", 0, 0, "abcde", 2, 2, -2);
2069    test("abcdefghij", 0, 0, "abcde", 2, 3, -3);
2070    test("abcdefghij", 0, 0, "abcde", 2, 4, -3);
2071    test("abcdefghij", 0, 0, "abcde", 4, 0, 0);
2072    test("abcdefghij", 0, 0, "abcde", 4, 1, -1);
2073    test("abcdefghij", 0, 0, "abcde", 4, 2, -1);
2074    test("abcdefghij", 0, 0, "abcde", 5, 0, 0);
2075    test("abcdefghij", 0, 0, "abcde", 5, 1, 0);
2076    test("abcdefghij", 0, 0, "abcde", 6, 0, 0);
2077    test("abcdefghij", 0, 0, "abcdefghij", 0, 0, 0);
2078    test("abcdefghij", 0, 0, "abcdefghij", 0, 1, -1);
2079    test("abcdefghij", 0, 0, "abcdefghij", 0, 5, -5);
2080    test("abcdefghij", 0, 0, "abcdefghij", 0, 9, -9);
2081    test("abcdefghij", 0, 0, "abcdefghij", 0, 10, -10);
2082    test("abcdefghij", 0, 0, "abcdefghij", 0, 11, -10);
2083    test("abcdefghij", 0, 0, "abcdefghij", 1, 0, 0);
2084    test("abcdefghij", 0, 0, "abcdefghij", 1, 1, -1);
2085    test("abcdefghij", 0, 0, "abcdefghij", 1, 4, -4);
2086    test("abcdefghij", 0, 0, "abcdefghij", 1, 8, -8);
2087    test("abcdefghij", 0, 0, "abcdefghij", 1, 9, -9);
2088    test("abcdefghij", 0, 0, "abcdefghij", 1, 10, -9);
2089    test("abcdefghij", 0, 0, "abcdefghij", 5, 0, 0);
2090    test("abcdefghij", 0, 0, "abcdefghij", 5, 1, -1);
2091    test("abcdefghij", 0, 0, "abcdefghij", 5, 2, -2);
2092    test("abcdefghij", 0, 0, "abcdefghij", 5, 4, -4);
2093    test("abcdefghij", 0, 0, "abcdefghij", 5, 5, -5);
2094    test("abcdefghij", 0, 0, "abcdefghij", 5, 6, -5);
2095    test("abcdefghij", 0, 0, "abcdefghij", 9, 0, 0);
2096    test("abcdefghij", 0, 0, "abcdefghij", 9, 1, -1);
2097    test("abcdefghij", 0, 0, "abcdefghij", 9, 2, -1);
2098    test("abcdefghij", 0, 0, "abcdefghij", 10, 0, 0);
2099    test("abcdefghij", 0, 0, "abcdefghij", 10, 1, 0);
2100    test("abcdefghij", 0, 0, "abcdefghij", 11, 0, 0);
2101    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 0, 0, 0);
2102    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 0, 1, -1);
2103    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 0, 10, -10);
2104    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 0, 19, -19);
2105    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 0, 20, -20);
2106    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 0, 21, -20);
2107    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 1, 0, 0);
2108    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 1, 1, -1);
2109    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 1, 9, -9);
2110    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 1, 18, -18);
2111    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 1, 19, -19);
2112    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 1, 20, -19);
2113    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 10, 0, 0);
2114    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 10, 1, -1);
2115    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 10, 5, -5);
2116    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 10, 9, -9);
2117    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 10, 10, -10);
2118    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 10, 11, -10);
2119    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 19, 0, 0);
2120    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 19, 1, -1);
2121    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 19, 2, -1);
2122    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 20, 0, 0);
2123    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 20, 1, 0);
2124    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 21, 0, 0);
2125    test("abcdefghij", 0, 1, "", 0, 0, 1);
2126    test("abcdefghij", 0, 1, "", 0, 1, 1);
2127}
2128
2129void test20()
2130{
2131    test("abcdefghij", 0, 1, "", 1, 0, 0);
2132    test("abcdefghij", 0, 1, "abcde", 0, 0, 1);
2133    test("abcdefghij", 0, 1, "abcde", 0, 1, 0);
2134    test("abcdefghij", 0, 1, "abcde", 0, 2, -1);
2135    test("abcdefghij", 0, 1, "abcde", 0, 4, -3);
2136    test("abcdefghij", 0, 1, "abcde", 0, 5, -4);
2137    test("abcdefghij", 0, 1, "abcde", 0, 6, -4);
2138    test("abcdefghij", 0, 1, "abcde", 1, 0, 1);
2139    test("abcdefghij", 0, 1, "abcde", 1, 1, -1);
2140    test("abcdefghij", 0, 1, "abcde", 1, 2, -1);
2141    test("abcdefghij", 0, 1, "abcde", 1, 3, -1);
2142    test("abcdefghij", 0, 1, "abcde", 1, 4, -1);
2143    test("abcdefghij", 0, 1, "abcde", 1, 5, -1);
2144    test("abcdefghij", 0, 1, "abcde", 2, 0, 1);
2145    test("abcdefghij", 0, 1, "abcde", 2, 1, -2);
2146    test("abcdefghij", 0, 1, "abcde", 2, 2, -2);
2147    test("abcdefghij", 0, 1, "abcde", 2, 3, -2);
2148    test("abcdefghij", 0, 1, "abcde", 2, 4, -2);
2149    test("abcdefghij", 0, 1, "abcde", 4, 0, 1);
2150    test("abcdefghij", 0, 1, "abcde", 4, 1, -4);
2151    test("abcdefghij", 0, 1, "abcde", 4, 2, -4);
2152    test("abcdefghij", 0, 1, "abcde", 5, 0, 1);
2153    test("abcdefghij", 0, 1, "abcde", 5, 1, 1);
2154    test("abcdefghij", 0, 1, "abcde", 6, 0, 0);
2155    test("abcdefghij", 0, 1, "abcdefghij", 0, 0, 1);
2156    test("abcdefghij", 0, 1, "abcdefghij", 0, 1, 0);
2157    test("abcdefghij", 0, 1, "abcdefghij", 0, 5, -4);
2158    test("abcdefghij", 0, 1, "abcdefghij", 0, 9, -8);
2159    test("abcdefghij", 0, 1, "abcdefghij", 0, 10, -9);
2160    test("abcdefghij", 0, 1, "abcdefghij", 0, 11, -9);
2161    test("abcdefghij", 0, 1, "abcdefghij", 1, 0, 1);
2162    test("abcdefghij", 0, 1, "abcdefghij", 1, 1, -1);
2163    test("abcdefghij", 0, 1, "abcdefghij", 1, 4, -1);
2164    test("abcdefghij", 0, 1, "abcdefghij", 1, 8, -1);
2165    test("abcdefghij", 0, 1, "abcdefghij", 1, 9, -1);
2166    test("abcdefghij", 0, 1, "abcdefghij", 1, 10, -1);
2167    test("abcdefghij", 0, 1, "abcdefghij", 5, 0, 1);
2168    test("abcdefghij", 0, 1, "abcdefghij", 5, 1, -5);
2169    test("abcdefghij", 0, 1, "abcdefghij", 5, 2, -5);
2170    test("abcdefghij", 0, 1, "abcdefghij", 5, 4, -5);
2171    test("abcdefghij", 0, 1, "abcdefghij", 5, 5, -5);
2172    test("abcdefghij", 0, 1, "abcdefghij", 5, 6, -5);
2173    test("abcdefghij", 0, 1, "abcdefghij", 9, 0, 1);
2174    test("abcdefghij", 0, 1, "abcdefghij", 9, 1, -9);
2175    test("abcdefghij", 0, 1, "abcdefghij", 9, 2, -9);
2176    test("abcdefghij", 0, 1, "abcdefghij", 10, 0, 1);
2177    test("abcdefghij", 0, 1, "abcdefghij", 10, 1, 1);
2178    test("abcdefghij", 0, 1, "abcdefghij", 11, 0, 0);
2179    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 0, 0, 1);
2180    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 0, 1, 0);
2181    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 0, 10, -9);
2182    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 0, 19, -18);
2183    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 0, 20, -19);
2184    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 0, 21, -19);
2185    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 1, 0, 1);
2186    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 1, 1, -1);
2187    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 1, 9, -1);
2188    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 1, 18, -1);
2189    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 1, 19, -1);
2190    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 1, 20, -1);
2191    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 10, 0, 1);
2192    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 10, 1, -10);
2193    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 10, 5, -10);
2194    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 10, 9, -10);
2195    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 10, 10, -10);
2196    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 10, 11, -10);
2197    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 19, 0, 1);
2198    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 19, 1, -19);
2199    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 19, 2, -19);
2200    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 20, 0, 1);
2201    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 20, 1, 1);
2202    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 21, 0, 0);
2203    test("abcdefghij", 0, 5, "", 0, 0, 5);
2204    test("abcdefghij", 0, 5, "", 0, 1, 5);
2205    test("abcdefghij", 0, 5, "", 1, 0, 0);
2206    test("abcdefghij", 0, 5, "abcde", 0, 0, 5);
2207    test("abcdefghij", 0, 5, "abcde", 0, 1, 4);
2208    test("abcdefghij", 0, 5, "abcde", 0, 2, 3);
2209    test("abcdefghij", 0, 5, "abcde", 0, 4, 1);
2210    test("abcdefghij", 0, 5, "abcde", 0, 5, 0);
2211    test("abcdefghij", 0, 5, "abcde", 0, 6, 0);
2212    test("abcdefghij", 0, 5, "abcde", 1, 0, 5);
2213    test("abcdefghij", 0, 5, "abcde", 1, 1, -1);
2214    test("abcdefghij", 0, 5, "abcde", 1, 2, -1);
2215    test("abcdefghij", 0, 5, "abcde", 1, 3, -1);
2216    test("abcdefghij", 0, 5, "abcde", 1, 4, -1);
2217    test("abcdefghij", 0, 5, "abcde", 1, 5, -1);
2218    test("abcdefghij", 0, 5, "abcde", 2, 0, 5);
2219    test("abcdefghij", 0, 5, "abcde", 2, 1, -2);
2220    test("abcdefghij", 0, 5, "abcde", 2, 2, -2);
2221    test("abcdefghij", 0, 5, "abcde", 2, 3, -2);
2222    test("abcdefghij", 0, 5, "abcde", 2, 4, -2);
2223    test("abcdefghij", 0, 5, "abcde", 4, 0, 5);
2224    test("abcdefghij", 0, 5, "abcde", 4, 1, -4);
2225    test("abcdefghij", 0, 5, "abcde", 4, 2, -4);
2226    test("abcdefghij", 0, 5, "abcde", 5, 0, 5);
2227    test("abcdefghij", 0, 5, "abcde", 5, 1, 5);
2228    test("abcdefghij", 0, 5, "abcde", 6, 0, 0);
2229    test("abcdefghij", 0, 5, "abcdefghij", 0, 0, 5);
2230    test("abcdefghij", 0, 5, "abcdefghij", 0, 1, 4);
2231}
2232
2233void test21()
2234{
2235    test("abcdefghij", 0, 5, "abcdefghij", 0, 5, 0);
2236    test("abcdefghij", 0, 5, "abcdefghij", 0, 9, -4);
2237    test("abcdefghij", 0, 5, "abcdefghij", 0, 10, -5);
2238    test("abcdefghij", 0, 5, "abcdefghij", 0, 11, -5);
2239    test("abcdefghij", 0, 5, "abcdefghij", 1, 0, 5);
2240    test("abcdefghij", 0, 5, "abcdefghij", 1, 1, -1);
2241    test("abcdefghij", 0, 5, "abcdefghij", 1, 4, -1);
2242    test("abcdefghij", 0, 5, "abcdefghij", 1, 8, -1);
2243    test("abcdefghij", 0, 5, "abcdefghij", 1, 9, -1);
2244    test("abcdefghij", 0, 5, "abcdefghij", 1, 10, -1);
2245    test("abcdefghij", 0, 5, "abcdefghij", 5, 0, 5);
2246    test("abcdefghij", 0, 5, "abcdefghij", 5, 1, -5);
2247    test("abcdefghij", 0, 5, "abcdefghij", 5, 2, -5);
2248    test("abcdefghij", 0, 5, "abcdefghij", 5, 4, -5);
2249    test("abcdefghij", 0, 5, "abcdefghij", 5, 5, -5);
2250    test("abcdefghij", 0, 5, "abcdefghij", 5, 6, -5);
2251    test("abcdefghij", 0, 5, "abcdefghij", 9, 0, 5);
2252    test("abcdefghij", 0, 5, "abcdefghij", 9, 1, -9);
2253    test("abcdefghij", 0, 5, "abcdefghij", 9, 2, -9);
2254    test("abcdefghij", 0, 5, "abcdefghij", 10, 0, 5);
2255    test("abcdefghij", 0, 5, "abcdefghij", 10, 1, 5);
2256    test("abcdefghij", 0, 5, "abcdefghij", 11, 0, 0);
2257    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 0, 0, 5);
2258    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 0, 1, 4);
2259    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 0, 10, -5);
2260    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 0, 19, -14);
2261    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 0, 20, -15);
2262    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 0, 21, -15);
2263    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 1, 0, 5);
2264    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 1, 1, -1);
2265    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 1, 9, -1);
2266    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 1, 18, -1);
2267    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 1, 19, -1);
2268    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 1, 20, -1);
2269    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 10, 0, 5);
2270    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 10, 1, -10);
2271    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 10, 5, -10);
2272    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 10, 9, -10);
2273    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 10, 10, -10);
2274    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 10, 11, -10);
2275    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 19, 0, 5);
2276    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 19, 1, -19);
2277    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 19, 2, -19);
2278    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 20, 0, 5);
2279    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 20, 1, 5);
2280    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 21, 0, 0);
2281    test("abcdefghij", 0, 9, "", 0, 0, 9);
2282    test("abcdefghij", 0, 9, "", 0, 1, 9);
2283    test("abcdefghij", 0, 9, "", 1, 0, 0);
2284    test("abcdefghij", 0, 9, "abcde", 0, 0, 9);
2285    test("abcdefghij", 0, 9, "abcde", 0, 1, 8);
2286    test("abcdefghij", 0, 9, "abcde", 0, 2, 7);
2287    test("abcdefghij", 0, 9, "abcde", 0, 4, 5);
2288    test("abcdefghij", 0, 9, "abcde", 0, 5, 4);
2289    test("abcdefghij", 0, 9, "abcde", 0, 6, 4);
2290    test("abcdefghij", 0, 9, "abcde", 1, 0, 9);
2291    test("abcdefghij", 0, 9, "abcde", 1, 1, -1);
2292    test("abcdefghij", 0, 9, "abcde", 1, 2, -1);
2293    test("abcdefghij", 0, 9, "abcde", 1, 3, -1);
2294    test("abcdefghij", 0, 9, "abcde", 1, 4, -1);
2295    test("abcdefghij", 0, 9, "abcde", 1, 5, -1);
2296    test("abcdefghij", 0, 9, "abcde", 2, 0, 9);
2297    test("abcdefghij", 0, 9, "abcde", 2, 1, -2);
2298    test("abcdefghij", 0, 9, "abcde", 2, 2, -2);
2299    test("abcdefghij", 0, 9, "abcde", 2, 3, -2);
2300    test("abcdefghij", 0, 9, "abcde", 2, 4, -2);
2301    test("abcdefghij", 0, 9, "abcde", 4, 0, 9);
2302    test("abcdefghij", 0, 9, "abcde", 4, 1, -4);
2303    test("abcdefghij", 0, 9, "abcde", 4, 2, -4);
2304    test("abcdefghij", 0, 9, "abcde", 5, 0, 9);
2305    test("abcdefghij", 0, 9, "abcde", 5, 1, 9);
2306    test("abcdefghij", 0, 9, "abcde", 6, 0, 0);
2307    test("abcdefghij", 0, 9, "abcdefghij", 0, 0, 9);
2308    test("abcdefghij", 0, 9, "abcdefghij", 0, 1, 8);
2309    test("abcdefghij", 0, 9, "abcdefghij", 0, 5, 4);
2310    test("abcdefghij", 0, 9, "abcdefghij", 0, 9, 0);
2311    test("abcdefghij", 0, 9, "abcdefghij", 0, 10, -1);
2312    test("abcdefghij", 0, 9, "abcdefghij", 0, 11, -1);
2313    test("abcdefghij", 0, 9, "abcdefghij", 1, 0, 9);
2314    test("abcdefghij", 0, 9, "abcdefghij", 1, 1, -1);
2315    test("abcdefghij", 0, 9, "abcdefghij", 1, 4, -1);
2316    test("abcdefghij", 0, 9, "abcdefghij", 1, 8, -1);
2317    test("abcdefghij", 0, 9, "abcdefghij", 1, 9, -1);
2318    test("abcdefghij", 0, 9, "abcdefghij", 1, 10, -1);
2319    test("abcdefghij", 0, 9, "abcdefghij", 5, 0, 9);
2320    test("abcdefghij", 0, 9, "abcdefghij", 5, 1, -5);
2321    test("abcdefghij", 0, 9, "abcdefghij", 5, 2, -5);
2322    test("abcdefghij", 0, 9, "abcdefghij", 5, 4, -5);
2323    test("abcdefghij", 0, 9, "abcdefghij", 5, 5, -5);
2324    test("abcdefghij", 0, 9, "abcdefghij", 5, 6, -5);
2325    test("abcdefghij", 0, 9, "abcdefghij", 9, 0, 9);
2326    test("abcdefghij", 0, 9, "abcdefghij", 9, 1, -9);
2327    test("abcdefghij", 0, 9, "abcdefghij", 9, 2, -9);
2328    test("abcdefghij", 0, 9, "abcdefghij", 10, 0, 9);
2329    test("abcdefghij", 0, 9, "abcdefghij", 10, 1, 9);
2330    test("abcdefghij", 0, 9, "abcdefghij", 11, 0, 0);
2331    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 0, 0, 9);
2332    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 0, 1, 8);
2333    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 0, 10, -1);
2334    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 0, 19, -10);
2335}
2336
2337void test22()
2338{
2339    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 0, 20, -11);
2340    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 0, 21, -11);
2341    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 1, 0, 9);
2342    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 1, 1, -1);
2343    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 1, 9, -1);
2344    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 1, 18, -1);
2345    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 1, 19, -1);
2346    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 1, 20, -1);
2347    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 10, 0, 9);
2348    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 10, 1, -10);
2349    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 10, 5, -10);
2350    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 10, 9, -10);
2351    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 10, 10, -10);
2352    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 10, 11, -10);
2353    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 19, 0, 9);
2354    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 19, 1, -19);
2355    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 19, 2, -19);
2356    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 20, 0, 9);
2357    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 20, 1, 9);
2358    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 21, 0, 0);
2359    test("abcdefghij", 0, 10, "", 0, 0, 10);
2360    test("abcdefghij", 0, 10, "", 0, 1, 10);
2361    test("abcdefghij", 0, 10, "", 1, 0, 0);
2362    test("abcdefghij", 0, 10, "abcde", 0, 0, 10);
2363    test("abcdefghij", 0, 10, "abcde", 0, 1, 9);
2364    test("abcdefghij", 0, 10, "abcde", 0, 2, 8);
2365    test("abcdefghij", 0, 10, "abcde", 0, 4, 6);
2366    test("abcdefghij", 0, 10, "abcde", 0, 5, 5);
2367    test("abcdefghij", 0, 10, "abcde", 0, 6, 5);
2368    test("abcdefghij", 0, 10, "abcde", 1, 0, 10);
2369    test("abcdefghij", 0, 10, "abcde", 1, 1, -1);
2370    test("abcdefghij", 0, 10, "abcde", 1, 2, -1);
2371    test("abcdefghij", 0, 10, "abcde", 1, 3, -1);
2372    test("abcdefghij", 0, 10, "abcde", 1, 4, -1);
2373    test("abcdefghij", 0, 10, "abcde", 1, 5, -1);
2374    test("abcdefghij", 0, 10, "abcde", 2, 0, 10);
2375    test("abcdefghij", 0, 10, "abcde", 2, 1, -2);
2376    test("abcdefghij", 0, 10, "abcde", 2, 2, -2);
2377    test("abcdefghij", 0, 10, "abcde", 2, 3, -2);
2378    test("abcdefghij", 0, 10, "abcde", 2, 4, -2);
2379    test("abcdefghij", 0, 10, "abcde", 4, 0, 10);
2380    test("abcdefghij", 0, 10, "abcde", 4, 1, -4);
2381    test("abcdefghij", 0, 10, "abcde", 4, 2, -4);
2382    test("abcdefghij", 0, 10, "abcde", 5, 0, 10);
2383    test("abcdefghij", 0, 10, "abcde", 5, 1, 10);
2384    test("abcdefghij", 0, 10, "abcde", 6, 0, 0);
2385    test("abcdefghij", 0, 10, "abcdefghij", 0, 0, 10);
2386    test("abcdefghij", 0, 10, "abcdefghij", 0, 1, 9);
2387    test("abcdefghij", 0, 10, "abcdefghij", 0, 5, 5);
2388    test("abcdefghij", 0, 10, "abcdefghij", 0, 9, 1);
2389    test("abcdefghij", 0, 10, "abcdefghij", 0, 10, 0);
2390    test("abcdefghij", 0, 10, "abcdefghij", 0, 11, 0);
2391    test("abcdefghij", 0, 10, "abcdefghij", 1, 0, 10);
2392    test("abcdefghij", 0, 10, "abcdefghij", 1, 1, -1);
2393    test("abcdefghij", 0, 10, "abcdefghij", 1, 4, -1);
2394    test("abcdefghij", 0, 10, "abcdefghij", 1, 8, -1);
2395    test("abcdefghij", 0, 10, "abcdefghij", 1, 9, -1);
2396    test("abcdefghij", 0, 10, "abcdefghij", 1, 10, -1);
2397    test("abcdefghij", 0, 10, "abcdefghij", 5, 0, 10);
2398    test("abcdefghij", 0, 10, "abcdefghij", 5, 1, -5);
2399    test("abcdefghij", 0, 10, "abcdefghij", 5, 2, -5);
2400    test("abcdefghij", 0, 10, "abcdefghij", 5, 4, -5);
2401    test("abcdefghij", 0, 10, "abcdefghij", 5, 5, -5);
2402    test("abcdefghij", 0, 10, "abcdefghij", 5, 6, -5);
2403    test("abcdefghij", 0, 10, "abcdefghij", 9, 0, 10);
2404    test("abcdefghij", 0, 10, "abcdefghij", 9, 1, -9);
2405    test("abcdefghij", 0, 10, "abcdefghij", 9, 2, -9);
2406    test("abcdefghij", 0, 10, "abcdefghij", 10, 0, 10);
2407    test("abcdefghij", 0, 10, "abcdefghij", 10, 1, 10);
2408    test("abcdefghij", 0, 10, "abcdefghij", 11, 0, 0);
2409    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 0, 0, 10);
2410    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 0, 1, 9);
2411    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 0, 10, 0);
2412    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 0, 19, -9);
2413    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 0, 20, -10);
2414    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 0, 21, -10);
2415    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 1, 0, 10);
2416    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 1, 1, -1);
2417    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 1, 9, -1);
2418    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 1, 18, -1);
2419    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 1, 19, -1);
2420    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 1, 20, -1);
2421    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 10, 0, 10);
2422    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 10, 1, -10);
2423    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 10, 5, -10);
2424    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 10, 9, -10);
2425    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 10, 10, -10);
2426    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 10, 11, -10);
2427    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 19, 0, 10);
2428    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 19, 1, -19);
2429    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 19, 2, -19);
2430    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 20, 0, 10);
2431    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 20, 1, 10);
2432    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 21, 0, 0);
2433    test("abcdefghij", 0, 11, "", 0, 0, 10);
2434    test("abcdefghij", 0, 11, "", 0, 1, 10);
2435    test("abcdefghij", 0, 11, "", 1, 0, 0);
2436    test("abcdefghij", 0, 11, "abcde", 0, 0, 10);
2437    test("abcdefghij", 0, 11, "abcde", 0, 1, 9);
2438    test("abcdefghij", 0, 11, "abcde", 0, 2, 8);
2439}
2440
2441void test23()
2442{
2443    test("abcdefghij", 0, 11, "abcde", 0, 4, 6);
2444    test("abcdefghij", 0, 11, "abcde", 0, 5, 5);
2445    test("abcdefghij", 0, 11, "abcde", 0, 6, 5);
2446    test("abcdefghij", 0, 11, "abcde", 1, 0, 10);
2447    test("abcdefghij", 0, 11, "abcde", 1, 1, -1);
2448    test("abcdefghij", 0, 11, "abcde", 1, 2, -1);
2449    test("abcdefghij", 0, 11, "abcde", 1, 3, -1);
2450    test("abcdefghij", 0, 11, "abcde", 1, 4, -1);
2451    test("abcdefghij", 0, 11, "abcde", 1, 5, -1);
2452    test("abcdefghij", 0, 11, "abcde", 2, 0, 10);
2453    test("abcdefghij", 0, 11, "abcde", 2, 1, -2);
2454    test("abcdefghij", 0, 11, "abcde", 2, 2, -2);
2455    test("abcdefghij", 0, 11, "abcde", 2, 3, -2);
2456    test("abcdefghij", 0, 11, "abcde", 2, 4, -2);
2457    test("abcdefghij", 0, 11, "abcde", 4, 0, 10);
2458    test("abcdefghij", 0, 11, "abcde", 4, 1, -4);
2459    test("abcdefghij", 0, 11, "abcde", 4, 2, -4);
2460    test("abcdefghij", 0, 11, "abcde", 5, 0, 10);
2461    test("abcdefghij", 0, 11, "abcde", 5, 1, 10);
2462    test("abcdefghij", 0, 11, "abcde", 6, 0, 0);
2463    test("abcdefghij", 0, 11, "abcdefghij", 0, 0, 10);
2464    test("abcdefghij", 0, 11, "abcdefghij", 0, 1, 9);
2465    test("abcdefghij", 0, 11, "abcdefghij", 0, 5, 5);
2466    test("abcdefghij", 0, 11, "abcdefghij", 0, 9, 1);
2467    test("abcdefghij", 0, 11, "abcdefghij", 0, 10, 0);
2468    test("abcdefghij", 0, 11, "abcdefghij", 0, 11, 0);
2469    test("abcdefghij", 0, 11, "abcdefghij", 1, 0, 10);
2470    test("abcdefghij", 0, 11, "abcdefghij", 1, 1, -1);
2471    test("abcdefghij", 0, 11, "abcdefghij", 1, 4, -1);
2472    test("abcdefghij", 0, 11, "abcdefghij", 1, 8, -1);
2473    test("abcdefghij", 0, 11, "abcdefghij", 1, 9, -1);
2474    test("abcdefghij", 0, 11, "abcdefghij", 1, 10, -1);
2475    test("abcdefghij", 0, 11, "abcdefghij", 5, 0, 10);
2476    test("abcdefghij", 0, 11, "abcdefghij", 5, 1, -5);
2477    test("abcdefghij", 0, 11, "abcdefghij", 5, 2, -5);
2478    test("abcdefghij", 0, 11, "abcdefghij", 5, 4, -5);
2479    test("abcdefghij", 0, 11, "abcdefghij", 5, 5, -5);
2480    test("abcdefghij", 0, 11, "abcdefghij", 5, 6, -5);
2481    test("abcdefghij", 0, 11, "abcdefghij", 9, 0, 10);
2482    test("abcdefghij", 0, 11, "abcdefghij", 9, 1, -9);
2483    test("abcdefghij", 0, 11, "abcdefghij", 9, 2, -9);
2484    test("abcdefghij", 0, 11, "abcdefghij", 10, 0, 10);
2485    test("abcdefghij", 0, 11, "abcdefghij", 10, 1, 10);
2486    test("abcdefghij", 0, 11, "abcdefghij", 11, 0, 0);
2487    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 0, 0, 10);
2488    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 0, 1, 9);
2489    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 0, 10, 0);
2490    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 0, 19, -9);
2491    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 0, 20, -10);
2492    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 0, 21, -10);
2493    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 1, 0, 10);
2494    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 1, 1, -1);
2495    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 1, 9, -1);
2496    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 1, 18, -1);
2497    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 1, 19, -1);
2498    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 1, 20, -1);
2499    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 10, 0, 10);
2500    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 10, 1, -10);
2501    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 10, 5, -10);
2502    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 10, 9, -10);
2503    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 10, 10, -10);
2504    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 10, 11, -10);
2505    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 19, 0, 10);
2506    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 19, 1, -19);
2507    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 19, 2, -19);
2508    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 20, 0, 10);
2509    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 20, 1, 10);
2510    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 21, 0, 0);
2511    test("abcdefghij", 1, 0, "", 0, 0, 0);
2512    test("abcdefghij", 1, 0, "", 0, 1, 0);
2513    test("abcdefghij", 1, 0, "", 1, 0, 0);
2514    test("abcdefghij", 1, 0, "abcde", 0, 0, 0);
2515    test("abcdefghij", 1, 0, "abcde", 0, 1, -1);
2516    test("abcdefghij", 1, 0, "abcde", 0, 2, -2);
2517    test("abcdefghij", 1, 0, "abcde", 0, 4, -4);
2518    test("abcdefghij", 1, 0, "abcde", 0, 5, -5);
2519    test("abcdefghij", 1, 0, "abcde", 0, 6, -5);
2520    test("abcdefghij", 1, 0, "abcde", 1, 0, 0);
2521    test("abcdefghij", 1, 0, "abcde", 1, 1, -1);
2522    test("abcdefghij", 1, 0, "abcde", 1, 2, -2);
2523    test("abcdefghij", 1, 0, "abcde", 1, 3, -3);
2524    test("abcdefghij", 1, 0, "abcde", 1, 4, -4);
2525    test("abcdefghij", 1, 0, "abcde", 1, 5, -4);
2526    test("abcdefghij", 1, 0, "abcde", 2, 0, 0);
2527    test("abcdefghij", 1, 0, "abcde", 2, 1, -1);
2528    test("abcdefghij", 1, 0, "abcde", 2, 2, -2);
2529    test("abcdefghij", 1, 0, "abcde", 2, 3, -3);
2530    test("abcdefghij", 1, 0, "abcde", 2, 4, -3);
2531    test("abcdefghij", 1, 0, "abcde", 4, 0, 0);
2532    test("abcdefghij", 1, 0, "abcde", 4, 1, -1);
2533    test("abcdefghij", 1, 0, "abcde", 4, 2, -1);
2534    test("abcdefghij", 1, 0, "abcde", 5, 0, 0);
2535    test("abcdefghij", 1, 0, "abcde", 5, 1, 0);
2536    test("abcdefghij", 1, 0, "abcde", 6, 0, 0);
2537    test("abcdefghij", 1, 0, "abcdefghij", 0, 0, 0);
2538    test("abcdefghij", 1, 0, "abcdefghij", 0, 1, -1);
2539    test("abcdefghij", 1, 0, "abcdefghij", 0, 5, -5);
2540    test("abcdefghij", 1, 0, "abcdefghij", 0, 9, -9);
2541    test("abcdefghij", 1, 0, "abcdefghij", 0, 10, -10);
2542    test("abcdefghij", 1, 0, "abcdefghij", 0, 11, -10);
2543}
2544
2545void test24()
2546{
2547    test("abcdefghij", 1, 0, "abcdefghij", 1, 0, 0);
2548    test("abcdefghij", 1, 0, "abcdefghij", 1, 1, -1);
2549    test("abcdefghij", 1, 0, "abcdefghij", 1, 4, -4);
2550    test("abcdefghij", 1, 0, "abcdefghij", 1, 8, -8);
2551    test("abcdefghij", 1, 0, "abcdefghij", 1, 9, -9);
2552    test("abcdefghij", 1, 0, "abcdefghij", 1, 10, -9);
2553    test("abcdefghij", 1, 0, "abcdefghij", 5, 0, 0);
2554    test("abcdefghij", 1, 0, "abcdefghij", 5, 1, -1);
2555    test("abcdefghij", 1, 0, "abcdefghij", 5, 2, -2);
2556    test("abcdefghij", 1, 0, "abcdefghij", 5, 4, -4);
2557    test("abcdefghij", 1, 0, "abcdefghij", 5, 5, -5);
2558    test("abcdefghij", 1, 0, "abcdefghij", 5, 6, -5);
2559    test("abcdefghij", 1, 0, "abcdefghij", 9, 0, 0);
2560    test("abcdefghij", 1, 0, "abcdefghij", 9, 1, -1);
2561    test("abcdefghij", 1, 0, "abcdefghij", 9, 2, -1);
2562    test("abcdefghij", 1, 0, "abcdefghij", 10, 0, 0);
2563    test("abcdefghij", 1, 0, "abcdefghij", 10, 1, 0);
2564    test("abcdefghij", 1, 0, "abcdefghij", 11, 0, 0);
2565    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 0, 0, 0);
2566    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 0, 1, -1);
2567    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 0, 10, -10);
2568    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 0, 19, -19);
2569    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 0, 20, -20);
2570    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 0, 21, -20);
2571    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 1, 0, 0);
2572    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 1, 1, -1);
2573    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 1, 9, -9);
2574    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 1, 18, -18);
2575    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 1, 19, -19);
2576    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 1, 20, -19);
2577    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 10, 0, 0);
2578    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 10, 1, -1);
2579    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 10, 5, -5);
2580    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 10, 9, -9);
2581    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 10, 10, -10);
2582    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 10, 11, -10);
2583    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 19, 0, 0);
2584    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 19, 1, -1);
2585    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 19, 2, -1);
2586    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 20, 0, 0);
2587    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 20, 1, 0);
2588    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 21, 0, 0);
2589    test("abcdefghij", 1, 1, "", 0, 0, 1);
2590    test("abcdefghij", 1, 1, "", 0, 1, 1);
2591    test("abcdefghij", 1, 1, "", 1, 0, 0);
2592    test("abcdefghij", 1, 1, "abcde", 0, 0, 1);
2593    test("abcdefghij", 1, 1, "abcde", 0, 1, 1);
2594    test("abcdefghij", 1, 1, "abcde", 0, 2, 1);
2595    test("abcdefghij", 1, 1, "abcde", 0, 4, 1);
2596    test("abcdefghij", 1, 1, "abcde", 0, 5, 1);
2597    test("abcdefghij", 1, 1, "abcde", 0, 6, 1);
2598    test("abcdefghij", 1, 1, "abcde", 1, 0, 1);
2599    test("abcdefghij", 1, 1, "abcde", 1, 1, 0);
2600    test("abcdefghij", 1, 1, "abcde", 1, 2, -1);
2601    test("abcdefghij", 1, 1, "abcde", 1, 3, -2);
2602    test("abcdefghij", 1, 1, "abcde", 1, 4, -3);
2603    test("abcdefghij", 1, 1, "abcde", 1, 5, -3);
2604    test("abcdefghij", 1, 1, "abcde", 2, 0, 1);
2605    test("abcdefghij", 1, 1, "abcde", 2, 1, -1);
2606    test("abcdefghij", 1, 1, "abcde", 2, 2, -1);
2607    test("abcdefghij", 1, 1, "abcde", 2, 3, -1);
2608    test("abcdefghij", 1, 1, "abcde", 2, 4, -1);
2609    test("abcdefghij", 1, 1, "abcde", 4, 0, 1);
2610    test("abcdefghij", 1, 1, "abcde", 4, 1, -3);
2611    test("abcdefghij", 1, 1, "abcde", 4, 2, -3);
2612    test("abcdefghij", 1, 1, "abcde", 5, 0, 1);
2613    test("abcdefghij", 1, 1, "abcde", 5, 1, 1);
2614    test("abcdefghij", 1, 1, "abcde", 6, 0, 0);
2615    test("abcdefghij", 1, 1, "abcdefghij", 0, 0, 1);
2616    test("abcdefghij", 1, 1, "abcdefghij", 0, 1, 1);
2617    test("abcdefghij", 1, 1, "abcdefghij", 0, 5, 1);
2618    test("abcdefghij", 1, 1, "abcdefghij", 0, 9, 1);
2619    test("abcdefghij", 1, 1, "abcdefghij", 0, 10, 1);
2620    test("abcdefghij", 1, 1, "abcdefghij", 0, 11, 1);
2621    test("abcdefghij", 1, 1, "abcdefghij", 1, 0, 1);
2622    test("abcdefghij", 1, 1, "abcdefghij", 1, 1, 0);
2623    test("abcdefghij", 1, 1, "abcdefghij", 1, 4, -3);
2624    test("abcdefghij", 1, 1, "abcdefghij", 1, 8, -7);
2625    test("abcdefghij", 1, 1, "abcdefghij", 1, 9, -8);
2626    test("abcdefghij", 1, 1, "abcdefghij", 1, 10, -8);
2627    test("abcdefghij", 1, 1, "abcdefghij", 5, 0, 1);
2628    test("abcdefghij", 1, 1, "abcdefghij", 5, 1, -4);
2629    test("abcdefghij", 1, 1, "abcdefghij", 5, 2, -4);
2630    test("abcdefghij", 1, 1, "abcdefghij", 5, 4, -4);
2631    test("abcdefghij", 1, 1, "abcdefghij", 5, 5, -4);
2632    test("abcdefghij", 1, 1, "abcdefghij", 5, 6, -4);
2633    test("abcdefghij", 1, 1, "abcdefghij", 9, 0, 1);
2634    test("abcdefghij", 1, 1, "abcdefghij", 9, 1, -8);
2635    test("abcdefghij", 1, 1, "abcdefghij", 9, 2, -8);
2636    test("abcdefghij", 1, 1, "abcdefghij", 10, 0, 1);
2637    test("abcdefghij", 1, 1, "abcdefghij", 10, 1, 1);
2638    test("abcdefghij", 1, 1, "abcdefghij", 11, 0, 0);
2639    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 0, 0, 1);
2640    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 0, 1, 1);
2641    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 0, 10, 1);
2642    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 0, 19, 1);
2643    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 0, 20, 1);
2644    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 0, 21, 1);
2645    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1, 0, 1);
2646    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1, 1, 0);
2647}
2648
2649void test25()
2650{
2651    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1, 9, -8);
2652    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1, 18, -17);
2653    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1, 19, -18);
2654    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1, 20, -18);
2655    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 10, 0, 1);
2656    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 10, 1, -9);
2657    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 10, 5, -9);
2658    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 10, 9, -9);
2659    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 10, 10, -9);
2660    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 10, 11, -9);
2661    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 19, 0, 1);
2662    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 19, 1, -18);
2663    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 19, 2, -18);
2664    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 20, 0, 1);
2665    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 20, 1, 1);
2666    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 21, 0, 0);
2667    test("abcdefghij", 1, 4, "", 0, 0, 4);
2668    test("abcdefghij", 1, 4, "", 0, 1, 4);
2669    test("abcdefghij", 1, 4, "", 1, 0, 0);
2670    test("abcdefghij", 1, 4, "abcde", 0, 0, 4);
2671    test("abcdefghij", 1, 4, "abcde", 0, 1, 1);
2672    test("abcdefghij", 1, 4, "abcde", 0, 2, 1);
2673    test("abcdefghij", 1, 4, "abcde", 0, 4, 1);
2674    test("abcdefghij", 1, 4, "abcde", 0, 5, 1);
2675    test("abcdefghij", 1, 4, "abcde", 0, 6, 1);
2676    test("abcdefghij", 1, 4, "abcde", 1, 0, 4);
2677    test("abcdefghij", 1, 4, "abcde", 1, 1, 3);
2678    test("abcdefghij", 1, 4, "abcde", 1, 2, 2);
2679    test("abcdefghij", 1, 4, "abcde", 1, 3, 1);
2680    test("abcdefghij", 1, 4, "abcde", 1, 4, 0);
2681    test("abcdefghij", 1, 4, "abcde", 1, 5, 0);
2682    test("abcdefghij", 1, 4, "abcde", 2, 0, 4);
2683    test("abcdefghij", 1, 4, "abcde", 2, 1, -1);
2684    test("abcdefghij", 1, 4, "abcde", 2, 2, -1);
2685    test("abcdefghij", 1, 4, "abcde", 2, 3, -1);
2686    test("abcdefghij", 1, 4, "abcde", 2, 4, -1);
2687    test("abcdefghij", 1, 4, "abcde", 4, 0, 4);
2688    test("abcdefghij", 1, 4, "abcde", 4, 1, -3);
2689    test("abcdefghij", 1, 4, "abcde", 4, 2, -3);
2690    test("abcdefghij", 1, 4, "abcde", 5, 0, 4);
2691    test("abcdefghij", 1, 4, "abcde", 5, 1, 4);
2692    test("abcdefghij", 1, 4, "abcde", 6, 0, 0);
2693    test("abcdefghij", 1, 4, "abcdefghij", 0, 0, 4);
2694    test("abcdefghij", 1, 4, "abcdefghij", 0, 1, 1);
2695    test("abcdefghij", 1, 4, "abcdefghij", 0, 5, 1);
2696    test("abcdefghij", 1, 4, "abcdefghij", 0, 9, 1);
2697    test("abcdefghij", 1, 4, "abcdefghij", 0, 10, 1);
2698    test("abcdefghij", 1, 4, "abcdefghij", 0, 11, 1);
2699    test("abcdefghij", 1, 4, "abcdefghij", 1, 0, 4);
2700    test("abcdefghij", 1, 4, "abcdefghij", 1, 1, 3);
2701    test("abcdefghij", 1, 4, "abcdefghij", 1, 4, 0);
2702    test("abcdefghij", 1, 4, "abcdefghij", 1, 8, -4);
2703    test("abcdefghij", 1, 4, "abcdefghij", 1, 9, -5);
2704    test("abcdefghij", 1, 4, "abcdefghij", 1, 10, -5);
2705    test("abcdefghij", 1, 4, "abcdefghij", 5, 0, 4);
2706    test("abcdefghij", 1, 4, "abcdefghij", 5, 1, -4);
2707    test("abcdefghij", 1, 4, "abcdefghij", 5, 2, -4);
2708    test("abcdefghij", 1, 4, "abcdefghij", 5, 4, -4);
2709    test("abcdefghij", 1, 4, "abcdefghij", 5, 5, -4);
2710    test("abcdefghij", 1, 4, "abcdefghij", 5, 6, -4);
2711    test("abcdefghij", 1, 4, "abcdefghij", 9, 0, 4);
2712    test("abcdefghij", 1, 4, "abcdefghij", 9, 1, -8);
2713    test("abcdefghij", 1, 4, "abcdefghij", 9, 2, -8);
2714    test("abcdefghij", 1, 4, "abcdefghij", 10, 0, 4);
2715    test("abcdefghij", 1, 4, "abcdefghij", 10, 1, 4);
2716    test("abcdefghij", 1, 4, "abcdefghij", 11, 0, 0);
2717    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 0, 0, 4);
2718    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 0, 1, 1);
2719    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 0, 10, 1);
2720    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 0, 19, 1);
2721    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 0, 20, 1);
2722    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 0, 21, 1);
2723    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1, 0, 4);
2724    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1, 1, 3);
2725    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1, 9, -5);
2726    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1, 18, -14);
2727    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1, 19, -15);
2728    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1, 20, -15);
2729    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 10, 0, 4);
2730    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 10, 1, -9);
2731    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 10, 5, -9);
2732    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 10, 9, -9);
2733    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 10, 10, -9);
2734    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 10, 11, -9);
2735    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 19, 0, 4);
2736    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 19, 1, -18);
2737    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 19, 2, -18);
2738    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 20, 0, 4);
2739    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 20, 1, 4);
2740    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 21, 0, 0);
2741    test("abcdefghij", 1, 8, "", 0, 0, 8);
2742    test("abcdefghij", 1, 8, "", 0, 1, 8);
2743    test("abcdefghij", 1, 8, "", 1, 0, 0);
2744    test("abcdefghij", 1, 8, "abcde", 0, 0, 8);
2745    test("abcdefghij", 1, 8, "abcde", 0, 1, 1);
2746    test("abcdefghij", 1, 8, "abcde", 0, 2, 1);
2747    test("abcdefghij", 1, 8, "abcde", 0, 4, 1);
2748    test("abcdefghij", 1, 8, "abcde", 0, 5, 1);
2749    test("abcdefghij", 1, 8, "abcde", 0, 6, 1);
2750    test("abcdefghij", 1, 8, "abcde", 1, 0, 8);
2751}
2752
2753void test26()
2754{
2755    test("abcdefghij", 1, 8, "abcde", 1, 1, 7);
2756    test("abcdefghij", 1, 8, "abcde", 1, 2, 6);
2757    test("abcdefghij", 1, 8, "abcde", 1, 3, 5);
2758    test("abcdefghij", 1, 8, "abcde", 1, 4, 4);
2759    test("abcdefghij", 1, 8, "abcde", 1, 5, 4);
2760    test("abcdefghij", 1, 8, "abcde", 2, 0, 8);
2761    test("abcdefghij", 1, 8, "abcde", 2, 1, -1);
2762    test("abcdefghij", 1, 8, "abcde", 2, 2, -1);
2763    test("abcdefghij", 1, 8, "abcde", 2, 3, -1);
2764    test("abcdefghij", 1, 8, "abcde", 2, 4, -1);
2765    test("abcdefghij", 1, 8, "abcde", 4, 0, 8);
2766    test("abcdefghij", 1, 8, "abcde", 4, 1, -3);
2767    test("abcdefghij", 1, 8, "abcde", 4, 2, -3);
2768    test("abcdefghij", 1, 8, "abcde", 5, 0, 8);
2769    test("abcdefghij", 1, 8, "abcde", 5, 1, 8);
2770    test("abcdefghij", 1, 8, "abcde", 6, 0, 0);
2771    test("abcdefghij", 1, 8, "abcdefghij", 0, 0, 8);
2772    test("abcdefghij", 1, 8, "abcdefghij", 0, 1, 1);
2773    test("abcdefghij", 1, 8, "abcdefghij", 0, 5, 1);
2774    test("abcdefghij", 1, 8, "abcdefghij", 0, 9, 1);
2775    test("abcdefghij", 1, 8, "abcdefghij", 0, 10, 1);
2776    test("abcdefghij", 1, 8, "abcdefghij", 0, 11, 1);
2777    test("abcdefghij", 1, 8, "abcdefghij", 1, 0, 8);
2778    test("abcdefghij", 1, 8, "abcdefghij", 1, 1, 7);
2779    test("abcdefghij", 1, 8, "abcdefghij", 1, 4, 4);
2780    test("abcdefghij", 1, 8, "abcdefghij", 1, 8, 0);
2781    test("abcdefghij", 1, 8, "abcdefghij", 1, 9, -1);
2782    test("abcdefghij", 1, 8, "abcdefghij", 1, 10, -1);
2783    test("abcdefghij", 1, 8, "abcdefghij", 5, 0, 8);
2784    test("abcdefghij", 1, 8, "abcdefghij", 5, 1, -4);
2785    test("abcdefghij", 1, 8, "abcdefghij", 5, 2, -4);
2786    test("abcdefghij", 1, 8, "abcdefghij", 5, 4, -4);
2787    test("abcdefghij", 1, 8, "abcdefghij", 5, 5, -4);
2788    test("abcdefghij", 1, 8, "abcdefghij", 5, 6, -4);
2789    test("abcdefghij", 1, 8, "abcdefghij", 9, 0, 8);
2790    test("abcdefghij", 1, 8, "abcdefghij", 9, 1, -8);
2791    test("abcdefghij", 1, 8, "abcdefghij", 9, 2, -8);
2792    test("abcdefghij", 1, 8, "abcdefghij", 10, 0, 8);
2793    test("abcdefghij", 1, 8, "abcdefghij", 10, 1, 8);
2794    test("abcdefghij", 1, 8, "abcdefghij", 11, 0, 0);
2795    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 0, 0, 8);
2796    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 0, 1, 1);
2797    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 0, 10, 1);
2798    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 0, 19, 1);
2799    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 0, 20, 1);
2800    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 0, 21, 1);
2801    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1, 0, 8);
2802    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1, 1, 7);
2803    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1, 9, -1);
2804    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1, 18, -10);
2805    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1, 19, -11);
2806    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1, 20, -11);
2807    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 10, 0, 8);
2808    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 10, 1, -9);
2809    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 10, 5, -9);
2810    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 10, 9, -9);
2811    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 10, 10, -9);
2812    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 10, 11, -9);
2813    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 19, 0, 8);
2814    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 19, 1, -18);
2815    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 19, 2, -18);
2816    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 20, 0, 8);
2817    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 20, 1, 8);
2818    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 21, 0, 0);
2819    test("abcdefghij", 1, 9, "", 0, 0, 9);
2820    test("abcdefghij", 1, 9, "", 0, 1, 9);
2821    test("abcdefghij", 1, 9, "", 1, 0, 0);
2822    test("abcdefghij", 1, 9, "abcde", 0, 0, 9);
2823    test("abcdefghij", 1, 9, "abcde", 0, 1, 1);
2824    test("abcdefghij", 1, 9, "abcde", 0, 2, 1);
2825    test("abcdefghij", 1, 9, "abcde", 0, 4, 1);
2826    test("abcdefghij", 1, 9, "abcde", 0, 5, 1);
2827    test("abcdefghij", 1, 9, "abcde", 0, 6, 1);
2828    test("abcdefghij", 1, 9, "abcde", 1, 0, 9);
2829    test("abcdefghij", 1, 9, "abcde", 1, 1, 8);
2830    test("abcdefghij", 1, 9, "abcde", 1, 2, 7);
2831    test("abcdefghij", 1, 9, "abcde", 1, 3, 6);
2832    test("abcdefghij", 1, 9, "abcde", 1, 4, 5);
2833    test("abcdefghij", 1, 9, "abcde", 1, 5, 5);
2834    test("abcdefghij", 1, 9, "abcde", 2, 0, 9);
2835    test("abcdefghij", 1, 9, "abcde", 2, 1, -1);
2836    test("abcdefghij", 1, 9, "abcde", 2, 2, -1);
2837    test("abcdefghij", 1, 9, "abcde", 2, 3, -1);
2838    test("abcdefghij", 1, 9, "abcde", 2, 4, -1);
2839    test("abcdefghij", 1, 9, "abcde", 4, 0, 9);
2840    test("abcdefghij", 1, 9, "abcde", 4, 1, -3);
2841    test("abcdefghij", 1, 9, "abcde", 4, 2, -3);
2842    test("abcdefghij", 1, 9, "abcde", 5, 0, 9);
2843    test("abcdefghij", 1, 9, "abcde", 5, 1, 9);
2844    test("abcdefghij", 1, 9, "abcde", 6, 0, 0);
2845    test("abcdefghij", 1, 9, "abcdefghij", 0, 0, 9);
2846    test("abcdefghij", 1, 9, "abcdefghij", 0, 1, 1);
2847    test("abcdefghij", 1, 9, "abcdefghij", 0, 5, 1);
2848    test("abcdefghij", 1, 9, "abcdefghij", 0, 9, 1);
2849    test("abcdefghij", 1, 9, "abcdefghij", 0, 10, 1);
2850    test("abcdefghij", 1, 9, "abcdefghij", 0, 11, 1);
2851    test("abcdefghij", 1, 9, "abcdefghij", 1, 0, 9);
2852    test("abcdefghij", 1, 9, "abcdefghij", 1, 1, 8);
2853    test("abcdefghij", 1, 9, "abcdefghij", 1, 4, 5);
2854    test("abcdefghij", 1, 9, "abcdefghij", 1, 8, 1);
2855}
2856
2857void test27()
2858{
2859    test("abcdefghij", 1, 9, "abcdefghij", 1, 9, 0);
2860    test("abcdefghij", 1, 9, "abcdefghij", 1, 10, 0);
2861    test("abcdefghij", 1, 9, "abcdefghij", 5, 0, 9);
2862    test("abcdefghij", 1, 9, "abcdefghij", 5, 1, -4);
2863    test("abcdefghij", 1, 9, "abcdefghij", 5, 2, -4);
2864    test("abcdefghij", 1, 9, "abcdefghij", 5, 4, -4);
2865    test("abcdefghij", 1, 9, "abcdefghij", 5, 5, -4);
2866    test("abcdefghij", 1, 9, "abcdefghij", 5, 6, -4);
2867    test("abcdefghij", 1, 9, "abcdefghij", 9, 0, 9);
2868    test("abcdefghij", 1, 9, "abcdefghij", 9, 1, -8);
2869    test("abcdefghij", 1, 9, "abcdefghij", 9, 2, -8);
2870    test("abcdefghij", 1, 9, "abcdefghij", 10, 0, 9);
2871    test("abcdefghij", 1, 9, "abcdefghij", 10, 1, 9);
2872    test("abcdefghij", 1, 9, "abcdefghij", 11, 0, 0);
2873    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 0, 0, 9);
2874    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 0, 1, 1);
2875    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 0, 10, 1);
2876    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 0, 19, 1);
2877    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 0, 20, 1);
2878    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 0, 21, 1);
2879    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1, 0, 9);
2880    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1, 1, 8);
2881    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1, 9, 0);
2882    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1, 18, -9);
2883    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1, 19, -10);
2884    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1, 20, -10);
2885    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 10, 0, 9);
2886    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 10, 1, -9);
2887    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 10, 5, -9);
2888    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 10, 9, -9);
2889    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 10, 10, -9);
2890    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 10, 11, -9);
2891    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 19, 0, 9);
2892    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 19, 1, -18);
2893    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 19, 2, -18);
2894    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 20, 0, 9);
2895    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 20, 1, 9);
2896    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 21, 0, 0);
2897    test("abcdefghij", 1, 10, "", 0, 0, 9);
2898    test("abcdefghij", 1, 10, "", 0, 1, 9);
2899    test("abcdefghij", 1, 10, "", 1, 0, 0);
2900    test("abcdefghij", 1, 10, "abcde", 0, 0, 9);
2901    test("abcdefghij", 1, 10, "abcde", 0, 1, 1);
2902    test("abcdefghij", 1, 10, "abcde", 0, 2, 1);
2903    test("abcdefghij", 1, 10, "abcde", 0, 4, 1);
2904    test("abcdefghij", 1, 10, "abcde", 0, 5, 1);
2905    test("abcdefghij", 1, 10, "abcde", 0, 6, 1);
2906    test("abcdefghij", 1, 10, "abcde", 1, 0, 9);
2907    test("abcdefghij", 1, 10, "abcde", 1, 1, 8);
2908    test("abcdefghij", 1, 10, "abcde", 1, 2, 7);
2909    test("abcdefghij", 1, 10, "abcde", 1, 3, 6);
2910    test("abcdefghij", 1, 10, "abcde", 1, 4, 5);
2911    test("abcdefghij", 1, 10, "abcde", 1, 5, 5);
2912    test("abcdefghij", 1, 10, "abcde", 2, 0, 9);
2913    test("abcdefghij", 1, 10, "abcde", 2, 1, -1);
2914    test("abcdefghij", 1, 10, "abcde", 2, 2, -1);
2915    test("abcdefghij", 1, 10, "abcde", 2, 3, -1);
2916    test("abcdefghij", 1, 10, "abcde", 2, 4, -1);
2917    test("abcdefghij", 1, 10, "abcde", 4, 0, 9);
2918    test("abcdefghij", 1, 10, "abcde", 4, 1, -3);
2919    test("abcdefghij", 1, 10, "abcde", 4, 2, -3);
2920    test("abcdefghij", 1, 10, "abcde", 5, 0, 9);
2921    test("abcdefghij", 1, 10, "abcde", 5, 1, 9);
2922    test("abcdefghij", 1, 10, "abcde", 6, 0, 0);
2923    test("abcdefghij", 1, 10, "abcdefghij", 0, 0, 9);
2924    test("abcdefghij", 1, 10, "abcdefghij", 0, 1, 1);
2925    test("abcdefghij", 1, 10, "abcdefghij", 0, 5, 1);
2926    test("abcdefghij", 1, 10, "abcdefghij", 0, 9, 1);
2927    test("abcdefghij", 1, 10, "abcdefghij", 0, 10, 1);
2928    test("abcdefghij", 1, 10, "abcdefghij", 0, 11, 1);
2929    test("abcdefghij", 1, 10, "abcdefghij", 1, 0, 9);
2930    test("abcdefghij", 1, 10, "abcdefghij", 1, 1, 8);
2931    test("abcdefghij", 1, 10, "abcdefghij", 1, 4, 5);
2932    test("abcdefghij", 1, 10, "abcdefghij", 1, 8, 1);
2933    test("abcdefghij", 1, 10, "abcdefghij", 1, 9, 0);
2934    test("abcdefghij", 1, 10, "abcdefghij", 1, 10, 0);
2935    test("abcdefghij", 1, 10, "abcdefghij", 5, 0, 9);
2936    test("abcdefghij", 1, 10, "abcdefghij", 5, 1, -4);
2937    test("abcdefghij", 1, 10, "abcdefghij", 5, 2, -4);
2938    test("abcdefghij", 1, 10, "abcdefghij", 5, 4, -4);
2939    test("abcdefghij", 1, 10, "abcdefghij", 5, 5, -4);
2940    test("abcdefghij", 1, 10, "abcdefghij", 5, 6, -4);
2941    test("abcdefghij", 1, 10, "abcdefghij", 9, 0, 9);
2942    test("abcdefghij", 1, 10, "abcdefghij", 9, 1, -8);
2943    test("abcdefghij", 1, 10, "abcdefghij", 9, 2, -8);
2944    test("abcdefghij", 1, 10, "abcdefghij", 10, 0, 9);
2945    test("abcdefghij", 1, 10, "abcdefghij", 10, 1, 9);
2946    test("abcdefghij", 1, 10, "abcdefghij", 11, 0, 0);
2947    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 0, 0, 9);
2948    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 0, 1, 1);
2949    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 0, 10, 1);
2950    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 0, 19, 1);
2951    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 0, 20, 1);
2952    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 0, 21, 1);
2953    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1, 0, 9);
2954    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1, 1, 8);
2955    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1, 9, 0);
2956    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1, 18, -9);
2957    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1, 19, -10);
2958    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1, 20, -10);
2959}
2960
2961void test28()
2962{
2963    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 10, 0, 9);
2964    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 10, 1, -9);
2965    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 10, 5, -9);
2966    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 10, 9, -9);
2967    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 10, 10, -9);
2968    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 10, 11, -9);
2969    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 19, 0, 9);
2970    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 19, 1, -18);
2971    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 19, 2, -18);
2972    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 20, 0, 9);
2973    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 20, 1, 9);
2974    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 21, 0, 0);
2975    test("abcdefghij", 5, 0, "", 0, 0, 0);
2976    test("abcdefghij", 5, 0, "", 0, 1, 0);
2977    test("abcdefghij", 5, 0, "", 1, 0, 0);
2978    test("abcdefghij", 5, 0, "abcde", 0, 0, 0);
2979    test("abcdefghij", 5, 0, "abcde", 0, 1, -1);
2980    test("abcdefghij", 5, 0, "abcde", 0, 2, -2);
2981    test("abcdefghij", 5, 0, "abcde", 0, 4, -4);
2982    test("abcdefghij", 5, 0, "abcde", 0, 5, -5);
2983    test("abcdefghij", 5, 0, "abcde", 0, 6, -5);
2984    test("abcdefghij", 5, 0, "abcde", 1, 0, 0);
2985    test("abcdefghij", 5, 0, "abcde", 1, 1, -1);
2986    test("abcdefghij", 5, 0, "abcde", 1, 2, -2);
2987    test("abcdefghij", 5, 0, "abcde", 1, 3, -3);
2988    test("abcdefghij", 5, 0, "abcde", 1, 4, -4);
2989    test("abcdefghij", 5, 0, "abcde", 1, 5, -4);
2990    test("abcdefghij", 5, 0, "abcde", 2, 0, 0);
2991    test("abcdefghij", 5, 0, "abcde", 2, 1, -1);
2992    test("abcdefghij", 5, 0, "abcde", 2, 2, -2);
2993    test("abcdefghij", 5, 0, "abcde", 2, 3, -3);
2994    test("abcdefghij", 5, 0, "abcde", 2, 4, -3);
2995    test("abcdefghij", 5, 0, "abcde", 4, 0, 0);
2996    test("abcdefghij", 5, 0, "abcde", 4, 1, -1);
2997    test("abcdefghij", 5, 0, "abcde", 4, 2, -1);
2998    test("abcdefghij", 5, 0, "abcde", 5, 0, 0);
2999    test("abcdefghij", 5, 0, "abcde", 5, 1, 0);
3000    test("abcdefghij", 5, 0, "abcde", 6, 0, 0);
3001    test("abcdefghij", 5, 0, "abcdefghij", 0, 0, 0);
3002    test("abcdefghij", 5, 0, "abcdefghij", 0, 1, -1);
3003    test("abcdefghij", 5, 0, "abcdefghij", 0, 5, -5);
3004    test("abcdefghij", 5, 0, "abcdefghij", 0, 9, -9);
3005    test("abcdefghij", 5, 0, "abcdefghij", 0, 10, -10);
3006    test("abcdefghij", 5, 0, "abcdefghij", 0, 11, -10);
3007    test("abcdefghij", 5, 0, "abcdefghij", 1, 0, 0);
3008    test("abcdefghij", 5, 0, "abcdefghij", 1, 1, -1);
3009    test("abcdefghij", 5, 0, "abcdefghij", 1, 4, -4);
3010    test("abcdefghij", 5, 0, "abcdefghij", 1, 8, -8);
3011    test("abcdefghij", 5, 0, "abcdefghij", 1, 9, -9);
3012    test("abcdefghij", 5, 0, "abcdefghij", 1, 10, -9);
3013    test("abcdefghij", 5, 0, "abcdefghij", 5, 0, 0);
3014    test("abcdefghij", 5, 0, "abcdefghij", 5, 1, -1);
3015    test("abcdefghij", 5, 0, "abcdefghij", 5, 2, -2);
3016    test("abcdefghij", 5, 0, "abcdefghij", 5, 4, -4);
3017    test("abcdefghij", 5, 0, "abcdefghij", 5, 5, -5);
3018    test("abcdefghij", 5, 0, "abcdefghij", 5, 6, -5);
3019    test("abcdefghij", 5, 0, "abcdefghij", 9, 0, 0);
3020    test("abcdefghij", 5, 0, "abcdefghij", 9, 1, -1);
3021    test("abcdefghij", 5, 0, "abcdefghij", 9, 2, -1);
3022    test("abcdefghij", 5, 0, "abcdefghij", 10, 0, 0);
3023    test("abcdefghij", 5, 0, "abcdefghij", 10, 1, 0);
3024    test("abcdefghij", 5, 0, "abcdefghij", 11, 0, 0);
3025    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 0, 0, 0);
3026    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 0, 1, -1);
3027    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 0, 10, -10);
3028    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 0, 19, -19);
3029    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 0, 20, -20);
3030    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 0, 21, -20);
3031    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 1, 0, 0);
3032    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 1, 1, -1);
3033    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 1, 9, -9);
3034    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 1, 18, -18);
3035    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 1, 19, -19);
3036    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 1, 20, -19);
3037    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 10, 0, 0);
3038    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 10, 1, -1);
3039    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 10, 5, -5);
3040    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 10, 9, -9);
3041    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 10, 10, -10);
3042    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 10, 11, -10);
3043    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 19, 0, 0);
3044    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 19, 1, -1);
3045    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 19, 2, -1);
3046    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 20, 0, 0);
3047    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 20, 1, 0);
3048    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 21, 0, 0);
3049    test("abcdefghij", 5, 1, "", 0, 0, 1);
3050    test("abcdefghij", 5, 1, "", 0, 1, 1);
3051    test("abcdefghij", 5, 1, "", 1, 0, 0);
3052    test("abcdefghij", 5, 1, "abcde", 0, 0, 1);
3053    test("abcdefghij", 5, 1, "abcde", 0, 1, 5);
3054    test("abcdefghij", 5, 1, "abcde", 0, 2, 5);
3055    test("abcdefghij", 5, 1, "abcde", 0, 4, 5);
3056    test("abcdefghij", 5, 1, "abcde", 0, 5, 5);
3057    test("abcdefghij", 5, 1, "abcde", 0, 6, 5);
3058    test("abcdefghij", 5, 1, "abcde", 1, 0, 1);
3059    test("abcdefghij", 5, 1, "abcde", 1, 1, 4);
3060    test("abcdefghij", 5, 1, "abcde", 1, 2, 4);
3061    test("abcdefghij", 5, 1, "abcde", 1, 3, 4);
3062    test("abcdefghij", 5, 1, "abcde", 1, 4, 4);
3063}
3064
3065void test29()
3066{
3067    test("abcdefghij", 5, 1, "abcde", 1, 5, 4);
3068    test("abcdefghij", 5, 1, "abcde", 2, 0, 1);
3069    test("abcdefghij", 5, 1, "abcde", 2, 1, 3);
3070    test("abcdefghij", 5, 1, "abcde", 2, 2, 3);
3071    test("abcdefghij", 5, 1, "abcde", 2, 3, 3);
3072    test("abcdefghij", 5, 1, "abcde", 2, 4, 3);
3073    test("abcdefghij", 5, 1, "abcde", 4, 0, 1);
3074    test("abcdefghij", 5, 1, "abcde", 4, 1, 1);
3075    test("abcdefghij", 5, 1, "abcde", 4, 2, 1);
3076    test("abcdefghij", 5, 1, "abcde", 5, 0, 1);
3077    test("abcdefghij", 5, 1, "abcde", 5, 1, 1);
3078    test("abcdefghij", 5, 1, "abcde", 6, 0, 0);
3079    test("abcdefghij", 5, 1, "abcdefghij", 0, 0, 1);
3080    test("abcdefghij", 5, 1, "abcdefghij", 0, 1, 5);
3081    test("abcdefghij", 5, 1, "abcdefghij", 0, 5, 5);
3082    test("abcdefghij", 5, 1, "abcdefghij", 0, 9, 5);
3083    test("abcdefghij", 5, 1, "abcdefghij", 0, 10, 5);
3084    test("abcdefghij", 5, 1, "abcdefghij", 0, 11, 5);
3085    test("abcdefghij", 5, 1, "abcdefghij", 1, 0, 1);
3086    test("abcdefghij", 5, 1, "abcdefghij", 1, 1, 4);
3087    test("abcdefghij", 5, 1, "abcdefghij", 1, 4, 4);
3088    test("abcdefghij", 5, 1, "abcdefghij", 1, 8, 4);
3089    test("abcdefghij", 5, 1, "abcdefghij", 1, 9, 4);
3090    test("abcdefghij", 5, 1, "abcdefghij", 1, 10, 4);
3091    test("abcdefghij", 5, 1, "abcdefghij", 5, 0, 1);
3092    test("abcdefghij", 5, 1, "abcdefghij", 5, 1, 0);
3093    test("abcdefghij", 5, 1, "abcdefghij", 5, 2, -1);
3094    test("abcdefghij", 5, 1, "abcdefghij", 5, 4, -3);
3095    test("abcdefghij", 5, 1, "abcdefghij", 5, 5, -4);
3096    test("abcdefghij", 5, 1, "abcdefghij", 5, 6, -4);
3097    test("abcdefghij", 5, 1, "abcdefghij", 9, 0, 1);
3098    test("abcdefghij", 5, 1, "abcdefghij", 9, 1, -4);
3099    test("abcdefghij", 5, 1, "abcdefghij", 9, 2, -4);
3100    test("abcdefghij", 5, 1, "abcdefghij", 10, 0, 1);
3101    test("abcdefghij", 5, 1, "abcdefghij", 10, 1, 1);
3102    test("abcdefghij", 5, 1, "abcdefghij", 11, 0, 0);
3103    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 0, 0, 1);
3104    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 0, 1, 5);
3105    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 0, 10, 5);
3106    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 0, 19, 5);
3107    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 0, 20, 5);
3108    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 0, 21, 5);
3109    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 1, 0, 1);
3110    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 1, 1, 4);
3111    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 1, 9, 4);
3112    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 1, 18, 4);
3113    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 1, 19, 4);
3114    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 1, 20, 4);
3115    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 10, 0, 1);
3116    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 10, 1, -5);
3117    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 10, 5, -5);
3118    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 10, 9, -5);
3119    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 10, 10, -5);
3120    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 10, 11, -5);
3121    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 19, 0, 1);
3122    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 19, 1, -14);
3123    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 19, 2, -14);
3124    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 20, 0, 1);
3125    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 20, 1, 1);
3126    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 21, 0, 0);
3127    test("abcdefghij", 5, 2, "", 0, 0, 2);
3128    test("abcdefghij", 5, 2, "", 0, 1, 2);
3129    test("abcdefghij", 5, 2, "", 1, 0, 0);
3130    test("abcdefghij", 5, 2, "abcde", 0, 0, 2);
3131    test("abcdefghij", 5, 2, "abcde", 0, 1, 5);
3132    test("abcdefghij", 5, 2, "abcde", 0, 2, 5);
3133    test("abcdefghij", 5, 2, "abcde", 0, 4, 5);
3134    test("abcdefghij", 5, 2, "abcde", 0, 5, 5);
3135    test("abcdefghij", 5, 2, "abcde", 0, 6, 5);
3136    test("abcdefghij", 5, 2, "abcde", 1, 0, 2);
3137    test("abcdefghij", 5, 2, "abcde", 1, 1, 4);
3138    test("abcdefghij", 5, 2, "abcde", 1, 2, 4);
3139    test("abcdefghij", 5, 2, "abcde", 1, 3, 4);
3140    test("abcdefghij", 5, 2, "abcde", 1, 4, 4);
3141    test("abcdefghij", 5, 2, "abcde", 1, 5, 4);
3142    test("abcdefghij", 5, 2, "abcde", 2, 0, 2);
3143    test("abcdefghij", 5, 2, "abcde", 2, 1, 3);
3144    test("abcdefghij", 5, 2, "abcde", 2, 2, 3);
3145    test("abcdefghij", 5, 2, "abcde", 2, 3, 3);
3146    test("abcdefghij", 5, 2, "abcde", 2, 4, 3);
3147    test("abcdefghij", 5, 2, "abcde", 4, 0, 2);
3148    test("abcdefghij", 5, 2, "abcde", 4, 1, 1);
3149    test("abcdefghij", 5, 2, "abcde", 4, 2, 1);
3150    test("abcdefghij", 5, 2, "abcde", 5, 0, 2);
3151    test("abcdefghij", 5, 2, "abcde", 5, 1, 2);
3152    test("abcdefghij", 5, 2, "abcde", 6, 0, 0);
3153    test("abcdefghij", 5, 2, "abcdefghij", 0, 0, 2);
3154    test("abcdefghij", 5, 2, "abcdefghij", 0, 1, 5);
3155    test("abcdefghij", 5, 2, "abcdefghij", 0, 5, 5);
3156    test("abcdefghij", 5, 2, "abcdefghij", 0, 9, 5);
3157    test("abcdefghij", 5, 2, "abcdefghij", 0, 10, 5);
3158    test("abcdefghij", 5, 2, "abcdefghij", 0, 11, 5);
3159    test("abcdefghij", 5, 2, "abcdefghij", 1, 0, 2);
3160    test("abcdefghij", 5, 2, "abcdefghij", 1, 1, 4);
3161    test("abcdefghij", 5, 2, "abcdefghij", 1, 4, 4);
3162    test("abcdefghij", 5, 2, "abcdefghij", 1, 8, 4);
3163    test("abcdefghij", 5, 2, "abcdefghij", 1, 9, 4);
3164    test("abcdefghij", 5, 2, "abcdefghij", 1, 10, 4);
3165    test("abcdefghij", 5, 2, "abcdefghij", 5, 0, 2);
3166    test("abcdefghij", 5, 2, "abcdefghij", 5, 1, 1);
3167}
3168
3169void test30()
3170{
3171    test("abcdefghij", 5, 2, "abcdefghij", 5, 2, 0);
3172    test("abcdefghij", 5, 2, "abcdefghij", 5, 4, -2);
3173    test("abcdefghij", 5, 2, "abcdefghij", 5, 5, -3);
3174    test("abcdefghij", 5, 2, "abcdefghij", 5, 6, -3);
3175    test("abcdefghij", 5, 2, "abcdefghij", 9, 0, 2);
3176    test("abcdefghij", 5, 2, "abcdefghij", 9, 1, -4);
3177    test("abcdefghij", 5, 2, "abcdefghij", 9, 2, -4);
3178    test("abcdefghij", 5, 2, "abcdefghij", 10, 0, 2);
3179    test("abcdefghij", 5, 2, "abcdefghij", 10, 1, 2);
3180    test("abcdefghij", 5, 2, "abcdefghij", 11, 0, 0);
3181    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 0, 0, 2);
3182    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 0, 1, 5);
3183    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 0, 10, 5);
3184    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 0, 19, 5);
3185    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 0, 20, 5);
3186    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 0, 21, 5);
3187    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 1, 0, 2);
3188    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 1, 1, 4);
3189    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 1, 9, 4);
3190    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 1, 18, 4);
3191    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 1, 19, 4);
3192    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 1, 20, 4);
3193    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 10, 0, 2);
3194    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 10, 1, -5);
3195    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 10, 5, -5);
3196    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 10, 9, -5);
3197    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 10, 10, -5);
3198    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 10, 11, -5);
3199    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 19, 0, 2);
3200    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 19, 1, -14);
3201    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 19, 2, -14);
3202    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 20, 0, 2);
3203    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 20, 1, 2);
3204    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 21, 0, 0);
3205    test("abcdefghij", 5, 4, "", 0, 0, 4);
3206    test("abcdefghij", 5, 4, "", 0, 1, 4);
3207    test("abcdefghij", 5, 4, "", 1, 0, 0);
3208    test("abcdefghij", 5, 4, "abcde", 0, 0, 4);
3209    test("abcdefghij", 5, 4, "abcde", 0, 1, 5);
3210    test("abcdefghij", 5, 4, "abcde", 0, 2, 5);
3211    test("abcdefghij", 5, 4, "abcde", 0, 4, 5);
3212    test("abcdefghij", 5, 4, "abcde", 0, 5, 5);
3213    test("abcdefghij", 5, 4, "abcde", 0, 6, 5);
3214    test("abcdefghij", 5, 4, "abcde", 1, 0, 4);
3215    test("abcdefghij", 5, 4, "abcde", 1, 1, 4);
3216    test("abcdefghij", 5, 4, "abcde", 1, 2, 4);
3217    test("abcdefghij", 5, 4, "abcde", 1, 3, 4);
3218    test("abcdefghij", 5, 4, "abcde", 1, 4, 4);
3219    test("abcdefghij", 5, 4, "abcde", 1, 5, 4);
3220    test("abcdefghij", 5, 4, "abcde", 2, 0, 4);
3221    test("abcdefghij", 5, 4, "abcde", 2, 1, 3);
3222    test("abcdefghij", 5, 4, "abcde", 2, 2, 3);
3223    test("abcdefghij", 5, 4, "abcde", 2, 3, 3);
3224    test("abcdefghij", 5, 4, "abcde", 2, 4, 3);
3225    test("abcdefghij", 5, 4, "abcde", 4, 0, 4);
3226    test("abcdefghij", 5, 4, "abcde", 4, 1, 1);
3227    test("abcdefghij", 5, 4, "abcde", 4, 2, 1);
3228    test("abcdefghij", 5, 4, "abcde", 5, 0, 4);
3229    test("abcdefghij", 5, 4, "abcde", 5, 1, 4);
3230    test("abcdefghij", 5, 4, "abcde", 6, 0, 0);
3231    test("abcdefghij", 5, 4, "abcdefghij", 0, 0, 4);
3232    test("abcdefghij", 5, 4, "abcdefghij", 0, 1, 5);
3233    test("abcdefghij", 5, 4, "abcdefghij", 0, 5, 5);
3234    test("abcdefghij", 5, 4, "abcdefghij", 0, 9, 5);
3235    test("abcdefghij", 5, 4, "abcdefghij", 0, 10, 5);
3236    test("abcdefghij", 5, 4, "abcdefghij", 0, 11, 5);
3237    test("abcdefghij", 5, 4, "abcdefghij", 1, 0, 4);
3238    test("abcdefghij", 5, 4, "abcdefghij", 1, 1, 4);
3239    test("abcdefghij", 5, 4, "abcdefghij", 1, 4, 4);
3240    test("abcdefghij", 5, 4, "abcdefghij", 1, 8, 4);
3241    test("abcdefghij", 5, 4, "abcdefghij", 1, 9, 4);
3242    test("abcdefghij", 5, 4, "abcdefghij", 1, 10, 4);
3243    test("abcdefghij", 5, 4, "abcdefghij", 5, 0, 4);
3244    test("abcdefghij", 5, 4, "abcdefghij", 5, 1, 3);
3245    test("abcdefghij", 5, 4, "abcdefghij", 5, 2, 2);
3246    test("abcdefghij", 5, 4, "abcdefghij", 5, 4, 0);
3247    test("abcdefghij", 5, 4, "abcdefghij", 5, 5, -1);
3248    test("abcdefghij", 5, 4, "abcdefghij", 5, 6, -1);
3249    test("abcdefghij", 5, 4, "abcdefghij", 9, 0, 4);
3250    test("abcdefghij", 5, 4, "abcdefghij", 9, 1, -4);
3251    test("abcdefghij", 5, 4, "abcdefghij", 9, 2, -4);
3252    test("abcdefghij", 5, 4, "abcdefghij", 10, 0, 4);
3253    test("abcdefghij", 5, 4, "abcdefghij", 10, 1, 4);
3254    test("abcdefghij", 5, 4, "abcdefghij", 11, 0, 0);
3255    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 0, 0, 4);
3256    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 0, 1, 5);
3257    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 0, 10, 5);
3258    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 0, 19, 5);
3259    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 0, 20, 5);
3260    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 0, 21, 5);
3261    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 1, 0, 4);
3262    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 1, 1, 4);
3263    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 1, 9, 4);
3264    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 1, 18, 4);
3265    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 1, 19, 4);
3266    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 1, 20, 4);
3267    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 10, 0, 4);
3268    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 10, 1, -5);
3269    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 10, 5, -5);
3270    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 10, 9, -5);
3271}
3272
3273void test31()
3274{
3275    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 10, 10, -5);
3276    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 10, 11, -5);
3277    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 19, 0, 4);
3278    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 19, 1, -14);
3279    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 19, 2, -14);
3280    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 20, 0, 4);
3281    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 20, 1, 4);
3282    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 21, 0, 0);
3283    test("abcdefghij", 5, 5, "", 0, 0, 5);
3284    test("abcdefghij", 5, 5, "", 0, 1, 5);
3285    test("abcdefghij", 5, 5, "", 1, 0, 0);
3286    test("abcdefghij", 5, 5, "abcde", 0, 0, 5);
3287    test("abcdefghij", 5, 5, "abcde", 0, 1, 5);
3288    test("abcdefghij", 5, 5, "abcde", 0, 2, 5);
3289    test("abcdefghij", 5, 5, "abcde", 0, 4, 5);
3290    test("abcdefghij", 5, 5, "abcde", 0, 5, 5);
3291    test("abcdefghij", 5, 5, "abcde", 0, 6, 5);
3292    test("abcdefghij", 5, 5, "abcde", 1, 0, 5);
3293    test("abcdefghij", 5, 5, "abcde", 1, 1, 4);
3294    test("abcdefghij", 5, 5, "abcde", 1, 2, 4);
3295    test("abcdefghij", 5, 5, "abcde", 1, 3, 4);
3296    test("abcdefghij", 5, 5, "abcde", 1, 4, 4);
3297    test("abcdefghij", 5, 5, "abcde", 1, 5, 4);
3298    test("abcdefghij", 5, 5, "abcde", 2, 0, 5);
3299    test("abcdefghij", 5, 5, "abcde", 2, 1, 3);
3300    test("abcdefghij", 5, 5, "abcde", 2, 2, 3);
3301    test("abcdefghij", 5, 5, "abcde", 2, 3, 3);
3302    test("abcdefghij", 5, 5, "abcde", 2, 4, 3);
3303    test("abcdefghij", 5, 5, "abcde", 4, 0, 5);
3304    test("abcdefghij", 5, 5, "abcde", 4, 1, 1);
3305    test("abcdefghij", 5, 5, "abcde", 4, 2, 1);
3306    test("abcdefghij", 5, 5, "abcde", 5, 0, 5);
3307    test("abcdefghij", 5, 5, "abcde", 5, 1, 5);
3308    test("abcdefghij", 5, 5, "abcde", 6, 0, 0);
3309    test("abcdefghij", 5, 5, "abcdefghij", 0, 0, 5);
3310    test("abcdefghij", 5, 5, "abcdefghij", 0, 1, 5);
3311    test("abcdefghij", 5, 5, "abcdefghij", 0, 5, 5);
3312    test("abcdefghij", 5, 5, "abcdefghij", 0, 9, 5);
3313    test("abcdefghij", 5, 5, "abcdefghij", 0, 10, 5);
3314    test("abcdefghij", 5, 5, "abcdefghij", 0, 11, 5);
3315    test("abcdefghij", 5, 5, "abcdefghij", 1, 0, 5);
3316    test("abcdefghij", 5, 5, "abcdefghij", 1, 1, 4);
3317    test("abcdefghij", 5, 5, "abcdefghij", 1, 4, 4);
3318    test("abcdefghij", 5, 5, "abcdefghij", 1, 8, 4);
3319    test("abcdefghij", 5, 5, "abcdefghij", 1, 9, 4);
3320    test("abcdefghij", 5, 5, "abcdefghij", 1, 10, 4);
3321    test("abcdefghij", 5, 5, "abcdefghij", 5, 0, 5);
3322    test("abcdefghij", 5, 5, "abcdefghij", 5, 1, 4);
3323    test("abcdefghij", 5, 5, "abcdefghij", 5, 2, 3);
3324    test("abcdefghij", 5, 5, "abcdefghij", 5, 4, 1);
3325    test("abcdefghij", 5, 5, "abcdefghij", 5, 5, 0);
3326    test("abcdefghij", 5, 5, "abcdefghij", 5, 6, 0);
3327    test("abcdefghij", 5, 5, "abcdefghij", 9, 0, 5);
3328    test("abcdefghij", 5, 5, "abcdefghij", 9, 1, -4);
3329    test("abcdefghij", 5, 5, "abcdefghij", 9, 2, -4);
3330    test("abcdefghij", 5, 5, "abcdefghij", 10, 0, 5);
3331    test("abcdefghij", 5, 5, "abcdefghij", 10, 1, 5);
3332    test("abcdefghij", 5, 5, "abcdefghij", 11, 0, 0);
3333    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 0, 0, 5);
3334    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 0, 1, 5);
3335    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 0, 10, 5);
3336    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 0, 19, 5);
3337    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 0, 20, 5);
3338    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 0, 21, 5);
3339    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 1, 0, 5);
3340    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 1, 1, 4);
3341    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 1, 9, 4);
3342    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 1, 18, 4);
3343    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 1, 19, 4);
3344    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 1, 20, 4);
3345    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 10, 0, 5);
3346    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 10, 1, -5);
3347    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 10, 5, -5);
3348    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 10, 9, -5);
3349    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 10, 10, -5);
3350    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 10, 11, -5);
3351    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 19, 0, 5);
3352    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 19, 1, -14);
3353    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 19, 2, -14);
3354    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 20, 0, 5);
3355    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 20, 1, 5);
3356    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 21, 0, 0);
3357    test("abcdefghij", 5, 6, "", 0, 0, 5);
3358    test("abcdefghij", 5, 6, "", 0, 1, 5);
3359    test("abcdefghij", 5, 6, "", 1, 0, 0);
3360    test("abcdefghij", 5, 6, "abcde", 0, 0, 5);
3361    test("abcdefghij", 5, 6, "abcde", 0, 1, 5);
3362    test("abcdefghij", 5, 6, "abcde", 0, 2, 5);
3363    test("abcdefghij", 5, 6, "abcde", 0, 4, 5);
3364    test("abcdefghij", 5, 6, "abcde", 0, 5, 5);
3365    test("abcdefghij", 5, 6, "abcde", 0, 6, 5);
3366    test("abcdefghij", 5, 6, "abcde", 1, 0, 5);
3367    test("abcdefghij", 5, 6, "abcde", 1, 1, 4);
3368    test("abcdefghij", 5, 6, "abcde", 1, 2, 4);
3369    test("abcdefghij", 5, 6, "abcde", 1, 3, 4);
3370    test("abcdefghij", 5, 6, "abcde", 1, 4, 4);
3371    test("abcdefghij", 5, 6, "abcde", 1, 5, 4);
3372    test("abcdefghij", 5, 6, "abcde", 2, 0, 5);
3373    test("abcdefghij", 5, 6, "abcde", 2, 1, 3);
3374    test("abcdefghij", 5, 6, "abcde", 2, 2, 3);
3375}
3376
3377void test32()
3378{
3379    test("abcdefghij", 5, 6, "abcde", 2, 3, 3);
3380    test("abcdefghij", 5, 6, "abcde", 2, 4, 3);
3381    test("abcdefghij", 5, 6, "abcde", 4, 0, 5);
3382    test("abcdefghij", 5, 6, "abcde", 4, 1, 1);
3383    test("abcdefghij", 5, 6, "abcde", 4, 2, 1);
3384    test("abcdefghij", 5, 6, "abcde", 5, 0, 5);
3385    test("abcdefghij", 5, 6, "abcde", 5, 1, 5);
3386    test("abcdefghij", 5, 6, "abcde", 6, 0, 0);
3387    test("abcdefghij", 5, 6, "abcdefghij", 0, 0, 5);
3388    test("abcdefghij", 5, 6, "abcdefghij", 0, 1, 5);
3389    test("abcdefghij", 5, 6, "abcdefghij", 0, 5, 5);
3390    test("abcdefghij", 5, 6, "abcdefghij", 0, 9, 5);
3391    test("abcdefghij", 5, 6, "abcdefghij", 0, 10, 5);
3392    test("abcdefghij", 5, 6, "abcdefghij", 0, 11, 5);
3393    test("abcdefghij", 5, 6, "abcdefghij", 1, 0, 5);
3394    test("abcdefghij", 5, 6, "abcdefghij", 1, 1, 4);
3395    test("abcdefghij", 5, 6, "abcdefghij", 1, 4, 4);
3396    test("abcdefghij", 5, 6, "abcdefghij", 1, 8, 4);
3397    test("abcdefghij", 5, 6, "abcdefghij", 1, 9, 4);
3398    test("abcdefghij", 5, 6, "abcdefghij", 1, 10, 4);
3399    test("abcdefghij", 5, 6, "abcdefghij", 5, 0, 5);
3400    test("abcdefghij", 5, 6, "abcdefghij", 5, 1, 4);
3401    test("abcdefghij", 5, 6, "abcdefghij", 5, 2, 3);
3402    test("abcdefghij", 5, 6, "abcdefghij", 5, 4, 1);
3403    test("abcdefghij", 5, 6, "abcdefghij", 5, 5, 0);
3404    test("abcdefghij", 5, 6, "abcdefghij", 5, 6, 0);
3405    test("abcdefghij", 5, 6, "abcdefghij", 9, 0, 5);
3406    test("abcdefghij", 5, 6, "abcdefghij", 9, 1, -4);
3407    test("abcdefghij", 5, 6, "abcdefghij", 9, 2, -4);
3408    test("abcdefghij", 5, 6, "abcdefghij", 10, 0, 5);
3409    test("abcdefghij", 5, 6, "abcdefghij", 10, 1, 5);
3410    test("abcdefghij", 5, 6, "abcdefghij", 11, 0, 0);
3411    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 0, 0, 5);
3412    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 0, 1, 5);
3413    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 0, 10, 5);
3414    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 0, 19, 5);
3415    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 0, 20, 5);
3416    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 0, 21, 5);
3417    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 1, 0, 5);
3418    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 1, 1, 4);
3419    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 1, 9, 4);
3420    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 1, 18, 4);
3421    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 1, 19, 4);
3422    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 1, 20, 4);
3423    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 10, 0, 5);
3424    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 10, 1, -5);
3425    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 10, 5, -5);
3426    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 10, 9, -5);
3427    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 10, 10, -5);
3428    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 10, 11, -5);
3429    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 19, 0, 5);
3430    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 19, 1, -14);
3431    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 19, 2, -14);
3432    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 20, 0, 5);
3433    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 20, 1, 5);
3434    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 21, 0, 0);
3435    test("abcdefghij", 9, 0, "", 0, 0, 0);
3436    test("abcdefghij", 9, 0, "", 0, 1, 0);
3437    test("abcdefghij", 9, 0, "", 1, 0, 0);
3438    test("abcdefghij", 9, 0, "abcde", 0, 0, 0);
3439    test("abcdefghij", 9, 0, "abcde", 0, 1, -1);
3440    test("abcdefghij", 9, 0, "abcde", 0, 2, -2);
3441    test("abcdefghij", 9, 0, "abcde", 0, 4, -4);
3442    test("abcdefghij", 9, 0, "abcde", 0, 5, -5);
3443    test("abcdefghij", 9, 0, "abcde", 0, 6, -5);
3444    test("abcdefghij", 9, 0, "abcde", 1, 0, 0);
3445    test("abcdefghij", 9, 0, "abcde", 1, 1, -1);
3446    test("abcdefghij", 9, 0, "abcde", 1, 2, -2);
3447    test("abcdefghij", 9, 0, "abcde", 1, 3, -3);
3448    test("abcdefghij", 9, 0, "abcde", 1, 4, -4);
3449    test("abcdefghij", 9, 0, "abcde", 1, 5, -4);
3450    test("abcdefghij", 9, 0, "abcde", 2, 0, 0);
3451    test("abcdefghij", 9, 0, "abcde", 2, 1, -1);
3452    test("abcdefghij", 9, 0, "abcde", 2, 2, -2);
3453    test("abcdefghij", 9, 0, "abcde", 2, 3, -3);
3454    test("abcdefghij", 9, 0, "abcde", 2, 4, -3);
3455    test("abcdefghij", 9, 0, "abcde", 4, 0, 0);
3456    test("abcdefghij", 9, 0, "abcde", 4, 1, -1);
3457    test("abcdefghij", 9, 0, "abcde", 4, 2, -1);
3458    test("abcdefghij", 9, 0, "abcde", 5, 0, 0);
3459    test("abcdefghij", 9, 0, "abcde", 5, 1, 0);
3460    test("abcdefghij", 9, 0, "abcde", 6, 0, 0);
3461    test("abcdefghij", 9, 0, "abcdefghij", 0, 0, 0);
3462    test("abcdefghij", 9, 0, "abcdefghij", 0, 1, -1);
3463    test("abcdefghij", 9, 0, "abcdefghij", 0, 5, -5);
3464    test("abcdefghij", 9, 0, "abcdefghij", 0, 9, -9);
3465    test("abcdefghij", 9, 0, "abcdefghij", 0, 10, -10);
3466    test("abcdefghij", 9, 0, "abcdefghij", 0, 11, -10);
3467    test("abcdefghij", 9, 0, "abcdefghij", 1, 0, 0);
3468    test("abcdefghij", 9, 0, "abcdefghij", 1, 1, -1);
3469    test("abcdefghij", 9, 0, "abcdefghij", 1, 4, -4);
3470    test("abcdefghij", 9, 0, "abcdefghij", 1, 8, -8);
3471    test("abcdefghij", 9, 0, "abcdefghij", 1, 9, -9);
3472    test("abcdefghij", 9, 0, "abcdefghij", 1, 10, -9);
3473    test("abcdefghij", 9, 0, "abcdefghij", 5, 0, 0);
3474    test("abcdefghij", 9, 0, "abcdefghij", 5, 1, -1);
3475    test("abcdefghij", 9, 0, "abcdefghij", 5, 2, -2);
3476    test("abcdefghij", 9, 0, "abcdefghij", 5, 4, -4);
3477    test("abcdefghij", 9, 0, "abcdefghij", 5, 5, -5);
3478    test("abcdefghij", 9, 0, "abcdefghij", 5, 6, -5);
3479}
3480
3481void test33()
3482{
3483    test("abcdefghij", 9, 0, "abcdefghij", 9, 0, 0);
3484    test("abcdefghij", 9, 0, "abcdefghij", 9, 1, -1);
3485    test("abcdefghij", 9, 0, "abcdefghij", 9, 2, -1);
3486    test("abcdefghij", 9, 0, "abcdefghij", 10, 0, 0);
3487    test("abcdefghij", 9, 0, "abcdefghij", 10, 1, 0);
3488    test("abcdefghij", 9, 0, "abcdefghij", 11, 0, 0);
3489    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 0, 0, 0);
3490    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 0, 1, -1);
3491    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 0, 10, -10);
3492    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 0, 19, -19);
3493    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 0, 20, -20);
3494    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 0, 21, -20);
3495    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 1, 0, 0);
3496    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 1, 1, -1);
3497    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 1, 9, -9);
3498    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 1, 18, -18);
3499    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 1, 19, -19);
3500    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 1, 20, -19);
3501    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 10, 0, 0);
3502    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 10, 1, -1);
3503    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 10, 5, -5);
3504    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 10, 9, -9);
3505    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 10, 10, -10);
3506    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 10, 11, -10);
3507    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 19, 0, 0);
3508    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 19, 1, -1);
3509    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 19, 2, -1);
3510    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 20, 0, 0);
3511    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 20, 1, 0);
3512    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 21, 0, 0);
3513    test("abcdefghij", 9, 1, "", 0, 0, 1);
3514    test("abcdefghij", 9, 1, "", 0, 1, 1);
3515    test("abcdefghij", 9, 1, "", 1, 0, 0);
3516    test("abcdefghij", 9, 1, "abcde", 0, 0, 1);
3517    test("abcdefghij", 9, 1, "abcde", 0, 1, 9);
3518    test("abcdefghij", 9, 1, "abcde", 0, 2, 9);
3519    test("abcdefghij", 9, 1, "abcde", 0, 4, 9);
3520    test("abcdefghij", 9, 1, "abcde", 0, 5, 9);
3521    test("abcdefghij", 9, 1, "abcde", 0, 6, 9);
3522    test("abcdefghij", 9, 1, "abcde", 1, 0, 1);
3523    test("abcdefghij", 9, 1, "abcde", 1, 1, 8);
3524    test("abcdefghij", 9, 1, "abcde", 1, 2, 8);
3525    test("abcdefghij", 9, 1, "abcde", 1, 3, 8);
3526    test("abcdefghij", 9, 1, "abcde", 1, 4, 8);
3527    test("abcdefghij", 9, 1, "abcde", 1, 5, 8);
3528    test("abcdefghij", 9, 1, "abcde", 2, 0, 1);
3529    test("abcdefghij", 9, 1, "abcde", 2, 1, 7);
3530    test("abcdefghij", 9, 1, "abcde", 2, 2, 7);
3531    test("abcdefghij", 9, 1, "abcde", 2, 3, 7);
3532    test("abcdefghij", 9, 1, "abcde", 2, 4, 7);
3533    test("abcdefghij", 9, 1, "abcde", 4, 0, 1);
3534    test("abcdefghij", 9, 1, "abcde", 4, 1, 5);
3535    test("abcdefghij", 9, 1, "abcde", 4, 2, 5);
3536    test("abcdefghij", 9, 1, "abcde", 5, 0, 1);
3537    test("abcdefghij", 9, 1, "abcde", 5, 1, 1);
3538    test("abcdefghij", 9, 1, "abcde", 6, 0, 0);
3539    test("abcdefghij", 9, 1, "abcdefghij", 0, 0, 1);
3540    test("abcdefghij", 9, 1, "abcdefghij", 0, 1, 9);
3541    test("abcdefghij", 9, 1, "abcdefghij", 0, 5, 9);
3542    test("abcdefghij", 9, 1, "abcdefghij", 0, 9, 9);
3543    test("abcdefghij", 9, 1, "abcdefghij", 0, 10, 9);
3544    test("abcdefghij", 9, 1, "abcdefghij", 0, 11, 9);
3545    test("abcdefghij", 9, 1, "abcdefghij", 1, 0, 1);
3546    test("abcdefghij", 9, 1, "abcdefghij", 1, 1, 8);
3547    test("abcdefghij", 9, 1, "abcdefghij", 1, 4, 8);
3548    test("abcdefghij", 9, 1, "abcdefghij", 1, 8, 8);
3549    test("abcdefghij", 9, 1, "abcdefghij", 1, 9, 8);
3550    test("abcdefghij", 9, 1, "abcdefghij", 1, 10, 8);
3551    test("abcdefghij", 9, 1, "abcdefghij", 5, 0, 1);
3552    test("abcdefghij", 9, 1, "abcdefghij", 5, 1, 4);
3553    test("abcdefghij", 9, 1, "abcdefghij", 5, 2, 4);
3554    test("abcdefghij", 9, 1, "abcdefghij", 5, 4, 4);
3555    test("abcdefghij", 9, 1, "abcdefghij", 5, 5, 4);
3556    test("abcdefghij", 9, 1, "abcdefghij", 5, 6, 4);
3557    test("abcdefghij", 9, 1, "abcdefghij", 9, 0, 1);
3558    test("abcdefghij", 9, 1, "abcdefghij", 9, 1, 0);
3559    test("abcdefghij", 9, 1, "abcdefghij", 9, 2, 0);
3560    test("abcdefghij", 9, 1, "abcdefghij", 10, 0, 1);
3561    test("abcdefghij", 9, 1, "abcdefghij", 10, 1, 1);
3562    test("abcdefghij", 9, 1, "abcdefghij", 11, 0, 0);
3563    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 0, 0, 1);
3564    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 0, 1, 9);
3565    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 0, 10, 9);
3566    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 0, 19, 9);
3567    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 0, 20, 9);
3568    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 0, 21, 9);
3569    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 1, 0, 1);
3570    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 1, 1, 8);
3571    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 1, 9, 8);
3572    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 1, 18, 8);
3573    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 1, 19, 8);
3574    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 1, 20, 8);
3575    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 10, 0, 1);
3576    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 10, 1, -1);
3577    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 10, 5, -1);
3578    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 10, 9, -1);
3579    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 10, 10, -1);
3580    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 10, 11, -1);
3581    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 19, 0, 1);
3582    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 19, 1, -10);
3583}
3584
3585void test34()
3586{
3587    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 19, 2, -10);
3588    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 20, 0, 1);
3589    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 20, 1, 1);
3590    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 21, 0, 0);
3591    test("abcdefghij", 9, 2, "", 0, 0, 1);
3592    test("abcdefghij", 9, 2, "", 0, 1, 1);
3593    test("abcdefghij", 9, 2, "", 1, 0, 0);
3594    test("abcdefghij", 9, 2, "abcde", 0, 0, 1);
3595    test("abcdefghij", 9, 2, "abcde", 0, 1, 9);
3596    test("abcdefghij", 9, 2, "abcde", 0, 2, 9);
3597    test("abcdefghij", 9, 2, "abcde", 0, 4, 9);
3598    test("abcdefghij", 9, 2, "abcde", 0, 5, 9);
3599    test("abcdefghij", 9, 2, "abcde", 0, 6, 9);
3600    test("abcdefghij", 9, 2, "abcde", 1, 0, 1);
3601    test("abcdefghij", 9, 2, "abcde", 1, 1, 8);
3602    test("abcdefghij", 9, 2, "abcde", 1, 2, 8);
3603    test("abcdefghij", 9, 2, "abcde", 1, 3, 8);
3604    test("abcdefghij", 9, 2, "abcde", 1, 4, 8);
3605    test("abcdefghij", 9, 2, "abcde", 1, 5, 8);
3606    test("abcdefghij", 9, 2, "abcde", 2, 0, 1);
3607    test("abcdefghij", 9, 2, "abcde", 2, 1, 7);
3608    test("abcdefghij", 9, 2, "abcde", 2, 2, 7);
3609    test("abcdefghij", 9, 2, "abcde", 2, 3, 7);
3610    test("abcdefghij", 9, 2, "abcde", 2, 4, 7);
3611    test("abcdefghij", 9, 2, "abcde", 4, 0, 1);
3612    test("abcdefghij", 9, 2, "abcde", 4, 1, 5);
3613    test("abcdefghij", 9, 2, "abcde", 4, 2, 5);
3614    test("abcdefghij", 9, 2, "abcde", 5, 0, 1);
3615    test("abcdefghij", 9, 2, "abcde", 5, 1, 1);
3616    test("abcdefghij", 9, 2, "abcde", 6, 0, 0);
3617    test("abcdefghij", 9, 2, "abcdefghij", 0, 0, 1);
3618    test("abcdefghij", 9, 2, "abcdefghij", 0, 1, 9);
3619    test("abcdefghij", 9, 2, "abcdefghij", 0, 5, 9);
3620    test("abcdefghij", 9, 2, "abcdefghij", 0, 9, 9);
3621    test("abcdefghij", 9, 2, "abcdefghij", 0, 10, 9);
3622    test("abcdefghij", 9, 2, "abcdefghij", 0, 11, 9);
3623    test("abcdefghij", 9, 2, "abcdefghij", 1, 0, 1);
3624    test("abcdefghij", 9, 2, "abcdefghij", 1, 1, 8);
3625    test("abcdefghij", 9, 2, "abcdefghij", 1, 4, 8);
3626    test("abcdefghij", 9, 2, "abcdefghij", 1, 8, 8);
3627    test("abcdefghij", 9, 2, "abcdefghij", 1, 9, 8);
3628    test("abcdefghij", 9, 2, "abcdefghij", 1, 10, 8);
3629    test("abcdefghij", 9, 2, "abcdefghij", 5, 0, 1);
3630    test("abcdefghij", 9, 2, "abcdefghij", 5, 1, 4);
3631    test("abcdefghij", 9, 2, "abcdefghij", 5, 2, 4);
3632    test("abcdefghij", 9, 2, "abcdefghij", 5, 4, 4);
3633    test("abcdefghij", 9, 2, "abcdefghij", 5, 5, 4);
3634    test("abcdefghij", 9, 2, "abcdefghij", 5, 6, 4);
3635    test("abcdefghij", 9, 2, "abcdefghij", 9, 0, 1);
3636    test("abcdefghij", 9, 2, "abcdefghij", 9, 1, 0);
3637    test("abcdefghij", 9, 2, "abcdefghij", 9, 2, 0);
3638    test("abcdefghij", 9, 2, "abcdefghij", 10, 0, 1);
3639    test("abcdefghij", 9, 2, "abcdefghij", 10, 1, 1);
3640    test("abcdefghij", 9, 2, "abcdefghij", 11, 0, 0);
3641    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 0, 0, 1);
3642    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 0, 1, 9);
3643    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 0, 10, 9);
3644    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 0, 19, 9);
3645    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 0, 20, 9);
3646    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 0, 21, 9);
3647    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 1, 0, 1);
3648    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 1, 1, 8);
3649    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 1, 9, 8);
3650    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 1, 18, 8);
3651    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 1, 19, 8);
3652    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 1, 20, 8);
3653    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 10, 0, 1);
3654    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 10, 1, -1);
3655    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 10, 5, -1);
3656    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 10, 9, -1);
3657    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 10, 10, -1);
3658    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 10, 11, -1);
3659    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 19, 0, 1);
3660    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 19, 1, -10);
3661    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 19, 2, -10);
3662    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 20, 0, 1);
3663    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 20, 1, 1);
3664    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 21, 0, 0);
3665    test("abcdefghij", 10, 0, "", 0, 0, 0);
3666    test("abcdefghij", 10, 0, "", 0, 1, 0);
3667    test("abcdefghij", 10, 0, "", 1, 0, 0);
3668    test("abcdefghij", 10, 0, "abcde", 0, 0, 0);
3669    test("abcdefghij", 10, 0, "abcde", 0, 1, -1);
3670    test("abcdefghij", 10, 0, "abcde", 0, 2, -2);
3671    test("abcdefghij", 10, 0, "abcde", 0, 4, -4);
3672    test("abcdefghij", 10, 0, "abcde", 0, 5, -5);
3673    test("abcdefghij", 10, 0, "abcde", 0, 6, -5);
3674    test("abcdefghij", 10, 0, "abcde", 1, 0, 0);
3675    test("abcdefghij", 10, 0, "abcde", 1, 1, -1);
3676    test("abcdefghij", 10, 0, "abcde", 1, 2, -2);
3677    test("abcdefghij", 10, 0, "abcde", 1, 3, -3);
3678    test("abcdefghij", 10, 0, "abcde", 1, 4, -4);
3679    test("abcdefghij", 10, 0, "abcde", 1, 5, -4);
3680    test("abcdefghij", 10, 0, "abcde", 2, 0, 0);
3681    test("abcdefghij", 10, 0, "abcde", 2, 1, -1);
3682    test("abcdefghij", 10, 0, "abcde", 2, 2, -2);
3683    test("abcdefghij", 10, 0, "abcde", 2, 3, -3);
3684    test("abcdefghij", 10, 0, "abcde", 2, 4, -3);
3685    test("abcdefghij", 10, 0, "abcde", 4, 0, 0);
3686    test("abcdefghij", 10, 0, "abcde", 4, 1, -1);
3687}
3688
3689void test35()
3690{
3691    test("abcdefghij", 10, 0, "abcde", 4, 2, -1);
3692    test("abcdefghij", 10, 0, "abcde", 5, 0, 0);
3693    test("abcdefghij", 10, 0, "abcde", 5, 1, 0);
3694    test("abcdefghij", 10, 0, "abcde", 6, 0, 0);
3695    test("abcdefghij", 10, 0, "abcdefghij", 0, 0, 0);
3696    test("abcdefghij", 10, 0, "abcdefghij", 0, 1, -1);
3697    test("abcdefghij", 10, 0, "abcdefghij", 0, 5, -5);
3698    test("abcdefghij", 10, 0, "abcdefghij", 0, 9, -9);
3699    test("abcdefghij", 10, 0, "abcdefghij", 0, 10, -10);
3700    test("abcdefghij", 10, 0, "abcdefghij", 0, 11, -10);
3701    test("abcdefghij", 10, 0, "abcdefghij", 1, 0, 0);
3702    test("abcdefghij", 10, 0, "abcdefghij", 1, 1, -1);
3703    test("abcdefghij", 10, 0, "abcdefghij", 1, 4, -4);
3704    test("abcdefghij", 10, 0, "abcdefghij", 1, 8, -8);
3705    test("abcdefghij", 10, 0, "abcdefghij", 1, 9, -9);
3706    test("abcdefghij", 10, 0, "abcdefghij", 1, 10, -9);
3707    test("abcdefghij", 10, 0, "abcdefghij", 5, 0, 0);
3708    test("abcdefghij", 10, 0, "abcdefghij", 5, 1, -1);
3709    test("abcdefghij", 10, 0, "abcdefghij", 5, 2, -2);
3710    test("abcdefghij", 10, 0, "abcdefghij", 5, 4, -4);
3711    test("abcdefghij", 10, 0, "abcdefghij", 5, 5, -5);
3712    test("abcdefghij", 10, 0, "abcdefghij", 5, 6, -5);
3713    test("abcdefghij", 10, 0, "abcdefghij", 9, 0, 0);
3714    test("abcdefghij", 10, 0, "abcdefghij", 9, 1, -1);
3715    test("abcdefghij", 10, 0, "abcdefghij", 9, 2, -1);
3716    test("abcdefghij", 10, 0, "abcdefghij", 10, 0, 0);
3717    test("abcdefghij", 10, 0, "abcdefghij", 10, 1, 0);
3718    test("abcdefghij", 10, 0, "abcdefghij", 11, 0, 0);
3719    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 0, 0, 0);
3720    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 0, 1, -1);
3721    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 0, 10, -10);
3722    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 0, 19, -19);
3723    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 0, 20, -20);
3724    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 0, 21, -20);
3725    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 1, 0, 0);
3726    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 1, 1, -1);
3727    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 1, 9, -9);
3728    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 1, 18, -18);
3729    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 1, 19, -19);
3730    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 1, 20, -19);
3731    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 10, 0, 0);
3732    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 10, 1, -1);
3733    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 10, 5, -5);
3734    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 10, 9, -9);
3735    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 10, 10, -10);
3736    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 10, 11, -10);
3737    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 19, 0, 0);
3738    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 19, 1, -1);
3739    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 19, 2, -1);
3740    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 20, 0, 0);
3741    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 20, 1, 0);
3742    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 21, 0, 0);
3743    test("abcdefghij", 10, 1, "", 0, 0, 0);
3744    test("abcdefghij", 10, 1, "", 0, 1, 0);
3745    test("abcdefghij", 10, 1, "", 1, 0, 0);
3746    test("abcdefghij", 10, 1, "abcde", 0, 0, 0);
3747    test("abcdefghij", 10, 1, "abcde", 0, 1, -1);
3748    test("abcdefghij", 10, 1, "abcde", 0, 2, -2);
3749    test("abcdefghij", 10, 1, "abcde", 0, 4, -4);
3750    test("abcdefghij", 10, 1, "abcde", 0, 5, -5);
3751    test("abcdefghij", 10, 1, "abcde", 0, 6, -5);
3752    test("abcdefghij", 10, 1, "abcde", 1, 0, 0);
3753    test("abcdefghij", 10, 1, "abcde", 1, 1, -1);
3754    test("abcdefghij", 10, 1, "abcde", 1, 2, -2);
3755    test("abcdefghij", 10, 1, "abcde", 1, 3, -3);
3756    test("abcdefghij", 10, 1, "abcde", 1, 4, -4);
3757    test("abcdefghij", 10, 1, "abcde", 1, 5, -4);
3758    test("abcdefghij", 10, 1, "abcde", 2, 0, 0);
3759    test("abcdefghij", 10, 1, "abcde", 2, 1, -1);
3760    test("abcdefghij", 10, 1, "abcde", 2, 2, -2);
3761    test("abcdefghij", 10, 1, "abcde", 2, 3, -3);
3762    test("abcdefghij", 10, 1, "abcde", 2, 4, -3);
3763    test("abcdefghij", 10, 1, "abcde", 4, 0, 0);
3764    test("abcdefghij", 10, 1, "abcde", 4, 1, -1);
3765    test("abcdefghij", 10, 1, "abcde", 4, 2, -1);
3766    test("abcdefghij", 10, 1, "abcde", 5, 0, 0);
3767    test("abcdefghij", 10, 1, "abcde", 5, 1, 0);
3768    test("abcdefghij", 10, 1, "abcde", 6, 0, 0);
3769    test("abcdefghij", 10, 1, "abcdefghij", 0, 0, 0);
3770    test("abcdefghij", 10, 1, "abcdefghij", 0, 1, -1);
3771    test("abcdefghij", 10, 1, "abcdefghij", 0, 5, -5);
3772    test("abcdefghij", 10, 1, "abcdefghij", 0, 9, -9);
3773    test("abcdefghij", 10, 1, "abcdefghij", 0, 10, -10);
3774    test("abcdefghij", 10, 1, "abcdefghij", 0, 11, -10);
3775    test("abcdefghij", 10, 1, "abcdefghij", 1, 0, 0);
3776    test("abcdefghij", 10, 1, "abcdefghij", 1, 1, -1);
3777    test("abcdefghij", 10, 1, "abcdefghij", 1, 4, -4);
3778    test("abcdefghij", 10, 1, "abcdefghij", 1, 8, -8);
3779    test("abcdefghij", 10, 1, "abcdefghij", 1, 9, -9);
3780    test("abcdefghij", 10, 1, "abcdefghij", 1, 10, -9);
3781    test("abcdefghij", 10, 1, "abcdefghij", 5, 0, 0);
3782    test("abcdefghij", 10, 1, "abcdefghij", 5, 1, -1);
3783    test("abcdefghij", 10, 1, "abcdefghij", 5, 2, -2);
3784    test("abcdefghij", 10, 1, "abcdefghij", 5, 4, -4);
3785    test("abcdefghij", 10, 1, "abcdefghij", 5, 5, -5);
3786    test("abcdefghij", 10, 1, "abcdefghij", 5, 6, -5);
3787    test("abcdefghij", 10, 1, "abcdefghij", 9, 0, 0);
3788    test("abcdefghij", 10, 1, "abcdefghij", 9, 1, -1);
3789    test("abcdefghij", 10, 1, "abcdefghij", 9, 2, -1);
3790    test("abcdefghij", 10, 1, "abcdefghij", 10, 0, 0);
3791}
3792
3793void test36()
3794{
3795    test("abcdefghij", 10, 1, "abcdefghij", 10, 1, 0);
3796    test("abcdefghij", 10, 1, "abcdefghij", 11, 0, 0);
3797    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 0, 0, 0);
3798    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 0, 1, -1);
3799    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 0, 10, -10);
3800    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 0, 19, -19);
3801    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 0, 20, -20);
3802    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 0, 21, -20);
3803    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 1, 0, 0);
3804    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 1, 1, -1);
3805    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 1, 9, -9);
3806    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 1, 18, -18);
3807    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 1, 19, -19);
3808    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 1, 20, -19);
3809    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 10, 0, 0);
3810    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 10, 1, -1);
3811    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 10, 5, -5);
3812    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 10, 9, -9);
3813    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 10, 10, -10);
3814    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 10, 11, -10);
3815    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 19, 0, 0);
3816    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 19, 1, -1);
3817    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 19, 2, -1);
3818    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 20, 0, 0);
3819    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 20, 1, 0);
3820    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 21, 0, 0);
3821    test("abcdefghij", 11, 0, "", 0, 0, 0);
3822    test("abcdefghij", 11, 0, "", 0, 1, 0);
3823    test("abcdefghij", 11, 0, "", 1, 0, 0);
3824    test("abcdefghij", 11, 0, "abcde", 0, 0, 0);
3825    test("abcdefghij", 11, 0, "abcde", 0, 1, 0);
3826    test("abcdefghij", 11, 0, "abcde", 0, 2, 0);
3827    test("abcdefghij", 11, 0, "abcde", 0, 4, 0);
3828    test("abcdefghij", 11, 0, "abcde", 0, 5, 0);
3829    test("abcdefghij", 11, 0, "abcde", 0, 6, 0);
3830    test("abcdefghij", 11, 0, "abcde", 1, 0, 0);
3831    test("abcdefghij", 11, 0, "abcde", 1, 1, 0);
3832    test("abcdefghij", 11, 0, "abcde", 1, 2, 0);
3833    test("abcdefghij", 11, 0, "abcde", 1, 3, 0);
3834    test("abcdefghij", 11, 0, "abcde", 1, 4, 0);
3835    test("abcdefghij", 11, 0, "abcde", 1, 5, 0);
3836    test("abcdefghij", 11, 0, "abcde", 2, 0, 0);
3837    test("abcdefghij", 11, 0, "abcde", 2, 1, 0);
3838    test("abcdefghij", 11, 0, "abcde", 2, 2, 0);
3839    test("abcdefghij", 11, 0, "abcde", 2, 3, 0);
3840    test("abcdefghij", 11, 0, "abcde", 2, 4, 0);
3841    test("abcdefghij", 11, 0, "abcde", 4, 0, 0);
3842    test("abcdefghij", 11, 0, "abcde", 4, 1, 0);
3843    test("abcdefghij", 11, 0, "abcde", 4, 2, 0);
3844    test("abcdefghij", 11, 0, "abcde", 5, 0, 0);
3845    test("abcdefghij", 11, 0, "abcde", 5, 1, 0);
3846    test("abcdefghij", 11, 0, "abcde", 6, 0, 0);
3847    test("abcdefghij", 11, 0, "abcdefghij", 0, 0, 0);
3848    test("abcdefghij", 11, 0, "abcdefghij", 0, 1, 0);
3849    test("abcdefghij", 11, 0, "abcdefghij", 0, 5, 0);
3850    test("abcdefghij", 11, 0, "abcdefghij", 0, 9, 0);
3851    test("abcdefghij", 11, 0, "abcdefghij", 0, 10, 0);
3852    test("abcdefghij", 11, 0, "abcdefghij", 0, 11, 0);
3853    test("abcdefghij", 11, 0, "abcdefghij", 1, 0, 0);
3854    test("abcdefghij", 11, 0, "abcdefghij", 1, 1, 0);
3855    test("abcdefghij", 11, 0, "abcdefghij", 1, 4, 0);
3856    test("abcdefghij", 11, 0, "abcdefghij", 1, 8, 0);
3857    test("abcdefghij", 11, 0, "abcdefghij", 1, 9, 0);
3858    test("abcdefghij", 11, 0, "abcdefghij", 1, 10, 0);
3859    test("abcdefghij", 11, 0, "abcdefghij", 5, 0, 0);
3860    test("abcdefghij", 11, 0, "abcdefghij", 5, 1, 0);
3861    test("abcdefghij", 11, 0, "abcdefghij", 5, 2, 0);
3862    test("abcdefghij", 11, 0, "abcdefghij", 5, 4, 0);
3863    test("abcdefghij", 11, 0, "abcdefghij", 5, 5, 0);
3864    test("abcdefghij", 11, 0, "abcdefghij", 5, 6, 0);
3865    test("abcdefghij", 11, 0, "abcdefghij", 9, 0, 0);
3866    test("abcdefghij", 11, 0, "abcdefghij", 9, 1, 0);
3867    test("abcdefghij", 11, 0, "abcdefghij", 9, 2, 0);
3868    test("abcdefghij", 11, 0, "abcdefghij", 10, 0, 0);
3869    test("abcdefghij", 11, 0, "abcdefghij", 10, 1, 0);
3870    test("abcdefghij", 11, 0, "abcdefghij", 11, 0, 0);
3871    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0, 0, 0);
3872    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0, 1, 0);
3873    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0, 10, 0);
3874    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0, 19, 0);
3875    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0, 20, 0);
3876    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0, 21, 0);
3877    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 1, 0, 0);
3878    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 1, 1, 0);
3879    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 1, 9, 0);
3880    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 1, 18, 0);
3881    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 1, 19, 0);
3882    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 1, 20, 0);
3883    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 10, 0, 0);
3884    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 10, 1, 0);
3885    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 10, 5, 0);
3886    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 10, 9, 0);
3887    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 10, 10, 0);
3888    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 10, 11, 0);
3889    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 19, 0, 0);
3890    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 19, 1, 0);
3891    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 19, 2, 0);
3892    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 20, 0, 0);
3893    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 20, 1, 0);
3894    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 21, 0, 0);
3895}
3896
3897void test37()
3898{
3899    test("abcdefghijklmnopqrst", 0, 0, "", 0, 0, 0);
3900    test("abcdefghijklmnopqrst", 0, 0, "", 0, 1, 0);
3901    test("abcdefghijklmnopqrst", 0, 0, "", 1, 0, 0);
3902    test("abcdefghijklmnopqrst", 0, 0, "abcde", 0, 0, 0);
3903    test("abcdefghijklmnopqrst", 0, 0, "abcde", 0, 1, -1);
3904    test("abcdefghijklmnopqrst", 0, 0, "abcde", 0, 2, -2);
3905    test("abcdefghijklmnopqrst", 0, 0, "abcde", 0, 4, -4);
3906    test("abcdefghijklmnopqrst", 0, 0, "abcde", 0, 5, -5);
3907    test("abcdefghijklmnopqrst", 0, 0, "abcde", 0, 6, -5);
3908    test("abcdefghijklmnopqrst", 0, 0, "abcde", 1, 0, 0);
3909    test("abcdefghijklmnopqrst", 0, 0, "abcde", 1, 1, -1);
3910    test("abcdefghijklmnopqrst", 0, 0, "abcde", 1, 2, -2);
3911    test("abcdefghijklmnopqrst", 0, 0, "abcde", 1, 3, -3);
3912    test("abcdefghijklmnopqrst", 0, 0, "abcde", 1, 4, -4);
3913    test("abcdefghijklmnopqrst", 0, 0, "abcde", 1, 5, -4);
3914    test("abcdefghijklmnopqrst", 0, 0, "abcde", 2, 0, 0);
3915    test("abcdefghijklmnopqrst", 0, 0, "abcde", 2, 1, -1);
3916    test("abcdefghijklmnopqrst", 0, 0, "abcde", 2, 2, -2);
3917    test("abcdefghijklmnopqrst", 0, 0, "abcde", 2, 3, -3);
3918    test("abcdefghijklmnopqrst", 0, 0, "abcde", 2, 4, -3);
3919    test("abcdefghijklmnopqrst", 0, 0, "abcde", 4, 0, 0);
3920    test("abcdefghijklmnopqrst", 0, 0, "abcde", 4, 1, -1);
3921    test("abcdefghijklmnopqrst", 0, 0, "abcde", 4, 2, -1);
3922    test("abcdefghijklmnopqrst", 0, 0, "abcde", 5, 0, 0);
3923    test("abcdefghijklmnopqrst", 0, 0, "abcde", 5, 1, 0);
3924    test("abcdefghijklmnopqrst", 0, 0, "abcde", 6, 0, 0);
3925    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 0, 0, 0);
3926    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 0, 1, -1);
3927    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 0, 5, -5);
3928    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 0, 9, -9);
3929    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 0, 10, -10);
3930    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 0, 11, -10);
3931    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 1, 0, 0);
3932    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 1, 1, -1);
3933    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 1, 4, -4);
3934    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 1, 8, -8);
3935    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 1, 9, -9);
3936    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 1, 10, -9);
3937    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 5, 0, 0);
3938    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 5, 1, -1);
3939    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 5, 2, -2);
3940    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 5, 4, -4);
3941    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 5, 5, -5);
3942    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 5, 6, -5);
3943    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 9, 0, 0);
3944    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 9, 1, -1);
3945    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 9, 2, -1);
3946    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 10, 0, 0);
3947    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 10, 1, 0);
3948    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 11, 0, 0);
3949    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 0, 0, 0);
3950    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 0, 1, -1);
3951    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 0, 10, -10);
3952    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 0, 19, -19);
3953    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 0, 20, -20);
3954    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 0, 21, -20);
3955    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 1, 0, 0);
3956    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 1, 1, -1);
3957    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 1, 9, -9);
3958    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 1, 18, -18);
3959    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 1, 19, -19);
3960    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 1, 20, -19);
3961    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 10, 0, 0);
3962    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 10, 1, -1);
3963    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 10, 5, -5);
3964    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 10, 9, -9);
3965    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 10, 10, -10);
3966    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 10, 11, -10);
3967    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 19, 0, 0);
3968    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 19, 1, -1);
3969    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 19, 2, -1);
3970    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 20, 0, 0);
3971    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 20, 1, 0);
3972    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 21, 0, 0);
3973    test("abcdefghijklmnopqrst", 0, 1, "", 0, 0, 1);
3974    test("abcdefghijklmnopqrst", 0, 1, "", 0, 1, 1);
3975    test("abcdefghijklmnopqrst", 0, 1, "", 1, 0, 0);
3976    test("abcdefghijklmnopqrst", 0, 1, "abcde", 0, 0, 1);
3977    test("abcdefghijklmnopqrst", 0, 1, "abcde", 0, 1, 0);
3978    test("abcdefghijklmnopqrst", 0, 1, "abcde", 0, 2, -1);
3979    test("abcdefghijklmnopqrst", 0, 1, "abcde", 0, 4, -3);
3980    test("abcdefghijklmnopqrst", 0, 1, "abcde", 0, 5, -4);
3981    test("abcdefghijklmnopqrst", 0, 1, "abcde", 0, 6, -4);
3982    test("abcdefghijklmnopqrst", 0, 1, "abcde", 1, 0, 1);
3983    test("abcdefghijklmnopqrst", 0, 1, "abcde", 1, 1, -1);
3984    test("abcdefghijklmnopqrst", 0, 1, "abcde", 1, 2, -1);
3985    test("abcdefghijklmnopqrst", 0, 1, "abcde", 1, 3, -1);
3986    test("abcdefghijklmnopqrst", 0, 1, "abcde", 1, 4, -1);
3987    test("abcdefghijklmnopqrst", 0, 1, "abcde", 1, 5, -1);
3988    test("abcdefghijklmnopqrst", 0, 1, "abcde", 2, 0, 1);
3989    test("abcdefghijklmnopqrst", 0, 1, "abcde", 2, 1, -2);
3990    test("abcdefghijklmnopqrst", 0, 1, "abcde", 2, 2, -2);
3991    test("abcdefghijklmnopqrst", 0, 1, "abcde", 2, 3, -2);
3992    test("abcdefghijklmnopqrst", 0, 1, "abcde", 2, 4, -2);
3993    test("abcdefghijklmnopqrst", 0, 1, "abcde", 4, 0, 1);
3994    test("abcdefghijklmnopqrst", 0, 1, "abcde", 4, 1, -4);
3995    test("abcdefghijklmnopqrst", 0, 1, "abcde", 4, 2, -4);
3996    test("abcdefghijklmnopqrst", 0, 1, "abcde", 5, 0, 1);
3997    test("abcdefghijklmnopqrst", 0, 1, "abcde", 5, 1, 1);
3998    test("abcdefghijklmnopqrst", 0, 1, "abcde", 6, 0, 0);
3999}
4000
4001void test38()
4002{
4003    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 0, 0, 1);
4004    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 0, 1, 0);
4005    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 0, 5, -4);
4006    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 0, 9, -8);
4007    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 0, 10, -9);
4008    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 0, 11, -9);
4009    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 1, 0, 1);
4010    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 1, 1, -1);
4011    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 1, 4, -1);
4012    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 1, 8, -1);
4013    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 1, 9, -1);
4014    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 1, 10, -1);
4015    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 5, 0, 1);
4016    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 5, 1, -5);
4017    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 5, 2, -5);
4018    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 5, 4, -5);
4019    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 5, 5, -5);
4020    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 5, 6, -5);
4021    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 9, 0, 1);
4022    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 9, 1, -9);
4023    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 9, 2, -9);
4024    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 10, 0, 1);
4025    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 10, 1, 1);
4026    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 11, 0, 0);
4027    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 0, 0, 1);
4028    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 0, 1, 0);
4029    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 0, 10, -9);
4030    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 0, 19, -18);
4031    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 0, 20, -19);
4032    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 0, 21, -19);
4033    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 1, 0, 1);
4034    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 1, 1, -1);
4035    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 1, 9, -1);
4036    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 1, 18, -1);
4037    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 1, 19, -1);
4038    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 1, 20, -1);
4039    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 10, 0, 1);
4040    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 10, 1, -10);
4041    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 10, 5, -10);
4042    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 10, 9, -10);
4043    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 10, 10, -10);
4044    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 10, 11, -10);
4045    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 19, 0, 1);
4046    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 19, 1, -19);
4047    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 19, 2, -19);
4048    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 20, 0, 1);
4049    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 20, 1, 1);
4050    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 21, 0, 0);
4051    test("abcdefghijklmnopqrst", 0, 10, "", 0, 0, 10);
4052    test("abcdefghijklmnopqrst", 0, 10, "", 0, 1, 10);
4053    test("abcdefghijklmnopqrst", 0, 10, "", 1, 0, 0);
4054    test("abcdefghijklmnopqrst", 0, 10, "abcde", 0, 0, 10);
4055    test("abcdefghijklmnopqrst", 0, 10, "abcde", 0, 1, 9);
4056    test("abcdefghijklmnopqrst", 0, 10, "abcde", 0, 2, 8);
4057    test("abcdefghijklmnopqrst", 0, 10, "abcde", 0, 4, 6);
4058    test("abcdefghijklmnopqrst", 0, 10, "abcde", 0, 5, 5);
4059    test("abcdefghijklmnopqrst", 0, 10, "abcde", 0, 6, 5);
4060    test("abcdefghijklmnopqrst", 0, 10, "abcde", 1, 0, 10);
4061    test("abcdefghijklmnopqrst", 0, 10, "abcde", 1, 1, -1);
4062    test("abcdefghijklmnopqrst", 0, 10, "abcde", 1, 2, -1);
4063    test("abcdefghijklmnopqrst", 0, 10, "abcde", 1, 3, -1);
4064    test("abcdefghijklmnopqrst", 0, 10, "abcde", 1, 4, -1);
4065    test("abcdefghijklmnopqrst", 0, 10, "abcde", 1, 5, -1);
4066    test("abcdefghijklmnopqrst", 0, 10, "abcde", 2, 0, 10);
4067    test("abcdefghijklmnopqrst", 0, 10, "abcde", 2, 1, -2);
4068    test("abcdefghijklmnopqrst", 0, 10, "abcde", 2, 2, -2);
4069    test("abcdefghijklmnopqrst", 0, 10, "abcde", 2, 3, -2);
4070    test("abcdefghijklmnopqrst", 0, 10, "abcde", 2, 4, -2);
4071    test("abcdefghijklmnopqrst", 0, 10, "abcde", 4, 0, 10);
4072    test("abcdefghijklmnopqrst", 0, 10, "abcde", 4, 1, -4);
4073    test("abcdefghijklmnopqrst", 0, 10, "abcde", 4, 2, -4);
4074    test("abcdefghijklmnopqrst", 0, 10, "abcde", 5, 0, 10);
4075    test("abcdefghijklmnopqrst", 0, 10, "abcde", 5, 1, 10);
4076    test("abcdefghijklmnopqrst", 0, 10, "abcde", 6, 0, 0);
4077    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 0, 0, 10);
4078    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 0, 1, 9);
4079    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 0, 5, 5);
4080    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 0, 9, 1);
4081    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 0, 10, 0);
4082    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 0, 11, 0);
4083    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 1, 0, 10);
4084    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 1, 1, -1);
4085    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 1, 4, -1);
4086    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 1, 8, -1);
4087    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 1, 9, -1);
4088    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 1, 10, -1);
4089    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 5, 0, 10);
4090    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 5, 1, -5);
4091    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 5, 2, -5);
4092    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 5, 4, -5);
4093    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 5, 5, -5);
4094    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 5, 6, -5);
4095    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 9, 0, 10);
4096    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 9, 1, -9);
4097    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 9, 2, -9);
4098    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 10, 0, 10);
4099    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 10, 1, 10);
4100    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 11, 0, 0);
4101    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 0, 0, 10);
4102    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 0, 1, 9);
4103}
4104
4105void test39()
4106{
4107    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 0, 10, 0);
4108    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 0, 19, -9);
4109    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 0, 20, -10);
4110    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 0, 21, -10);
4111    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 1, 0, 10);
4112    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 1, 1, -1);
4113    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 1, 9, -1);
4114    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 1, 18, -1);
4115    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 1, 19, -1);
4116    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 1, 20, -1);
4117    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 10, 0, 10);
4118    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 10, 1, -10);
4119    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 10, 5, -10);
4120    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 10, 9, -10);
4121    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 10, 10, -10);
4122    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 10, 11, -10);
4123    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 19, 0, 10);
4124    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 19, 1, -19);
4125    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 19, 2, -19);
4126    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 20, 0, 10);
4127    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 20, 1, 10);
4128    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 21, 0, 0);
4129    test("abcdefghijklmnopqrst", 0, 19, "", 0, 0, 19);
4130    test("abcdefghijklmnopqrst", 0, 19, "", 0, 1, 19);
4131    test("abcdefghijklmnopqrst", 0, 19, "", 1, 0, 0);
4132    test("abcdefghijklmnopqrst", 0, 19, "abcde", 0, 0, 19);
4133    test("abcdefghijklmnopqrst", 0, 19, "abcde", 0, 1, 18);
4134    test("abcdefghijklmnopqrst", 0, 19, "abcde", 0, 2, 17);
4135    test("abcdefghijklmnopqrst", 0, 19, "abcde", 0, 4, 15);
4136    test("abcdefghijklmnopqrst", 0, 19, "abcde", 0, 5, 14);
4137    test("abcdefghijklmnopqrst", 0, 19, "abcde", 0, 6, 14);
4138    test("abcdefghijklmnopqrst", 0, 19, "abcde", 1, 0, 19);
4139    test("abcdefghijklmnopqrst", 0, 19, "abcde", 1, 1, -1);
4140    test("abcdefghijklmnopqrst", 0, 19, "abcde", 1, 2, -1);
4141    test("abcdefghijklmnopqrst", 0, 19, "abcde", 1, 3, -1);
4142    test("abcdefghijklmnopqrst", 0, 19, "abcde", 1, 4, -1);
4143    test("abcdefghijklmnopqrst", 0, 19, "abcde", 1, 5, -1);
4144    test("abcdefghijklmnopqrst", 0, 19, "abcde", 2, 0, 19);
4145    test("abcdefghijklmnopqrst", 0, 19, "abcde", 2, 1, -2);
4146    test("abcdefghijklmnopqrst", 0, 19, "abcde", 2, 2, -2);
4147    test("abcdefghijklmnopqrst", 0, 19, "abcde", 2, 3, -2);
4148    test("abcdefghijklmnopqrst", 0, 19, "abcde", 2, 4, -2);
4149    test("abcdefghijklmnopqrst", 0, 19, "abcde", 4, 0, 19);
4150    test("abcdefghijklmnopqrst", 0, 19, "abcde", 4, 1, -4);
4151    test("abcdefghijklmnopqrst", 0, 19, "abcde", 4, 2, -4);
4152    test("abcdefghijklmnopqrst", 0, 19, "abcde", 5, 0, 19);
4153    test("abcdefghijklmnopqrst", 0, 19, "abcde", 5, 1, 19);
4154    test("abcdefghijklmnopqrst", 0, 19, "abcde", 6, 0, 0);
4155    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 0, 0, 19);
4156    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 0, 1, 18);
4157    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 0, 5, 14);
4158    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 0, 9, 10);
4159    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 0, 10, 9);
4160    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 0, 11, 9);
4161    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 1, 0, 19);
4162    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 1, 1, -1);
4163    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 1, 4, -1);
4164    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 1, 8, -1);
4165    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 1, 9, -1);
4166    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 1, 10, -1);
4167    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 5, 0, 19);
4168    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 5, 1, -5);
4169    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 5, 2, -5);
4170    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 5, 4, -5);
4171    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 5, 5, -5);
4172    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 5, 6, -5);
4173    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 9, 0, 19);
4174    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 9, 1, -9);
4175    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 9, 2, -9);
4176    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 10, 0, 19);
4177    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 10, 1, 19);
4178    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 11, 0, 0);
4179    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 0, 0, 19);
4180    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 0, 1, 18);
4181    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 0, 10, 9);
4182    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 0, 19, 0);
4183    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 0, 20, -1);
4184    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 0, 21, -1);
4185    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 1, 0, 19);
4186    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 1, 1, -1);
4187    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 1, 9, -1);
4188    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 1, 18, -1);
4189    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 1, 19, -1);
4190    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 1, 20, -1);
4191    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 10, 0, 19);
4192    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 10, 1, -10);
4193    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 10, 5, -10);
4194    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 10, 9, -10);
4195    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 10, 10, -10);
4196    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 10, 11, -10);
4197    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 19, 0, 19);
4198    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 19, 1, -19);
4199    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 19, 2, -19);
4200    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 20, 0, 19);
4201    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 20, 1, 19);
4202    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 21, 0, 0);
4203    test("abcdefghijklmnopqrst", 0, 20, "", 0, 0, 20);
4204    test("abcdefghijklmnopqrst", 0, 20, "", 0, 1, 20);
4205    test("abcdefghijklmnopqrst", 0, 20, "", 1, 0, 0);
4206    test("abcdefghijklmnopqrst", 0, 20, "abcde", 0, 0, 20);
4207}
4208
4209void test40()
4210{
4211    test("abcdefghijklmnopqrst", 0, 20, "abcde", 0, 1, 19);
4212    test("abcdefghijklmnopqrst", 0, 20, "abcde", 0, 2, 18);
4213    test("abcdefghijklmnopqrst", 0, 20, "abcde", 0, 4, 16);
4214    test("abcdefghijklmnopqrst", 0, 20, "abcde", 0, 5, 15);
4215    test("abcdefghijklmnopqrst", 0, 20, "abcde", 0, 6, 15);
4216    test("abcdefghijklmnopqrst", 0, 20, "abcde", 1, 0, 20);
4217    test("abcdefghijklmnopqrst", 0, 20, "abcde", 1, 1, -1);
4218    test("abcdefghijklmnopqrst", 0, 20, "abcde", 1, 2, -1);
4219    test("abcdefghijklmnopqrst", 0, 20, "abcde", 1, 3, -1);
4220    test("abcdefghijklmnopqrst", 0, 20, "abcde", 1, 4, -1);
4221    test("abcdefghijklmnopqrst", 0, 20, "abcde", 1, 5, -1);
4222    test("abcdefghijklmnopqrst", 0, 20, "abcde", 2, 0, 20);
4223    test("abcdefghijklmnopqrst", 0, 20, "abcde", 2, 1, -2);
4224    test("abcdefghijklmnopqrst", 0, 20, "abcde", 2, 2, -2);
4225    test("abcdefghijklmnopqrst", 0, 20, "abcde", 2, 3, -2);
4226    test("abcdefghijklmnopqrst", 0, 20, "abcde", 2, 4, -2);
4227    test("abcdefghijklmnopqrst", 0, 20, "abcde", 4, 0, 20);
4228    test("abcdefghijklmnopqrst", 0, 20, "abcde", 4, 1, -4);
4229    test("abcdefghijklmnopqrst", 0, 20, "abcde", 4, 2, -4);
4230    test("abcdefghijklmnopqrst", 0, 20, "abcde", 5, 0, 20);
4231    test("abcdefghijklmnopqrst", 0, 20, "abcde", 5, 1, 20);
4232    test("abcdefghijklmnopqrst", 0, 20, "abcde", 6, 0, 0);
4233    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 0, 0, 20);
4234    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 0, 1, 19);
4235    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 0, 5, 15);
4236    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 0, 9, 11);
4237    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 0, 10, 10);
4238    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 0, 11, 10);
4239    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 1, 0, 20);
4240    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 1, 1, -1);
4241    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 1, 4, -1);
4242    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 1, 8, -1);
4243    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 1, 9, -1);
4244    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 1, 10, -1);
4245    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 5, 0, 20);
4246    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 5, 1, -5);
4247    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 5, 2, -5);
4248    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 5, 4, -5);
4249    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 5, 5, -5);
4250    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 5, 6, -5);
4251    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 9, 0, 20);
4252    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 9, 1, -9);
4253    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 9, 2, -9);
4254    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 10, 0, 20);
4255    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 10, 1, 20);
4256    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 11, 0, 0);
4257    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 0, 0, 20);
4258    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 0, 1, 19);
4259    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 0, 10, 10);
4260    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 0, 19, 1);
4261    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 0, 20, 0);
4262    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 0, 21, 0);
4263    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 1, 0, 20);
4264    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 1, 1, -1);
4265    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 1, 9, -1);
4266    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 1, 18, -1);
4267    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 1, 19, -1);
4268    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 1, 20, -1);
4269    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 10, 0, 20);
4270    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 10, 1, -10);
4271    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 10, 5, -10);
4272    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 10, 9, -10);
4273    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 10, 10, -10);
4274    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 10, 11, -10);
4275    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 19, 0, 20);
4276    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 19, 1, -19);
4277    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 19, 2, -19);
4278    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 20, 0, 20);
4279    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 20, 1, 20);
4280    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 21, 0, 0);
4281    test("abcdefghijklmnopqrst", 0, 21, "", 0, 0, 20);
4282    test("abcdefghijklmnopqrst", 0, 21, "", 0, 1, 20);
4283    test("abcdefghijklmnopqrst", 0, 21, "", 1, 0, 0);
4284    test("abcdefghijklmnopqrst", 0, 21, "abcde", 0, 0, 20);
4285    test("abcdefghijklmnopqrst", 0, 21, "abcde", 0, 1, 19);
4286    test("abcdefghijklmnopqrst", 0, 21, "abcde", 0, 2, 18);
4287    test("abcdefghijklmnopqrst", 0, 21, "abcde", 0, 4, 16);
4288    test("abcdefghijklmnopqrst", 0, 21, "abcde", 0, 5, 15);
4289    test("abcdefghijklmnopqrst", 0, 21, "abcde", 0, 6, 15);
4290    test("abcdefghijklmnopqrst", 0, 21, "abcde", 1, 0, 20);
4291    test("abcdefghijklmnopqrst", 0, 21, "abcde", 1, 1, -1);
4292    test("abcdefghijklmnopqrst", 0, 21, "abcde", 1, 2, -1);
4293    test("abcdefghijklmnopqrst", 0, 21, "abcde", 1, 3, -1);
4294    test("abcdefghijklmnopqrst", 0, 21, "abcde", 1, 4, -1);
4295    test("abcdefghijklmnopqrst", 0, 21, "abcde", 1, 5, -1);
4296    test("abcdefghijklmnopqrst", 0, 21, "abcde", 2, 0, 20);
4297    test("abcdefghijklmnopqrst", 0, 21, "abcde", 2, 1, -2);
4298    test("abcdefghijklmnopqrst", 0, 21, "abcde", 2, 2, -2);
4299    test("abcdefghijklmnopqrst", 0, 21, "abcde", 2, 3, -2);
4300    test("abcdefghijklmnopqrst", 0, 21, "abcde", 2, 4, -2);
4301    test("abcdefghijklmnopqrst", 0, 21, "abcde", 4, 0, 20);
4302    test("abcdefghijklmnopqrst", 0, 21, "abcde", 4, 1, -4);
4303    test("abcdefghijklmnopqrst", 0, 21, "abcde", 4, 2, -4);
4304    test("abcdefghijklmnopqrst", 0, 21, "abcde", 5, 0, 20);
4305    test("abcdefghijklmnopqrst", 0, 21, "abcde", 5, 1, 20);
4306    test("abcdefghijklmnopqrst", 0, 21, "abcde", 6, 0, 0);
4307    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 0, 0, 20);
4308    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 0, 1, 19);
4309    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 0, 5, 15);
4310    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 0, 9, 11);
4311}
4312
4313void test41()
4314{
4315    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 0, 10, 10);
4316    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 0, 11, 10);
4317    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 1, 0, 20);
4318    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 1, 1, -1);
4319    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 1, 4, -1);
4320    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 1, 8, -1);
4321    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 1, 9, -1);
4322    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 1, 10, -1);
4323    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 5, 0, 20);
4324    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 5, 1, -5);
4325    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 5, 2, -5);
4326    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 5, 4, -5);
4327    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 5, 5, -5);
4328    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 5, 6, -5);
4329    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 9, 0, 20);
4330    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 9, 1, -9);
4331    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 9, 2, -9);
4332    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 10, 0, 20);
4333    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 10, 1, 20);
4334    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 11, 0, 0);
4335    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 0, 0, 20);
4336    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 0, 1, 19);
4337    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 0, 10, 10);
4338    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 0, 19, 1);
4339    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 0, 20, 0);
4340    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 0, 21, 0);
4341    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 1, 0, 20);
4342    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 1, 1, -1);
4343    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 1, 9, -1);
4344    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 1, 18, -1);
4345    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 1, 19, -1);
4346    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 1, 20, -1);
4347    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 10, 0, 20);
4348    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 10, 1, -10);
4349    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 10, 5, -10);
4350    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 10, 9, -10);
4351    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 10, 10, -10);
4352    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 10, 11, -10);
4353    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 19, 0, 20);
4354    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 19, 1, -19);
4355    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 19, 2, -19);
4356    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 20, 0, 20);
4357    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 20, 1, 20);
4358    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 21, 0, 0);
4359    test("abcdefghijklmnopqrst", 1, 0, "", 0, 0, 0);
4360    test("abcdefghijklmnopqrst", 1, 0, "", 0, 1, 0);
4361    test("abcdefghijklmnopqrst", 1, 0, "", 1, 0, 0);
4362    test("abcdefghijklmnopqrst", 1, 0, "abcde", 0, 0, 0);
4363    test("abcdefghijklmnopqrst", 1, 0, "abcde", 0, 1, -1);
4364    test("abcdefghijklmnopqrst", 1, 0, "abcde", 0, 2, -2);
4365    test("abcdefghijklmnopqrst", 1, 0, "abcde", 0, 4, -4);
4366    test("abcdefghijklmnopqrst", 1, 0, "abcde", 0, 5, -5);
4367    test("abcdefghijklmnopqrst", 1, 0, "abcde", 0, 6, -5);
4368    test("abcdefghijklmnopqrst", 1, 0, "abcde", 1, 0, 0);
4369    test("abcdefghijklmnopqrst", 1, 0, "abcde", 1, 1, -1);
4370    test("abcdefghijklmnopqrst", 1, 0, "abcde", 1, 2, -2);
4371    test("abcdefghijklmnopqrst", 1, 0, "abcde", 1, 3, -3);
4372    test("abcdefghijklmnopqrst", 1, 0, "abcde", 1, 4, -4);
4373    test("abcdefghijklmnopqrst", 1, 0, "abcde", 1, 5, -4);
4374    test("abcdefghijklmnopqrst", 1, 0, "abcde", 2, 0, 0);
4375    test("abcdefghijklmnopqrst", 1, 0, "abcde", 2, 1, -1);
4376    test("abcdefghijklmnopqrst", 1, 0, "abcde", 2, 2, -2);
4377    test("abcdefghijklmnopqrst", 1, 0, "abcde", 2, 3, -3);
4378    test("abcdefghijklmnopqrst", 1, 0, "abcde", 2, 4, -3);
4379    test("abcdefghijklmnopqrst", 1, 0, "abcde", 4, 0, 0);
4380    test("abcdefghijklmnopqrst", 1, 0, "abcde", 4, 1, -1);
4381    test("abcdefghijklmnopqrst", 1, 0, "abcde", 4, 2, -1);
4382    test("abcdefghijklmnopqrst", 1, 0, "abcde", 5, 0, 0);
4383    test("abcdefghijklmnopqrst", 1, 0, "abcde", 5, 1, 0);
4384    test("abcdefghijklmnopqrst", 1, 0, "abcde", 6, 0, 0);
4385    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 0, 0, 0);
4386    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 0, 1, -1);
4387    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 0, 5, -5);
4388    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 0, 9, -9);
4389    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 0, 10, -10);
4390    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 0, 11, -10);
4391    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 1, 0, 0);
4392    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 1, 1, -1);
4393    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 1, 4, -4);
4394    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 1, 8, -8);
4395    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 1, 9, -9);
4396    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 1, 10, -9);
4397    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 5, 0, 0);
4398    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 5, 1, -1);
4399    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 5, 2, -2);
4400    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 5, 4, -4);
4401    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 5, 5, -5);
4402    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 5, 6, -5);
4403    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 9, 0, 0);
4404    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 9, 1, -1);
4405    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 9, 2, -1);
4406    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 10, 0, 0);
4407    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 10, 1, 0);
4408    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 11, 0, 0);
4409    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 0, 0, 0);
4410    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 0, 1, -1);
4411    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 0, 10, -10);
4412    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 0, 19, -19);
4413    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 0, 20, -20);
4414    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 0, 21, -20);
4415}
4416
4417void test42()
4418{
4419    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 1, 0, 0);
4420    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 1, 1, -1);
4421    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 1, 9, -9);
4422    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 1, 18, -18);
4423    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 1, 19, -19);
4424    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 1, 20, -19);
4425    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 10, 0, 0);
4426    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 10, 1, -1);
4427    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 10, 5, -5);
4428    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 10, 9, -9);
4429    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 10, 10, -10);
4430    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 10, 11, -10);
4431    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 19, 0, 0);
4432    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 19, 1, -1);
4433    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 19, 2, -1);
4434    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 20, 0, 0);
4435    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 20, 1, 0);
4436    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 21, 0, 0);
4437    test("abcdefghijklmnopqrst", 1, 1, "", 0, 0, 1);
4438    test("abcdefghijklmnopqrst", 1, 1, "", 0, 1, 1);
4439    test("abcdefghijklmnopqrst", 1, 1, "", 1, 0, 0);
4440    test("abcdefghijklmnopqrst", 1, 1, "abcde", 0, 0, 1);
4441    test("abcdefghijklmnopqrst", 1, 1, "abcde", 0, 1, 1);
4442    test("abcdefghijklmnopqrst", 1, 1, "abcde", 0, 2, 1);
4443    test("abcdefghijklmnopqrst", 1, 1, "abcde", 0, 4, 1);
4444    test("abcdefghijklmnopqrst", 1, 1, "abcde", 0, 5, 1);
4445    test("abcdefghijklmnopqrst", 1, 1, "abcde", 0, 6, 1);
4446    test("abcdefghijklmnopqrst", 1, 1, "abcde", 1, 0, 1);
4447    test("abcdefghijklmnopqrst", 1, 1, "abcde", 1, 1, 0);
4448    test("abcdefghijklmnopqrst", 1, 1, "abcde", 1, 2, -1);
4449    test("abcdefghijklmnopqrst", 1, 1, "abcde", 1, 3, -2);
4450    test("abcdefghijklmnopqrst", 1, 1, "abcde", 1, 4, -3);
4451    test("abcdefghijklmnopqrst", 1, 1, "abcde", 1, 5, -3);
4452    test("abcdefghijklmnopqrst", 1, 1, "abcde", 2, 0, 1);
4453    test("abcdefghijklmnopqrst", 1, 1, "abcde", 2, 1, -1);
4454    test("abcdefghijklmnopqrst", 1, 1, "abcde", 2, 2, -1);
4455    test("abcdefghijklmnopqrst", 1, 1, "abcde", 2, 3, -1);
4456    test("abcdefghijklmnopqrst", 1, 1, "abcde", 2, 4, -1);
4457    test("abcdefghijklmnopqrst", 1, 1, "abcde", 4, 0, 1);
4458    test("abcdefghijklmnopqrst", 1, 1, "abcde", 4, 1, -3);
4459    test("abcdefghijklmnopqrst", 1, 1, "abcde", 4, 2, -3);
4460    test("abcdefghijklmnopqrst", 1, 1, "abcde", 5, 0, 1);
4461    test("abcdefghijklmnopqrst", 1, 1, "abcde", 5, 1, 1);
4462    test("abcdefghijklmnopqrst", 1, 1, "abcde", 6, 0, 0);
4463    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 0, 0, 1);
4464    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 0, 1, 1);
4465    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 0, 5, 1);
4466    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 0, 9, 1);
4467    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 0, 10, 1);
4468    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 0, 11, 1);
4469    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 1, 0, 1);
4470    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 1, 1, 0);
4471    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 1, 4, -3);
4472    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 1, 8, -7);
4473    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 1, 9, -8);
4474    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 1, 10, -8);
4475    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 5, 0, 1);
4476    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 5, 1, -4);
4477    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 5, 2, -4);
4478    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 5, 4, -4);
4479    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 5, 5, -4);
4480    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 5, 6, -4);
4481    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 9, 0, 1);
4482    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 9, 1, -8);
4483    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 9, 2, -8);
4484    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 10, 0, 1);
4485    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 10, 1, 1);
4486    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 11, 0, 0);
4487    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 0, 0, 1);
4488    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 0, 1, 1);
4489    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 0, 10, 1);
4490    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 0, 19, 1);
4491    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 0, 20, 1);
4492    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 0, 21, 1);
4493    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 1, 0, 1);
4494    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 1, 1, 0);
4495    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 1, 9, -8);
4496    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 1, 18, -17);
4497    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 1, 19, -18);
4498    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 1, 20, -18);
4499    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 10, 0, 1);
4500    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 10, 1, -9);
4501    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 10, 5, -9);
4502    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 10, 9, -9);
4503    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 10, 10, -9);
4504    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 10, 11, -9);
4505    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 19, 0, 1);
4506    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 19, 1, -18);
4507    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 19, 2, -18);
4508    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 20, 0, 1);
4509    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 20, 1, 1);
4510    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 21, 0, 0);
4511    test("abcdefghijklmnopqrst", 1, 9, "", 0, 0, 9);
4512    test("abcdefghijklmnopqrst", 1, 9, "", 0, 1, 9);
4513    test("abcdefghijklmnopqrst", 1, 9, "", 1, 0, 0);
4514    test("abcdefghijklmnopqrst", 1, 9, "abcde", 0, 0, 9);
4515    test("abcdefghijklmnopqrst", 1, 9, "abcde", 0, 1, 1);
4516    test("abcdefghijklmnopqrst", 1, 9, "abcde", 0, 2, 1);
4517    test("abcdefghijklmnopqrst", 1, 9, "abcde", 0, 4, 1);
4518    test("abcdefghijklmnopqrst", 1, 9, "abcde", 0, 5, 1);
4519}
4520
4521void test43()
4522{
4523    test("abcdefghijklmnopqrst", 1, 9, "abcde", 0, 6, 1);
4524    test("abcdefghijklmnopqrst", 1, 9, "abcde", 1, 0, 9);
4525    test("abcdefghijklmnopqrst", 1, 9, "abcde", 1, 1, 8);
4526    test("abcdefghijklmnopqrst", 1, 9, "abcde", 1, 2, 7);
4527    test("abcdefghijklmnopqrst", 1, 9, "abcde", 1, 3, 6);
4528    test("abcdefghijklmnopqrst", 1, 9, "abcde", 1, 4, 5);
4529    test("abcdefghijklmnopqrst", 1, 9, "abcde", 1, 5, 5);
4530    test("abcdefghijklmnopqrst", 1, 9, "abcde", 2, 0, 9);
4531    test("abcdefghijklmnopqrst", 1, 9, "abcde", 2, 1, -1);
4532    test("abcdefghijklmnopqrst", 1, 9, "abcde", 2, 2, -1);
4533    test("abcdefghijklmnopqrst", 1, 9, "abcde", 2, 3, -1);
4534    test("abcdefghijklmnopqrst", 1, 9, "abcde", 2, 4, -1);
4535    test("abcdefghijklmnopqrst", 1, 9, "abcde", 4, 0, 9);
4536    test("abcdefghijklmnopqrst", 1, 9, "abcde", 4, 1, -3);
4537    test("abcdefghijklmnopqrst", 1, 9, "abcde", 4, 2, -3);
4538    test("abcdefghijklmnopqrst", 1, 9, "abcde", 5, 0, 9);
4539    test("abcdefghijklmnopqrst", 1, 9, "abcde", 5, 1, 9);
4540    test("abcdefghijklmnopqrst", 1, 9, "abcde", 6, 0, 0);
4541    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 0, 0, 9);
4542    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 0, 1, 1);
4543    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 0, 5, 1);
4544    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 0, 9, 1);
4545    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 0, 10, 1);
4546    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 0, 11, 1);
4547    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 1, 0, 9);
4548    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 1, 1, 8);
4549    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 1, 4, 5);
4550    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 1, 8, 1);
4551    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 1, 9, 0);
4552    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 1, 10, 0);
4553    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 5, 0, 9);
4554    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 5, 1, -4);
4555    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 5, 2, -4);
4556    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 5, 4, -4);
4557    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 5, 5, -4);
4558    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 5, 6, -4);
4559    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 9, 0, 9);
4560    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 9, 1, -8);
4561    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 9, 2, -8);
4562    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 10, 0, 9);
4563    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 10, 1, 9);
4564    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 11, 0, 0);
4565    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 0, 0, 9);
4566    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 0, 1, 1);
4567    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 0, 10, 1);
4568    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 0, 19, 1);
4569    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 0, 20, 1);
4570    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 0, 21, 1);
4571    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 1, 0, 9);
4572    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 1, 1, 8);
4573    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 1, 9, 0);
4574    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 1, 18, -9);
4575    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 1, 19, -10);
4576    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 1, 20, -10);
4577    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 10, 0, 9);
4578    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 10, 1, -9);
4579    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 10, 5, -9);
4580    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 10, 9, -9);
4581    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 10, 10, -9);
4582    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 10, 11, -9);
4583    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 19, 0, 9);
4584    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 19, 1, -18);
4585    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 19, 2, -18);
4586    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 20, 0, 9);
4587    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 20, 1, 9);
4588    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 21, 0, 0);
4589    test("abcdefghijklmnopqrst", 1, 18, "", 0, 0, 18);
4590    test("abcdefghijklmnopqrst", 1, 18, "", 0, 1, 18);
4591    test("abcdefghijklmnopqrst", 1, 18, "", 1, 0, 0);
4592    test("abcdefghijklmnopqrst", 1, 18, "abcde", 0, 0, 18);
4593    test("abcdefghijklmnopqrst", 1, 18, "abcde", 0, 1, 1);
4594    test("abcdefghijklmnopqrst", 1, 18, "abcde", 0, 2, 1);
4595    test("abcdefghijklmnopqrst", 1, 18, "abcde", 0, 4, 1);
4596    test("abcdefghijklmnopqrst", 1, 18, "abcde", 0, 5, 1);
4597    test("abcdefghijklmnopqrst", 1, 18, "abcde", 0, 6, 1);
4598    test("abcdefghijklmnopqrst", 1, 18, "abcde", 1, 0, 18);
4599    test("abcdefghijklmnopqrst", 1, 18, "abcde", 1, 1, 17);
4600    test("abcdefghijklmnopqrst", 1, 18, "abcde", 1, 2, 16);
4601    test("abcdefghijklmnopqrst", 1, 18, "abcde", 1, 3, 15);
4602    test("abcdefghijklmnopqrst", 1, 18, "abcde", 1, 4, 14);
4603    test("abcdefghijklmnopqrst", 1, 18, "abcde", 1, 5, 14);
4604    test("abcdefghijklmnopqrst", 1, 18, "abcde", 2, 0, 18);
4605    test("abcdefghijklmnopqrst", 1, 18, "abcde", 2, 1, -1);
4606    test("abcdefghijklmnopqrst", 1, 18, "abcde", 2, 2, -1);
4607    test("abcdefghijklmnopqrst", 1, 18, "abcde", 2, 3, -1);
4608    test("abcdefghijklmnopqrst", 1, 18, "abcde", 2, 4, -1);
4609    test("abcdefghijklmnopqrst", 1, 18, "abcde", 4, 0, 18);
4610    test("abcdefghijklmnopqrst", 1, 18, "abcde", 4, 1, -3);
4611    test("abcdefghijklmnopqrst", 1, 18, "abcde", 4, 2, -3);
4612    test("abcdefghijklmnopqrst", 1, 18, "abcde", 5, 0, 18);
4613    test("abcdefghijklmnopqrst", 1, 18, "abcde", 5, 1, 18);
4614    test("abcdefghijklmnopqrst", 1, 18, "abcde", 6, 0, 0);
4615    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 0, 0, 18);
4616    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 0, 1, 1);
4617    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 0, 5, 1);
4618    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 0, 9, 1);
4619    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 0, 10, 1);
4620    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 0, 11, 1);
4621    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 1, 0, 18);
4622    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 1, 1, 17);
4623}
4624
4625void test44()
4626{
4627    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 1, 4, 14);
4628    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 1, 8, 10);
4629    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 1, 9, 9);
4630    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 1, 10, 9);
4631    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 5, 0, 18);
4632    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 5, 1, -4);
4633    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 5, 2, -4);
4634    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 5, 4, -4);
4635    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 5, 5, -4);
4636    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 5, 6, -4);
4637    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 9, 0, 18);
4638    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 9, 1, -8);
4639    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 9, 2, -8);
4640    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 10, 0, 18);
4641    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 10, 1, 18);
4642    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 11, 0, 0);
4643    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 0, 0, 18);
4644    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 0, 1, 1);
4645    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 0, 10, 1);
4646    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 0, 19, 1);
4647    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 0, 20, 1);
4648    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 0, 21, 1);
4649    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 1, 0, 18);
4650    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 1, 1, 17);
4651    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 1, 9, 9);
4652    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 1, 18, 0);
4653    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 1, 19, -1);
4654    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 1, 20, -1);
4655    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 10, 0, 18);
4656    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 10, 1, -9);
4657    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 10, 5, -9);
4658    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 10, 9, -9);
4659    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 10, 10, -9);
4660    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 10, 11, -9);
4661    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 19, 0, 18);
4662    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 19, 1, -18);
4663    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 19, 2, -18);
4664    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 20, 0, 18);
4665    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 20, 1, 18);
4666    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 21, 0, 0);
4667    test("abcdefghijklmnopqrst", 1, 19, "", 0, 0, 19);
4668    test("abcdefghijklmnopqrst", 1, 19, "", 0, 1, 19);
4669    test("abcdefghijklmnopqrst", 1, 19, "", 1, 0, 0);
4670    test("abcdefghijklmnopqrst", 1, 19, "abcde", 0, 0, 19);
4671    test("abcdefghijklmnopqrst", 1, 19, "abcde", 0, 1, 1);
4672    test("abcdefghijklmnopqrst", 1, 19, "abcde", 0, 2, 1);
4673    test("abcdefghijklmnopqrst", 1, 19, "abcde", 0, 4, 1);
4674    test("abcdefghijklmnopqrst", 1, 19, "abcde", 0, 5, 1);
4675    test("abcdefghijklmnopqrst", 1, 19, "abcde", 0, 6, 1);
4676    test("abcdefghijklmnopqrst", 1, 19, "abcde", 1, 0, 19);
4677    test("abcdefghijklmnopqrst", 1, 19, "abcde", 1, 1, 18);
4678    test("abcdefghijklmnopqrst", 1, 19, "abcde", 1, 2, 17);
4679    test("abcdefghijklmnopqrst", 1, 19, "abcde", 1, 3, 16);
4680    test("abcdefghijklmnopqrst", 1, 19, "abcde", 1, 4, 15);
4681    test("abcdefghijklmnopqrst", 1, 19, "abcde", 1, 5, 15);
4682    test("abcdefghijklmnopqrst", 1, 19, "abcde", 2, 0, 19);
4683    test("abcdefghijklmnopqrst", 1, 19, "abcde", 2, 1, -1);
4684    test("abcdefghijklmnopqrst", 1, 19, "abcde", 2, 2, -1);
4685    test("abcdefghijklmnopqrst", 1, 19, "abcde", 2, 3, -1);
4686    test("abcdefghijklmnopqrst", 1, 19, "abcde", 2, 4, -1);
4687    test("abcdefghijklmnopqrst", 1, 19, "abcde", 4, 0, 19);
4688    test("abcdefghijklmnopqrst", 1, 19, "abcde", 4, 1, -3);
4689    test("abcdefghijklmnopqrst", 1, 19, "abcde", 4, 2, -3);
4690    test("abcdefghijklmnopqrst", 1, 19, "abcde", 5, 0, 19);
4691    test("abcdefghijklmnopqrst", 1, 19, "abcde", 5, 1, 19);
4692    test("abcdefghijklmnopqrst", 1, 19, "abcde", 6, 0, 0);
4693    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 0, 0, 19);
4694    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 0, 1, 1);
4695    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 0, 5, 1);
4696    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 0, 9, 1);
4697    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 0, 10, 1);
4698    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 0, 11, 1);
4699    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 1, 0, 19);
4700    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 1, 1, 18);
4701    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 1, 4, 15);
4702    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 1, 8, 11);
4703    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 1, 9, 10);
4704    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 1, 10, 10);
4705    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 5, 0, 19);
4706    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 5, 1, -4);
4707    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 5, 2, -4);
4708    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 5, 4, -4);
4709    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 5, 5, -4);
4710    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 5, 6, -4);
4711    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 9, 0, 19);
4712    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 9, 1, -8);
4713    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 9, 2, -8);
4714    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 10, 0, 19);
4715    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 10, 1, 19);
4716    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 11, 0, 0);
4717    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 0, 0, 19);
4718    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 0, 1, 1);
4719    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 0, 10, 1);
4720    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 0, 19, 1);
4721    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 0, 20, 1);
4722    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 0, 21, 1);
4723    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 1, 0, 19);
4724    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 1, 1, 18);
4725    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 1, 9, 10);
4726    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 1, 18, 1);
4727}
4728
4729void test45()
4730{
4731    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 1, 19, 0);
4732    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 1, 20, 0);
4733    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 10, 0, 19);
4734    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 10, 1, -9);
4735    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 10, 5, -9);
4736    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 10, 9, -9);
4737    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 10, 10, -9);
4738    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 10, 11, -9);
4739    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 19, 0, 19);
4740    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 19, 1, -18);
4741    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 19, 2, -18);
4742    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 20, 0, 19);
4743    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 20, 1, 19);
4744    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 21, 0, 0);
4745    test("abcdefghijklmnopqrst", 1, 20, "", 0, 0, 19);
4746    test("abcdefghijklmnopqrst", 1, 20, "", 0, 1, 19);
4747    test("abcdefghijklmnopqrst", 1, 20, "", 1, 0, 0);
4748    test("abcdefghijklmnopqrst", 1, 20, "abcde", 0, 0, 19);
4749    test("abcdefghijklmnopqrst", 1, 20, "abcde", 0, 1, 1);
4750    test("abcdefghijklmnopqrst", 1, 20, "abcde", 0, 2, 1);
4751    test("abcdefghijklmnopqrst", 1, 20, "abcde", 0, 4, 1);
4752    test("abcdefghijklmnopqrst", 1, 20, "abcde", 0, 5, 1);
4753    test("abcdefghijklmnopqrst", 1, 20, "abcde", 0, 6, 1);
4754    test("abcdefghijklmnopqrst", 1, 20, "abcde", 1, 0, 19);
4755    test("abcdefghijklmnopqrst", 1, 20, "abcde", 1, 1, 18);
4756    test("abcdefghijklmnopqrst", 1, 20, "abcde", 1, 2, 17);
4757    test("abcdefghijklmnopqrst", 1, 20, "abcde", 1, 3, 16);
4758    test("abcdefghijklmnopqrst", 1, 20, "abcde", 1, 4, 15);
4759    test("abcdefghijklmnopqrst", 1, 20, "abcde", 1, 5, 15);
4760    test("abcdefghijklmnopqrst", 1, 20, "abcde", 2, 0, 19);
4761    test("abcdefghijklmnopqrst", 1, 20, "abcde", 2, 1, -1);
4762    test("abcdefghijklmnopqrst", 1, 20, "abcde", 2, 2, -1);
4763    test("abcdefghijklmnopqrst", 1, 20, "abcde", 2, 3, -1);
4764    test("abcdefghijklmnopqrst", 1, 20, "abcde", 2, 4, -1);
4765    test("abcdefghijklmnopqrst", 1, 20, "abcde", 4, 0, 19);
4766    test("abcdefghijklmnopqrst", 1, 20, "abcde", 4, 1, -3);
4767    test("abcdefghijklmnopqrst", 1, 20, "abcde", 4, 2, -3);
4768    test("abcdefghijklmnopqrst", 1, 20, "abcde", 5, 0, 19);
4769    test("abcdefghijklmnopqrst", 1, 20, "abcde", 5, 1, 19);
4770    test("abcdefghijklmnopqrst", 1, 20, "abcde", 6, 0, 0);
4771    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 0, 0, 19);
4772    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 0, 1, 1);
4773    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 0, 5, 1);
4774    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 0, 9, 1);
4775    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 0, 10, 1);
4776    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 0, 11, 1);
4777    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 1, 0, 19);
4778    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 1, 1, 18);
4779    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 1, 4, 15);
4780    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 1, 8, 11);
4781    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 1, 9, 10);
4782    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 1, 10, 10);
4783    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 5, 0, 19);
4784    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 5, 1, -4);
4785    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 5, 2, -4);
4786    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 5, 4, -4);
4787    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 5, 5, -4);
4788    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 5, 6, -4);
4789    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 9, 0, 19);
4790    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 9, 1, -8);
4791    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 9, 2, -8);
4792    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 10, 0, 19);
4793    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 10, 1, 19);
4794    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 11, 0, 0);
4795    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 0, 0, 19);
4796    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 0, 1, 1);
4797    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 0, 10, 1);
4798    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 0, 19, 1);
4799    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 0, 20, 1);
4800    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 0, 21, 1);
4801    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 1, 0, 19);
4802    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 1, 1, 18);
4803    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 1, 9, 10);
4804    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 1, 18, 1);
4805    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 1, 19, 0);
4806    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 1, 20, 0);
4807    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 10, 0, 19);
4808    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 10, 1, -9);
4809    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 10, 5, -9);
4810    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 10, 9, -9);
4811    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 10, 10, -9);
4812    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 10, 11, -9);
4813    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 19, 0, 19);
4814    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 19, 1, -18);
4815    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 19, 2, -18);
4816    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 20, 0, 19);
4817    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 20, 1, 19);
4818    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 21, 0, 0);
4819    test("abcdefghijklmnopqrst", 10, 0, "", 0, 0, 0);
4820    test("abcdefghijklmnopqrst", 10, 0, "", 0, 1, 0);
4821    test("abcdefghijklmnopqrst", 10, 0, "", 1, 0, 0);
4822    test("abcdefghijklmnopqrst", 10, 0, "abcde", 0, 0, 0);
4823    test("abcdefghijklmnopqrst", 10, 0, "abcde", 0, 1, -1);
4824    test("abcdefghijklmnopqrst", 10, 0, "abcde", 0, 2, -2);
4825    test("abcdefghijklmnopqrst", 10, 0, "abcde", 0, 4, -4);
4826    test("abcdefghijklmnopqrst", 10, 0, "abcde", 0, 5, -5);
4827    test("abcdefghijklmnopqrst", 10, 0, "abcde", 0, 6, -5);
4828    test("abcdefghijklmnopqrst", 10, 0, "abcde", 1, 0, 0);
4829    test("abcdefghijklmnopqrst", 10, 0, "abcde", 1, 1, -1);
4830    test("abcdefghijklmnopqrst", 10, 0, "abcde", 1, 2, -2);
4831}
4832
4833void test46()
4834{
4835    test("abcdefghijklmnopqrst", 10, 0, "abcde", 1, 3, -3);
4836    test("abcdefghijklmnopqrst", 10, 0, "abcde", 1, 4, -4);
4837    test("abcdefghijklmnopqrst", 10, 0, "abcde", 1, 5, -4);
4838    test("abcdefghijklmnopqrst", 10, 0, "abcde", 2, 0, 0);
4839    test("abcdefghijklmnopqrst", 10, 0, "abcde", 2, 1, -1);
4840    test("abcdefghijklmnopqrst", 10, 0, "abcde", 2, 2, -2);
4841    test("abcdefghijklmnopqrst", 10, 0, "abcde", 2, 3, -3);
4842    test("abcdefghijklmnopqrst", 10, 0, "abcde", 2, 4, -3);
4843    test("abcdefghijklmnopqrst", 10, 0, "abcde", 4, 0, 0);
4844    test("abcdefghijklmnopqrst", 10, 0, "abcde", 4, 1, -1);
4845    test("abcdefghijklmnopqrst", 10, 0, "abcde", 4, 2, -1);
4846    test("abcdefghijklmnopqrst", 10, 0, "abcde", 5, 0, 0);
4847    test("abcdefghijklmnopqrst", 10, 0, "abcde", 5, 1, 0);
4848    test("abcdefghijklmnopqrst", 10, 0, "abcde", 6, 0, 0);
4849    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 0, 0, 0);
4850    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 0, 1, -1);
4851    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 0, 5, -5);
4852    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 0, 9, -9);
4853    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 0, 10, -10);
4854    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 0, 11, -10);
4855    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 1, 0, 0);
4856    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 1, 1, -1);
4857    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 1, 4, -4);
4858    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 1, 8, -8);
4859    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 1, 9, -9);
4860    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 1, 10, -9);
4861    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 5, 0, 0);
4862    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 5, 1, -1);
4863    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 5, 2, -2);
4864    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 5, 4, -4);
4865    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 5, 5, -5);
4866    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 5, 6, -5);
4867    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 9, 0, 0);
4868    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 9, 1, -1);
4869    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 9, 2, -1);
4870    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 10, 0, 0);
4871    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 10, 1, 0);
4872    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 11, 0, 0);
4873    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 0, 0, 0);
4874    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 0, 1, -1);
4875    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 0, 10, -10);
4876    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 0, 19, -19);
4877    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 0, 20, -20);
4878    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 0, 21, -20);
4879    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 1, 0, 0);
4880    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 1, 1, -1);
4881    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 1, 9, -9);
4882    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 1, 18, -18);
4883    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 1, 19, -19);
4884    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 1, 20, -19);
4885    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 10, 0, 0);
4886    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 10, 1, -1);
4887    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 10, 5, -5);
4888    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 10, 9, -9);
4889    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 10, 10, -10);
4890    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 10, 11, -10);
4891    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 19, 0, 0);
4892    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 19, 1, -1);
4893    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 19, 2, -1);
4894    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 20, 0, 0);
4895    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 20, 1, 0);
4896    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 21, 0, 0);
4897    test("abcdefghijklmnopqrst", 10, 1, "", 0, 0, 1);
4898    test("abcdefghijklmnopqrst", 10, 1, "", 0, 1, 1);
4899    test("abcdefghijklmnopqrst", 10, 1, "", 1, 0, 0);
4900    test("abcdefghijklmnopqrst", 10, 1, "abcde", 0, 0, 1);
4901    test("abcdefghijklmnopqrst", 10, 1, "abcde", 0, 1, 10);
4902    test("abcdefghijklmnopqrst", 10, 1, "abcde", 0, 2, 10);
4903    test("abcdefghijklmnopqrst", 10, 1, "abcde", 0, 4, 10);
4904    test("abcdefghijklmnopqrst", 10, 1, "abcde", 0, 5, 10);
4905    test("abcdefghijklmnopqrst", 10, 1, "abcde", 0, 6, 10);
4906    test("abcdefghijklmnopqrst", 10, 1, "abcde", 1, 0, 1);
4907    test("abcdefghijklmnopqrst", 10, 1, "abcde", 1, 1, 9);
4908    test("abcdefghijklmnopqrst", 10, 1, "abcde", 1, 2, 9);
4909    test("abcdefghijklmnopqrst", 10, 1, "abcde", 1, 3, 9);
4910    test("abcdefghijklmnopqrst", 10, 1, "abcde", 1, 4, 9);
4911    test("abcdefghijklmnopqrst", 10, 1, "abcde", 1, 5, 9);
4912    test("abcdefghijklmnopqrst", 10, 1, "abcde", 2, 0, 1);
4913    test("abcdefghijklmnopqrst", 10, 1, "abcde", 2, 1, 8);
4914    test("abcdefghijklmnopqrst", 10, 1, "abcde", 2, 2, 8);
4915    test("abcdefghijklmnopqrst", 10, 1, "abcde", 2, 3, 8);
4916    test("abcdefghijklmnopqrst", 10, 1, "abcde", 2, 4, 8);
4917    test("abcdefghijklmnopqrst", 10, 1, "abcde", 4, 0, 1);
4918    test("abcdefghijklmnopqrst", 10, 1, "abcde", 4, 1, 6);
4919    test("abcdefghijklmnopqrst", 10, 1, "abcde", 4, 2, 6);
4920    test("abcdefghijklmnopqrst", 10, 1, "abcde", 5, 0, 1);
4921    test("abcdefghijklmnopqrst", 10, 1, "abcde", 5, 1, 1);
4922    test("abcdefghijklmnopqrst", 10, 1, "abcde", 6, 0, 0);
4923    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 0, 0, 1);
4924    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 0, 1, 10);
4925    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 0, 5, 10);
4926    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 0, 9, 10);
4927    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 0, 10, 10);
4928    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 0, 11, 10);
4929    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 1, 0, 1);
4930    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 1, 1, 9);
4931    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 1, 4, 9);
4932    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 1, 8, 9);
4933    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 1, 9, 9);
4934    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 1, 10, 9);
4935}
4936
4937void test47()
4938{
4939    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 5, 0, 1);
4940    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 5, 1, 5);
4941    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 5, 2, 5);
4942    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 5, 4, 5);
4943    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 5, 5, 5);
4944    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 5, 6, 5);
4945    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 9, 0, 1);
4946    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 9, 1, 1);
4947    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 9, 2, 1);
4948    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 10, 0, 1);
4949    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 10, 1, 1);
4950    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 11, 0, 0);
4951    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 0, 0, 1);
4952    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 0, 1, 10);
4953    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 0, 10, 10);
4954    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 0, 19, 10);
4955    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 0, 20, 10);
4956    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 0, 21, 10);
4957    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 1, 0, 1);
4958    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 1, 1, 9);
4959    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 1, 9, 9);
4960    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 1, 18, 9);
4961    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 1, 19, 9);
4962    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 1, 20, 9);
4963    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 10, 0, 1);
4964    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 10, 1, 0);
4965    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 10, 5, -4);
4966    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 10, 9, -8);
4967    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 10, 10, -9);
4968    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 10, 11, -9);
4969    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 19, 0, 1);
4970    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 19, 1, -9);
4971    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 19, 2, -9);
4972    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 20, 0, 1);
4973    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 20, 1, 1);
4974    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 21, 0, 0);
4975    test("abcdefghijklmnopqrst", 10, 5, "", 0, 0, 5);
4976    test("abcdefghijklmnopqrst", 10, 5, "", 0, 1, 5);
4977    test("abcdefghijklmnopqrst", 10, 5, "", 1, 0, 0);
4978    test("abcdefghijklmnopqrst", 10, 5, "abcde", 0, 0, 5);
4979    test("abcdefghijklmnopqrst", 10, 5, "abcde", 0, 1, 10);
4980    test("abcdefghijklmnopqrst", 10, 5, "abcde", 0, 2, 10);
4981    test("abcdefghijklmnopqrst", 10, 5, "abcde", 0, 4, 10);
4982    test("abcdefghijklmnopqrst", 10, 5, "abcde", 0, 5, 10);
4983    test("abcdefghijklmnopqrst", 10, 5, "abcde", 0, 6, 10);
4984    test("abcdefghijklmnopqrst", 10, 5, "abcde", 1, 0, 5);
4985    test("abcdefghijklmnopqrst", 10, 5, "abcde", 1, 1, 9);
4986    test("abcdefghijklmnopqrst", 10, 5, "abcde", 1, 2, 9);
4987    test("abcdefghijklmnopqrst", 10, 5, "abcde", 1, 3, 9);
4988    test("abcdefghijklmnopqrst", 10, 5, "abcde", 1, 4, 9);
4989    test("abcdefghijklmnopqrst", 10, 5, "abcde", 1, 5, 9);
4990    test("abcdefghijklmnopqrst", 10, 5, "abcde", 2, 0, 5);
4991    test("abcdefghijklmnopqrst", 10, 5, "abcde", 2, 1, 8);
4992    test("abcdefghijklmnopqrst", 10, 5, "abcde", 2, 2, 8);
4993    test("abcdefghijklmnopqrst", 10, 5, "abcde", 2, 3, 8);
4994    test("abcdefghijklmnopqrst", 10, 5, "abcde", 2, 4, 8);
4995    test("abcdefghijklmnopqrst", 10, 5, "abcde", 4, 0, 5);
4996    test("abcdefghijklmnopqrst", 10, 5, "abcde", 4, 1, 6);
4997    test("abcdefghijklmnopqrst", 10, 5, "abcde", 4, 2, 6);
4998    test("abcdefghijklmnopqrst", 10, 5, "abcde", 5, 0, 5);
4999    test("abcdefghijklmnopqrst", 10, 5, "abcde", 5, 1, 5);
5000    test("abcdefghijklmnopqrst", 10, 5, "abcde", 6, 0, 0);
5001    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 0, 0, 5);
5002    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 0, 1, 10);
5003    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 0, 5, 10);
5004    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 0, 9, 10);
5005    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 0, 10, 10);
5006    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 0, 11, 10);
5007    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 1, 0, 5);
5008    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 1, 1, 9);
5009    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 1, 4, 9);
5010    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 1, 8, 9);
5011    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 1, 9, 9);
5012    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 1, 10, 9);
5013    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 5, 0, 5);
5014    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 5, 1, 5);
5015    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 5, 2, 5);
5016    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 5, 4, 5);
5017    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 5, 5, 5);
5018    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 5, 6, 5);
5019    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 9, 0, 5);
5020    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 9, 1, 1);
5021    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 9, 2, 1);
5022    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 10, 0, 5);
5023    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 10, 1, 5);
5024    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 11, 0, 0);
5025    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 0, 0, 5);
5026    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 0, 1, 10);
5027    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 0, 10, 10);
5028    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 0, 19, 10);
5029    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 0, 20, 10);
5030    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 0, 21, 10);
5031    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 1, 0, 5);
5032    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 1, 1, 9);
5033    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 1, 9, 9);
5034    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 1, 18, 9);
5035    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 1, 19, 9);
5036    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 1, 20, 9);
5037    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 10, 0, 5);
5038    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 10, 1, 4);
5039}
5040
5041void test48()
5042{
5043    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 10, 5, 0);
5044    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 10, 9, -4);
5045    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 10, 10, -5);
5046    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 10, 11, -5);
5047    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 19, 0, 5);
5048    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 19, 1, -9);
5049    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 19, 2, -9);
5050    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 20, 0, 5);
5051    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 20, 1, 5);
5052    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 21, 0, 0);
5053    test("abcdefghijklmnopqrst", 10, 9, "", 0, 0, 9);
5054    test("abcdefghijklmnopqrst", 10, 9, "", 0, 1, 9);
5055    test("abcdefghijklmnopqrst", 10, 9, "", 1, 0, 0);
5056    test("abcdefghijklmnopqrst", 10, 9, "abcde", 0, 0, 9);
5057    test("abcdefghijklmnopqrst", 10, 9, "abcde", 0, 1, 10);
5058    test("abcdefghijklmnopqrst", 10, 9, "abcde", 0, 2, 10);
5059    test("abcdefghijklmnopqrst", 10, 9, "abcde", 0, 4, 10);
5060    test("abcdefghijklmnopqrst", 10, 9, "abcde", 0, 5, 10);
5061    test("abcdefghijklmnopqrst", 10, 9, "abcde", 0, 6, 10);
5062    test("abcdefghijklmnopqrst", 10, 9, "abcde", 1, 0, 9);
5063    test("abcdefghijklmnopqrst", 10, 9, "abcde", 1, 1, 9);
5064    test("abcdefghijklmnopqrst", 10, 9, "abcde", 1, 2, 9);
5065    test("abcdefghijklmnopqrst", 10, 9, "abcde", 1, 3, 9);
5066    test("abcdefghijklmnopqrst", 10, 9, "abcde", 1, 4, 9);
5067    test("abcdefghijklmnopqrst", 10, 9, "abcde", 1, 5, 9);
5068    test("abcdefghijklmnopqrst", 10, 9, "abcde", 2, 0, 9);
5069    test("abcdefghijklmnopqrst", 10, 9, "abcde", 2, 1, 8);
5070    test("abcdefghijklmnopqrst", 10, 9, "abcde", 2, 2, 8);
5071    test("abcdefghijklmnopqrst", 10, 9, "abcde", 2, 3, 8);
5072    test("abcdefghijklmnopqrst", 10, 9, "abcde", 2, 4, 8);
5073    test("abcdefghijklmnopqrst", 10, 9, "abcde", 4, 0, 9);
5074    test("abcdefghijklmnopqrst", 10, 9, "abcde", 4, 1, 6);
5075    test("abcdefghijklmnopqrst", 10, 9, "abcde", 4, 2, 6);
5076    test("abcdefghijklmnopqrst", 10, 9, "abcde", 5, 0, 9);
5077    test("abcdefghijklmnopqrst", 10, 9, "abcde", 5, 1, 9);
5078    test("abcdefghijklmnopqrst", 10, 9, "abcde", 6, 0, 0);
5079    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 0, 0, 9);
5080    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 0, 1, 10);
5081    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 0, 5, 10);
5082    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 0, 9, 10);
5083    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 0, 10, 10);
5084    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 0, 11, 10);
5085    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 1, 0, 9);
5086    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 1, 1, 9);
5087    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 1, 4, 9);
5088    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 1, 8, 9);
5089    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 1, 9, 9);
5090    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 1, 10, 9);
5091    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 5, 0, 9);
5092    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 5, 1, 5);
5093    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 5, 2, 5);
5094    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 5, 4, 5);
5095    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 5, 5, 5);
5096    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 5, 6, 5);
5097    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 9, 0, 9);
5098    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 9, 1, 1);
5099    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 9, 2, 1);
5100    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 10, 0, 9);
5101    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 10, 1, 9);
5102    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 11, 0, 0);
5103    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 0, 0, 9);
5104    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 0, 1, 10);
5105    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 0, 10, 10);
5106    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 0, 19, 10);
5107    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 0, 20, 10);
5108    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 0, 21, 10);
5109    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 1, 0, 9);
5110    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 1, 1, 9);
5111    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 1, 9, 9);
5112    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 1, 18, 9);
5113    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 1, 19, 9);
5114    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 1, 20, 9);
5115    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 10, 0, 9);
5116    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 10, 1, 8);
5117    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 10, 5, 4);
5118    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 10, 9, 0);
5119    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 10, 10, -1);
5120    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 10, 11, -1);
5121    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 19, 0, 9);
5122    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 19, 1, -9);
5123    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 19, 2, -9);
5124    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 20, 0, 9);
5125    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 20, 1, 9);
5126    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 21, 0, 0);
5127    test("abcdefghijklmnopqrst", 10, 10, "", 0, 0, 10);
5128    test("abcdefghijklmnopqrst", 10, 10, "", 0, 1, 10);
5129    test("abcdefghijklmnopqrst", 10, 10, "", 1, 0, 0);
5130    test("abcdefghijklmnopqrst", 10, 10, "abcde", 0, 0, 10);
5131    test("abcdefghijklmnopqrst", 10, 10, "abcde", 0, 1, 10);
5132    test("abcdefghijklmnopqrst", 10, 10, "abcde", 0, 2, 10);
5133    test("abcdefghijklmnopqrst", 10, 10, "abcde", 0, 4, 10);
5134    test("abcdefghijklmnopqrst", 10, 10, "abcde", 0, 5, 10);
5135    test("abcdefghijklmnopqrst", 10, 10, "abcde", 0, 6, 10);
5136    test("abcdefghijklmnopqrst", 10, 10, "abcde", 1, 0, 10);
5137    test("abcdefghijklmnopqrst", 10, 10, "abcde", 1, 1, 9);
5138    test("abcdefghijklmnopqrst", 10, 10, "abcde", 1, 2, 9);
5139    test("abcdefghijklmnopqrst", 10, 10, "abcde", 1, 3, 9);
5140    test("abcdefghijklmnopqrst", 10, 10, "abcde", 1, 4, 9);
5141    test("abcdefghijklmnopqrst", 10, 10, "abcde", 1, 5, 9);
5142    test("abcdefghijklmnopqrst", 10, 10, "abcde", 2, 0, 10);
5143}
5144
5145void test49()
5146{
5147    test("abcdefghijklmnopqrst", 10, 10, "abcde", 2, 1, 8);
5148    test("abcdefghijklmnopqrst", 10, 10, "abcde", 2, 2, 8);
5149    test("abcdefghijklmnopqrst", 10, 10, "abcde", 2, 3, 8);
5150    test("abcdefghijklmnopqrst", 10, 10, "abcde", 2, 4, 8);
5151    test("abcdefghijklmnopqrst", 10, 10, "abcde", 4, 0, 10);
5152    test("abcdefghijklmnopqrst", 10, 10, "abcde", 4, 1, 6);
5153    test("abcdefghijklmnopqrst", 10, 10, "abcde", 4, 2, 6);
5154    test("abcdefghijklmnopqrst", 10, 10, "abcde", 5, 0, 10);
5155    test("abcdefghijklmnopqrst", 10, 10, "abcde", 5, 1, 10);
5156    test("abcdefghijklmnopqrst", 10, 10, "abcde", 6, 0, 0);
5157    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 0, 0, 10);
5158    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 0, 1, 10);
5159    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 0, 5, 10);
5160    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 0, 9, 10);
5161    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 0, 10, 10);
5162    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 0, 11, 10);
5163    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 1, 0, 10);
5164    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 1, 1, 9);
5165    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 1, 4, 9);
5166    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 1, 8, 9);
5167    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 1, 9, 9);
5168    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 1, 10, 9);
5169    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 5, 0, 10);
5170    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 5, 1, 5);
5171    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 5, 2, 5);
5172    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 5, 4, 5);
5173    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 5, 5, 5);
5174    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 5, 6, 5);
5175    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 9, 0, 10);
5176    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 9, 1, 1);
5177    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 9, 2, 1);
5178    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 10, 0, 10);
5179    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 10, 1, 10);
5180    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 11, 0, 0);
5181    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 0, 0, 10);
5182    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 0, 1, 10);
5183    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 0, 10, 10);
5184    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 0, 19, 10);
5185    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 0, 20, 10);
5186    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 0, 21, 10);
5187    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 1, 0, 10);
5188    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 1, 1, 9);
5189    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 1, 9, 9);
5190    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 1, 18, 9);
5191    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 1, 19, 9);
5192    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 1, 20, 9);
5193    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 10, 0, 10);
5194    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 10, 1, 9);
5195    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 10, 5, 5);
5196    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 10, 9, 1);
5197    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 10, 10, 0);
5198    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 10, 11, 0);
5199    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 19, 0, 10);
5200    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 19, 1, -9);
5201    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 19, 2, -9);
5202    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 20, 0, 10);
5203    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 20, 1, 10);
5204    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 21, 0, 0);
5205    test("abcdefghijklmnopqrst", 10, 11, "", 0, 0, 10);
5206    test("abcdefghijklmnopqrst", 10, 11, "", 0, 1, 10);
5207    test("abcdefghijklmnopqrst", 10, 11, "", 1, 0, 0);
5208    test("abcdefghijklmnopqrst", 10, 11, "abcde", 0, 0, 10);
5209    test("abcdefghijklmnopqrst", 10, 11, "abcde", 0, 1, 10);
5210    test("abcdefghijklmnopqrst", 10, 11, "abcde", 0, 2, 10);
5211    test("abcdefghijklmnopqrst", 10, 11, "abcde", 0, 4, 10);
5212    test("abcdefghijklmnopqrst", 10, 11, "abcde", 0, 5, 10);
5213    test("abcdefghijklmnopqrst", 10, 11, "abcde", 0, 6, 10);
5214    test("abcdefghijklmnopqrst", 10, 11, "abcde", 1, 0, 10);
5215    test("abcdefghijklmnopqrst", 10, 11, "abcde", 1, 1, 9);
5216    test("abcdefghijklmnopqrst", 10, 11, "abcde", 1, 2, 9);
5217    test("abcdefghijklmnopqrst", 10, 11, "abcde", 1, 3, 9);
5218    test("abcdefghijklmnopqrst", 10, 11, "abcde", 1, 4, 9);
5219    test("abcdefghijklmnopqrst", 10, 11, "abcde", 1, 5, 9);
5220    test("abcdefghijklmnopqrst", 10, 11, "abcde", 2, 0, 10);
5221    test("abcdefghijklmnopqrst", 10, 11, "abcde", 2, 1, 8);
5222    test("abcdefghijklmnopqrst", 10, 11, "abcde", 2, 2, 8);
5223    test("abcdefghijklmnopqrst", 10, 11, "abcde", 2, 3, 8);
5224    test("abcdefghijklmnopqrst", 10, 11, "abcde", 2, 4, 8);
5225    test("abcdefghijklmnopqrst", 10, 11, "abcde", 4, 0, 10);
5226    test("abcdefghijklmnopqrst", 10, 11, "abcde", 4, 1, 6);
5227    test("abcdefghijklmnopqrst", 10, 11, "abcde", 4, 2, 6);
5228    test("abcdefghijklmnopqrst", 10, 11, "abcde", 5, 0, 10);
5229    test("abcdefghijklmnopqrst", 10, 11, "abcde", 5, 1, 10);
5230    test("abcdefghijklmnopqrst", 10, 11, "abcde", 6, 0, 0);
5231    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 0, 0, 10);
5232    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 0, 1, 10);
5233    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 0, 5, 10);
5234    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 0, 9, 10);
5235    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 0, 10, 10);
5236    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 0, 11, 10);
5237    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 1, 0, 10);
5238    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 1, 1, 9);
5239    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 1, 4, 9);
5240    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 1, 8, 9);
5241    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 1, 9, 9);
5242    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 1, 10, 9);
5243    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 5, 0, 10);
5244    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 5, 1, 5);
5245    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 5, 2, 5);
5246    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 5, 4, 5);
5247}
5248
5249void test50()
5250{
5251    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 5, 5, 5);
5252    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 5, 6, 5);
5253    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 9, 0, 10);
5254    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 9, 1, 1);
5255    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 9, 2, 1);
5256    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 10, 0, 10);
5257    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 10, 1, 10);
5258    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 11, 0, 0);
5259    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 0, 0, 10);
5260    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 0, 1, 10);
5261    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 0, 10, 10);
5262    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 0, 19, 10);
5263    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 0, 20, 10);
5264    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 0, 21, 10);
5265    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 1, 0, 10);
5266    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 1, 1, 9);
5267    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 1, 9, 9);
5268    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 1, 18, 9);
5269    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 1, 19, 9);
5270    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 1, 20, 9);
5271    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 10, 0, 10);
5272    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 10, 1, 9);
5273    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 10, 5, 5);
5274    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 10, 9, 1);
5275    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 10, 10, 0);
5276    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 10, 11, 0);
5277    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 19, 0, 10);
5278    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 19, 1, -9);
5279    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 19, 2, -9);
5280    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 20, 0, 10);
5281    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 20, 1, 10);
5282    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 21, 0, 0);
5283    test("abcdefghijklmnopqrst", 19, 0, "", 0, 0, 0);
5284    test("abcdefghijklmnopqrst", 19, 0, "", 0, 1, 0);
5285    test("abcdefghijklmnopqrst", 19, 0, "", 1, 0, 0);
5286    test("abcdefghijklmnopqrst", 19, 0, "abcde", 0, 0, 0);
5287    test("abcdefghijklmnopqrst", 19, 0, "abcde", 0, 1, -1);
5288    test("abcdefghijklmnopqrst", 19, 0, "abcde", 0, 2, -2);
5289    test("abcdefghijklmnopqrst", 19, 0, "abcde", 0, 4, -4);
5290    test("abcdefghijklmnopqrst", 19, 0, "abcde", 0, 5, -5);
5291    test("abcdefghijklmnopqrst", 19, 0, "abcde", 0, 6, -5);
5292    test("abcdefghijklmnopqrst", 19, 0, "abcde", 1, 0, 0);
5293    test("abcdefghijklmnopqrst", 19, 0, "abcde", 1, 1, -1);
5294    test("abcdefghijklmnopqrst", 19, 0, "abcde", 1, 2, -2);
5295    test("abcdefghijklmnopqrst", 19, 0, "abcde", 1, 3, -3);
5296    test("abcdefghijklmnopqrst", 19, 0, "abcde", 1, 4, -4);
5297    test("abcdefghijklmnopqrst", 19, 0, "abcde", 1, 5, -4);
5298    test("abcdefghijklmnopqrst", 19, 0, "abcde", 2, 0, 0);
5299    test("abcdefghijklmnopqrst", 19, 0, "abcde", 2, 1, -1);
5300    test("abcdefghijklmnopqrst", 19, 0, "abcde", 2, 2, -2);
5301    test("abcdefghijklmnopqrst", 19, 0, "abcde", 2, 3, -3);
5302    test("abcdefghijklmnopqrst", 19, 0, "abcde", 2, 4, -3);
5303    test("abcdefghijklmnopqrst", 19, 0, "abcde", 4, 0, 0);
5304    test("abcdefghijklmnopqrst", 19, 0, "abcde", 4, 1, -1);
5305    test("abcdefghijklmnopqrst", 19, 0, "abcde", 4, 2, -1);
5306    test("abcdefghijklmnopqrst", 19, 0, "abcde", 5, 0, 0);
5307    test("abcdefghijklmnopqrst", 19, 0, "abcde", 5, 1, 0);
5308    test("abcdefghijklmnopqrst", 19, 0, "abcde", 6, 0, 0);
5309    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 0, 0, 0);
5310    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 0, 1, -1);
5311    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 0, 5, -5);
5312    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 0, 9, -9);
5313    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 0, 10, -10);
5314    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 0, 11, -10);
5315    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 1, 0, 0);
5316    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 1, 1, -1);
5317    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 1, 4, -4);
5318    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 1, 8, -8);
5319    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 1, 9, -9);
5320    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 1, 10, -9);
5321    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 5, 0, 0);
5322    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 5, 1, -1);
5323    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 5, 2, -2);
5324    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 5, 4, -4);
5325    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 5, 5, -5);
5326    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 5, 6, -5);
5327    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 9, 0, 0);
5328    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 9, 1, -1);
5329    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 9, 2, -1);
5330    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 10, 0, 0);
5331    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 10, 1, 0);
5332    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 11, 0, 0);
5333    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 0, 0, 0);
5334    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 0, 1, -1);
5335    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 0, 10, -10);
5336    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 0, 19, -19);
5337    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 0, 20, -20);
5338    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 0, 21, -20);
5339    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 1, 0, 0);
5340    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 1, 1, -1);
5341    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 1, 9, -9);
5342    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 1, 18, -18);
5343    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 1, 19, -19);
5344    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 1, 20, -19);
5345    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 10, 0, 0);
5346    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 10, 1, -1);
5347    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 10, 5, -5);
5348    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 10, 9, -9);
5349    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 10, 10, -10);
5350    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 10, 11, -10);
5351}
5352
5353void test51()
5354{
5355    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 19, 0, 0);
5356    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 19, 1, -1);
5357    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 19, 2, -1);
5358    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 20, 0, 0);
5359    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 20, 1, 0);
5360    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 21, 0, 0);
5361    test("abcdefghijklmnopqrst", 19, 1, "", 0, 0, 1);
5362    test("abcdefghijklmnopqrst", 19, 1, "", 0, 1, 1);
5363    test("abcdefghijklmnopqrst", 19, 1, "", 1, 0, 0);
5364    test("abcdefghijklmnopqrst", 19, 1, "abcde", 0, 0, 1);
5365    test("abcdefghijklmnopqrst", 19, 1, "abcde", 0, 1, 19);
5366    test("abcdefghijklmnopqrst", 19, 1, "abcde", 0, 2, 19);
5367    test("abcdefghijklmnopqrst", 19, 1, "abcde", 0, 4, 19);
5368    test("abcdefghijklmnopqrst", 19, 1, "abcde", 0, 5, 19);
5369    test("abcdefghijklmnopqrst", 19, 1, "abcde", 0, 6, 19);
5370    test("abcdefghijklmnopqrst", 19, 1, "abcde", 1, 0, 1);
5371    test("abcdefghijklmnopqrst", 19, 1, "abcde", 1, 1, 18);
5372    test("abcdefghijklmnopqrst", 19, 1, "abcde", 1, 2, 18);
5373    test("abcdefghijklmnopqrst", 19, 1, "abcde", 1, 3, 18);
5374    test("abcdefghijklmnopqrst", 19, 1, "abcde", 1, 4, 18);
5375    test("abcdefghijklmnopqrst", 19, 1, "abcde", 1, 5, 18);
5376    test("abcdefghijklmnopqrst", 19, 1, "abcde", 2, 0, 1);
5377    test("abcdefghijklmnopqrst", 19, 1, "abcde", 2, 1, 17);
5378    test("abcdefghijklmnopqrst", 19, 1, "abcde", 2, 2, 17);
5379    test("abcdefghijklmnopqrst", 19, 1, "abcde", 2, 3, 17);
5380    test("abcdefghijklmnopqrst", 19, 1, "abcde", 2, 4, 17);
5381    test("abcdefghijklmnopqrst", 19, 1, "abcde", 4, 0, 1);
5382    test("abcdefghijklmnopqrst", 19, 1, "abcde", 4, 1, 15);
5383    test("abcdefghijklmnopqrst", 19, 1, "abcde", 4, 2, 15);
5384    test("abcdefghijklmnopqrst", 19, 1, "abcde", 5, 0, 1);
5385    test("abcdefghijklmnopqrst", 19, 1, "abcde", 5, 1, 1);
5386    test("abcdefghijklmnopqrst", 19, 1, "abcde", 6, 0, 0);
5387    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 0, 0, 1);
5388    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 0, 1, 19);
5389    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 0, 5, 19);
5390    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 0, 9, 19);
5391    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 0, 10, 19);
5392    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 0, 11, 19);
5393    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 1, 0, 1);
5394    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 1, 1, 18);
5395    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 1, 4, 18);
5396    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 1, 8, 18);
5397    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 1, 9, 18);
5398    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 1, 10, 18);
5399    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 5, 0, 1);
5400    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 5, 1, 14);
5401    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 5, 2, 14);
5402    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 5, 4, 14);
5403    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 5, 5, 14);
5404    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 5, 6, 14);
5405    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 9, 0, 1);
5406    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 9, 1, 10);
5407    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 9, 2, 10);
5408    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 10, 0, 1);
5409    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 10, 1, 1);
5410    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 11, 0, 0);
5411    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 0, 0, 1);
5412    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 0, 1, 19);
5413    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 0, 10, 19);
5414    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 0, 19, 19);
5415    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 0, 20, 19);
5416    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 0, 21, 19);
5417    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 1, 0, 1);
5418    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 1, 1, 18);
5419    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 1, 9, 18);
5420    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 1, 18, 18);
5421    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 1, 19, 18);
5422    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 1, 20, 18);
5423    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 10, 0, 1);
5424    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 10, 1, 9);
5425    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 10, 5, 9);
5426    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 10, 9, 9);
5427    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 10, 10, 9);
5428    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 10, 11, 9);
5429    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 19, 0, 1);
5430    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 19, 1, 0);
5431    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 19, 2, 0);
5432    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 20, 0, 1);
5433    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 20, 1, 1);
5434    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 21, 0, 0);
5435    test("abcdefghijklmnopqrst", 19, 2, "", 0, 0, 1);
5436    test("abcdefghijklmnopqrst", 19, 2, "", 0, 1, 1);
5437    test("abcdefghijklmnopqrst", 19, 2, "", 1, 0, 0);
5438    test("abcdefghijklmnopqrst", 19, 2, "abcde", 0, 0, 1);
5439    test("abcdefghijklmnopqrst", 19, 2, "abcde", 0, 1, 19);
5440    test("abcdefghijklmnopqrst", 19, 2, "abcde", 0, 2, 19);
5441    test("abcdefghijklmnopqrst", 19, 2, "abcde", 0, 4, 19);
5442    test("abcdefghijklmnopqrst", 19, 2, "abcde", 0, 5, 19);
5443    test("abcdefghijklmnopqrst", 19, 2, "abcde", 0, 6, 19);
5444    test("abcdefghijklmnopqrst", 19, 2, "abcde", 1, 0, 1);
5445    test("abcdefghijklmnopqrst", 19, 2, "abcde", 1, 1, 18);
5446    test("abcdefghijklmnopqrst", 19, 2, "abcde", 1, 2, 18);
5447    test("abcdefghijklmnopqrst", 19, 2, "abcde", 1, 3, 18);
5448    test("abcdefghijklmnopqrst", 19, 2, "abcde", 1, 4, 18);
5449    test("abcdefghijklmnopqrst", 19, 2, "abcde", 1, 5, 18);
5450    test("abcdefghijklmnopqrst", 19, 2, "abcde", 2, 0, 1);
5451    test("abcdefghijklmnopqrst", 19, 2, "abcde", 2, 1, 17);
5452    test("abcdefghijklmnopqrst", 19, 2, "abcde", 2, 2, 17);
5453    test("abcdefghijklmnopqrst", 19, 2, "abcde", 2, 3, 17);
5454    test("abcdefghijklmnopqrst", 19, 2, "abcde", 2, 4, 17);
5455}
5456
5457void test52()
5458{
5459    test("abcdefghijklmnopqrst", 19, 2, "abcde", 4, 0, 1);
5460    test("abcdefghijklmnopqrst", 19, 2, "abcde", 4, 1, 15);
5461    test("abcdefghijklmnopqrst", 19, 2, "abcde", 4, 2, 15);
5462    test("abcdefghijklmnopqrst", 19, 2, "abcde", 5, 0, 1);
5463    test("abcdefghijklmnopqrst", 19, 2, "abcde", 5, 1, 1);
5464    test("abcdefghijklmnopqrst", 19, 2, "abcde", 6, 0, 0);
5465    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 0, 0, 1);
5466    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 0, 1, 19);
5467    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 0, 5, 19);
5468    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 0, 9, 19);
5469    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 0, 10, 19);
5470    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 0, 11, 19);
5471    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 1, 0, 1);
5472    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 1, 1, 18);
5473    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 1, 4, 18);
5474    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 1, 8, 18);
5475    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 1, 9, 18);
5476    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 1, 10, 18);
5477    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 5, 0, 1);
5478    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 5, 1, 14);
5479    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 5, 2, 14);
5480    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 5, 4, 14);
5481    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 5, 5, 14);
5482    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 5, 6, 14);
5483    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 9, 0, 1);
5484    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 9, 1, 10);
5485    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 9, 2, 10);
5486    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 10, 0, 1);
5487    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 10, 1, 1);
5488    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 11, 0, 0);
5489    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 0, 0, 1);
5490    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 0, 1, 19);
5491    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 0, 10, 19);
5492    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 0, 19, 19);
5493    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 0, 20, 19);
5494    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 0, 21, 19);
5495    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 1, 0, 1);
5496    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 1, 1, 18);
5497    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 1, 9, 18);
5498    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 1, 18, 18);
5499    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 1, 19, 18);
5500    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 1, 20, 18);
5501    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 10, 0, 1);
5502    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 10, 1, 9);
5503    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 10, 5, 9);
5504    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 10, 9, 9);
5505    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 10, 10, 9);
5506    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 10, 11, 9);
5507    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 19, 0, 1);
5508    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 19, 1, 0);
5509    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 19, 2, 0);
5510    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 20, 0, 1);
5511    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 20, 1, 1);
5512    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 21, 0, 0);
5513    test("abcdefghijklmnopqrst", 20, 0, "", 0, 0, 0);
5514    test("abcdefghijklmnopqrst", 20, 0, "", 0, 1, 0);
5515    test("abcdefghijklmnopqrst", 20, 0, "", 1, 0, 0);
5516    test("abcdefghijklmnopqrst", 20, 0, "abcde", 0, 0, 0);
5517    test("abcdefghijklmnopqrst", 20, 0, "abcde", 0, 1, -1);
5518    test("abcdefghijklmnopqrst", 20, 0, "abcde", 0, 2, -2);
5519    test("abcdefghijklmnopqrst", 20, 0, "abcde", 0, 4, -4);
5520    test("abcdefghijklmnopqrst", 20, 0, "abcde", 0, 5, -5);
5521    test("abcdefghijklmnopqrst", 20, 0, "abcde", 0, 6, -5);
5522    test("abcdefghijklmnopqrst", 20, 0, "abcde", 1, 0, 0);
5523    test("abcdefghijklmnopqrst", 20, 0, "abcde", 1, 1, -1);
5524    test("abcdefghijklmnopqrst", 20, 0, "abcde", 1, 2, -2);
5525    test("abcdefghijklmnopqrst", 20, 0, "abcde", 1, 3, -3);
5526    test("abcdefghijklmnopqrst", 20, 0, "abcde", 1, 4, -4);
5527    test("abcdefghijklmnopqrst", 20, 0, "abcde", 1, 5, -4);
5528    test("abcdefghijklmnopqrst", 20, 0, "abcde", 2, 0, 0);
5529    test("abcdefghijklmnopqrst", 20, 0, "abcde", 2, 1, -1);
5530    test("abcdefghijklmnopqrst", 20, 0, "abcde", 2, 2, -2);
5531    test("abcdefghijklmnopqrst", 20, 0, "abcde", 2, 3, -3);
5532    test("abcdefghijklmnopqrst", 20, 0, "abcde", 2, 4, -3);
5533    test("abcdefghijklmnopqrst", 20, 0, "abcde", 4, 0, 0);
5534    test("abcdefghijklmnopqrst", 20, 0, "abcde", 4, 1, -1);
5535    test("abcdefghijklmnopqrst", 20, 0, "abcde", 4, 2, -1);
5536    test("abcdefghijklmnopqrst", 20, 0, "abcde", 5, 0, 0);
5537    test("abcdefghijklmnopqrst", 20, 0, "abcde", 5, 1, 0);
5538    test("abcdefghijklmnopqrst", 20, 0, "abcde", 6, 0, 0);
5539    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 0, 0, 0);
5540    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 0, 1, -1);
5541    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 0, 5, -5);
5542    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 0, 9, -9);
5543    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 0, 10, -10);
5544    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 0, 11, -10);
5545    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 1, 0, 0);
5546    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 1, 1, -1);
5547    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 1, 4, -4);
5548    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 1, 8, -8);
5549    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 1, 9, -9);
5550    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 1, 10, -9);
5551    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 5, 0, 0);
5552    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 5, 1, -1);
5553    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 5, 2, -2);
5554    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 5, 4, -4);
5555    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 5, 5, -5);
5556    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 5, 6, -5);
5557    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 9, 0, 0);
5558    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 9, 1, -1);
5559}
5560
5561void test53()
5562{
5563    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 9, 2, -1);
5564    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 10, 0, 0);
5565    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 10, 1, 0);
5566    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 11, 0, 0);
5567    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 0, 0, 0);
5568    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 0, 1, -1);
5569    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 0, 10, -10);
5570    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 0, 19, -19);
5571    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 0, 20, -20);
5572    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 0, 21, -20);
5573    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 1, 0, 0);
5574    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 1, 1, -1);
5575    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 1, 9, -9);
5576    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 1, 18, -18);
5577    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 1, 19, -19);
5578    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 1, 20, -19);
5579    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 10, 0, 0);
5580    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 10, 1, -1);
5581    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 10, 5, -5);
5582    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 10, 9, -9);
5583    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 10, 10, -10);
5584    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 10, 11, -10);
5585    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 19, 0, 0);
5586    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 19, 1, -1);
5587    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 19, 2, -1);
5588    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 20, 0, 0);
5589    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 20, 1, 0);
5590    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 21, 0, 0);
5591    test("abcdefghijklmnopqrst", 20, 1, "", 0, 0, 0);
5592    test("abcdefghijklmnopqrst", 20, 1, "", 0, 1, 0);
5593    test("abcdefghijklmnopqrst", 20, 1, "", 1, 0, 0);
5594    test("abcdefghijklmnopqrst", 20, 1, "abcde", 0, 0, 0);
5595    test("abcdefghijklmnopqrst", 20, 1, "abcde", 0, 1, -1);
5596    test("abcdefghijklmnopqrst", 20, 1, "abcde", 0, 2, -2);
5597    test("abcdefghijklmnopqrst", 20, 1, "abcde", 0, 4, -4);
5598    test("abcdefghijklmnopqrst", 20, 1, "abcde", 0, 5, -5);
5599    test("abcdefghijklmnopqrst", 20, 1, "abcde", 0, 6, -5);
5600    test("abcdefghijklmnopqrst", 20, 1, "abcde", 1, 0, 0);
5601    test("abcdefghijklmnopqrst", 20, 1, "abcde", 1, 1, -1);
5602    test("abcdefghijklmnopqrst", 20, 1, "abcde", 1, 2, -2);
5603    test("abcdefghijklmnopqrst", 20, 1, "abcde", 1, 3, -3);
5604    test("abcdefghijklmnopqrst", 20, 1, "abcde", 1, 4, -4);
5605    test("abcdefghijklmnopqrst", 20, 1, "abcde", 1, 5, -4);
5606    test("abcdefghijklmnopqrst", 20, 1, "abcde", 2, 0, 0);
5607    test("abcdefghijklmnopqrst", 20, 1, "abcde", 2, 1, -1);
5608    test("abcdefghijklmnopqrst", 20, 1, "abcde", 2, 2, -2);
5609    test("abcdefghijklmnopqrst", 20, 1, "abcde", 2, 3, -3);
5610    test("abcdefghijklmnopqrst", 20, 1, "abcde", 2, 4, -3);
5611    test("abcdefghijklmnopqrst", 20, 1, "abcde", 4, 0, 0);
5612    test("abcdefghijklmnopqrst", 20, 1, "abcde", 4, 1, -1);
5613    test("abcdefghijklmnopqrst", 20, 1, "abcde", 4, 2, -1);
5614    test("abcdefghijklmnopqrst", 20, 1, "abcde", 5, 0, 0);
5615    test("abcdefghijklmnopqrst", 20, 1, "abcde", 5, 1, 0);
5616    test("abcdefghijklmnopqrst", 20, 1, "abcde", 6, 0, 0);
5617    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 0, 0, 0);
5618    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 0, 1, -1);
5619    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 0, 5, -5);
5620    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 0, 9, -9);
5621    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 0, 10, -10);
5622    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 0, 11, -10);
5623    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 1, 0, 0);
5624    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 1, 1, -1);
5625    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 1, 4, -4);
5626    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 1, 8, -8);
5627    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 1, 9, -9);
5628    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 1, 10, -9);
5629    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 5, 0, 0);
5630    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 5, 1, -1);
5631    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 5, 2, -2);
5632    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 5, 4, -4);
5633    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 5, 5, -5);
5634    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 5, 6, -5);
5635    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 9, 0, 0);
5636    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 9, 1, -1);
5637    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 9, 2, -1);
5638    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 10, 0, 0);
5639    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 10, 1, 0);
5640    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 11, 0, 0);
5641    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 0, 0, 0);
5642    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 0, 1, -1);
5643    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 0, 10, -10);
5644    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 0, 19, -19);
5645    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 0, 20, -20);
5646    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 0, 21, -20);
5647    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 1, 0, 0);
5648    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 1, 1, -1);
5649    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 1, 9, -9);
5650    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 1, 18, -18);
5651    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 1, 19, -19);
5652    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 1, 20, -19);
5653    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 10, 0, 0);
5654    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 10, 1, -1);
5655    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 10, 5, -5);
5656    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 10, 9, -9);
5657    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 10, 10, -10);
5658    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 10, 11, -10);
5659    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 19, 0, 0);
5660    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 19, 1, -1);
5661    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 19, 2, -1);
5662    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 20, 0, 0);
5663}
5664
5665void test54()
5666{
5667    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 20, 1, 0);
5668    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 21, 0, 0);
5669    test("abcdefghijklmnopqrst", 21, 0, "", 0, 0, 0);
5670    test("abcdefghijklmnopqrst", 21, 0, "", 0, 1, 0);
5671    test("abcdefghijklmnopqrst", 21, 0, "", 1, 0, 0);
5672    test("abcdefghijklmnopqrst", 21, 0, "abcde", 0, 0, 0);
5673    test("abcdefghijklmnopqrst", 21, 0, "abcde", 0, 1, 0);
5674    test("abcdefghijklmnopqrst", 21, 0, "abcde", 0, 2, 0);
5675    test("abcdefghijklmnopqrst", 21, 0, "abcde", 0, 4, 0);
5676    test("abcdefghijklmnopqrst", 21, 0, "abcde", 0, 5, 0);
5677    test("abcdefghijklmnopqrst", 21, 0, "abcde", 0, 6, 0);
5678    test("abcdefghijklmnopqrst", 21, 0, "abcde", 1, 0, 0);
5679    test("abcdefghijklmnopqrst", 21, 0, "abcde", 1, 1, 0);
5680    test("abcdefghijklmnopqrst", 21, 0, "abcde", 1, 2, 0);
5681    test("abcdefghijklmnopqrst", 21, 0, "abcde", 1, 3, 0);
5682    test("abcdefghijklmnopqrst", 21, 0, "abcde", 1, 4, 0);
5683    test("abcdefghijklmnopqrst", 21, 0, "abcde", 1, 5, 0);
5684    test("abcdefghijklmnopqrst", 21, 0, "abcde", 2, 0, 0);
5685    test("abcdefghijklmnopqrst", 21, 0, "abcde", 2, 1, 0);
5686    test("abcdefghijklmnopqrst", 21, 0, "abcde", 2, 2, 0);
5687    test("abcdefghijklmnopqrst", 21, 0, "abcde", 2, 3, 0);
5688    test("abcdefghijklmnopqrst", 21, 0, "abcde", 2, 4, 0);
5689    test("abcdefghijklmnopqrst", 21, 0, "abcde", 4, 0, 0);
5690    test("abcdefghijklmnopqrst", 21, 0, "abcde", 4, 1, 0);
5691    test("abcdefghijklmnopqrst", 21, 0, "abcde", 4, 2, 0);
5692    test("abcdefghijklmnopqrst", 21, 0, "abcde", 5, 0, 0);
5693    test("abcdefghijklmnopqrst", 21, 0, "abcde", 5, 1, 0);
5694    test("abcdefghijklmnopqrst", 21, 0, "abcde", 6, 0, 0);
5695    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 0, 0, 0);
5696    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 0, 1, 0);
5697    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 0, 5, 0);
5698    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 0, 9, 0);
5699    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 0, 10, 0);
5700    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 0, 11, 0);
5701    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 1, 0, 0);
5702    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 1, 1, 0);
5703    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 1, 4, 0);
5704    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 1, 8, 0);
5705    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 1, 9, 0);
5706    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 1, 10, 0);
5707    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 5, 0, 0);
5708    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 5, 1, 0);
5709    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 5, 2, 0);
5710    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 5, 4, 0);
5711    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 5, 5, 0);
5712    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 5, 6, 0);
5713    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 9, 0, 0);
5714    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 9, 1, 0);
5715    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 9, 2, 0);
5716    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 10, 0, 0);
5717    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 10, 1, 0);
5718    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 11, 0, 0);
5719    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 0, 0, 0);
5720    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 0, 1, 0);
5721    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 0, 10, 0);
5722    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 0, 19, 0);
5723    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 0, 20, 0);
5724    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 0, 21, 0);
5725    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 1, 0, 0);
5726    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 1, 1, 0);
5727    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 1, 9, 0);
5728    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 1, 18, 0);
5729    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 1, 19, 0);
5730    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 1, 20, 0);
5731    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 10, 0, 0);
5732    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 10, 1, 0);
5733    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 10, 5, 0);
5734    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 10, 9, 0);
5735    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 10, 10, 0);
5736    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 10, 11, 0);
5737    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 19, 0, 0);
5738    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 19, 1, 0);
5739    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 19, 2, 0);
5740    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 20, 0, 0);
5741    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 20, 1, 0);
5742    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 21, 0, 0);
5743}
5744
5745
5746int main () {
5747    test0();
5748    test1();
5749    test2();
5750    test3();
5751    test4();
5752    test5();
5753    test6();
5754    test7();
5755    test8();
5756    test9();
5757    test10();
5758    test11();
5759    test12();
5760    test13();
5761    test14();
5762    test15();
5763    test16();
5764    test17();
5765    test18();
5766    test19();
5767    test20();
5768    test21();
5769    test22();
5770    test23();
5771    test24();
5772    test25();
5773    test26();
5774    test27();
5775    test28();
5776    test29();
5777    test30();
5778    test31();
5779    test32();
5780    test33();
5781    test34();
5782    test35();
5783    test36();
5784    test37();
5785    test38();
5786    test39();
5787    test40();
5788    test41();
5789    test42();
5790    test43();
5791    test44();
5792    test45();
5793    test46();
5794    test47();
5795    test48();
5796    test49();
5797    test50();
5798    test51();
5799    test52();
5800    test53();
5801    test54();
5802
5803
5804    {
5805    test("abcde", 5, 1, "", 0, 0, 0);
5806    test("abcde", 2, 4, "", 0, 0, 3);
5807    test("abcde", 2, 4, "abcde", 3, 4, -2);
5808    test("ABCde", 2, 4, "abcde", 2, 4, -1);
5809    }
5810
5811    {
5812    test(L"abcde", 5, 1, L"", 0, 0, 0);
5813    test(L"abcde", 2, 4, L"", 0, 0, 3);
5814    test(L"abcde", 2, 4, L"abcde", 3, 4, -2);
5815    test(L"ABCde", 2, 4, L"abcde", 2, 4, -1);
5816    }
5817
5818#if __cplusplus >= 201103L
5819    {
5820    test(u"abcde", 5, 1, u"", 0, 0, 0);
5821    test(u"abcde", 2, 4, u"", 0, 0, 3);
5822    test(u"abcde", 2, 4, u"abcde", 3, 4, -2);
5823    test(u"ABCde", 2, 4, u"abcde", 2, 4, -1);
5824    }
5825
5826    {
5827    test(U"abcde", 5, 1, U"", 0, 0, 0);
5828    test(U"abcde", 2, 4, U"", 0, 0, 3);
5829    test(U"abcde", 2, 4, U"abcde", 3, 4, -2);
5830    test(U"ABCde", 2, 4, U"abcde", 2, 4, -1);
5831    }
5832#endif
5833
5834#if _LIBCPP_STD_VER > 11
5835    {
5836    typedef std::experimental::basic_string_view<char, constexpr_char_traits<char>> SV;
5837    constexpr SV  sv1 { "abcde", 5 };
5838    static_assert ( sv1.compare(5, 1, "", 0, 0) == 0, "" );
5839    static_assert ( sv1.compare(2, 4, "", 0, 0) == 1, "" );
5840    static_assert ( sv1.compare(2, 4, "abcde", 3, 4) == -1, "" );
5841    }
5842#endif
5843}
5844