1 //===----------------------------------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 // <string_view>
10 
11 // constexpr int compare(size_type pos1, size_type n1, basic_string_view str,
12 //             size_type pos2, size_type n2) const;
13 
14 #include <string_view>
15 #include <cassert>
16 #include <stdexcept>
17 
18 #include "test_macros.h"
19 #include "constexpr_char_traits.h"
20 
sign(int x)21 int sign ( int x ) { return x > 0 ? 1 : ( x < 0 ? -1 : 0 ); }
22 
23 template<typename CharT>
test1(std::basic_string_view<CharT> sv1,size_t pos1,size_t n1,std::basic_string_view<CharT> sv2,size_t pos2,size_t n2,int expected)24 void test1 ( std::basic_string_view<CharT> sv1, size_t pos1, size_t n1,
25              std::basic_string_view<CharT> sv2, size_t pos2, size_t n2,
26              int expected ) {
27 #ifdef TEST_HAS_NO_EXCEPTIONS
28     if (pos1 <= sv1.size() && pos2 <= sv2.size())
29         assert (sign( sv1.compare(pos1, n1, sv2, pos2, n2)) == sign(expected));
30 #else
31     try {
32         assert (sign( sv1.compare(pos1, n1, sv2, pos2, n2)) == sign(expected));
33         assert(pos1 <= sv1.size() && pos2 <= sv2.size());
34         }
35     catch (const std::out_of_range&) {
36         assert(pos1 > sv1.size() || pos2 > sv2.size());
37         }
38 #endif
39 }
40 
41 
42 template<typename CharT>
test(const CharT * s1,size_t pos1,size_t n1,const CharT * s2,size_t pos2,size_t n2,int expected)43 void test ( const CharT *s1, size_t pos1, size_t n1,
44             const CharT *s2, size_t pos2, size_t n2,
45             int expected ) {
46     typedef std::basic_string_view<CharT> string_view_t;
47 
48     string_view_t sv1 ( s1 );
49     string_view_t sv2 ( s2 );
50     test1(sv1, pos1, n1, sv2, pos2, n2, expected);
51 }
52 
test0()53 void test0()
54 {
55     test("", 0, 0, "", 0, 0, 0);
56     test("", 0, 0, "", 0, 1, 0);
57     test("", 0, 0, "", 1, 0, 0);
58     test("", 0, 0, "abcde", 0, 0, 0);
59     test("", 0, 0, "abcde", 0, 1, -1);
60     test("", 0, 0, "abcde", 0, 2, -2);
61     test("", 0, 0, "abcde", 0, 4, -4);
62     test("", 0, 0, "abcde", 0, 5, -5);
63     test("", 0, 0, "abcde", 0, 6, -5);
64     test("", 0, 0, "abcde", 1, 0, 0);
65     test("", 0, 0, "abcde", 1, 1, -1);
66     test("", 0, 0, "abcde", 1, 2, -2);
67     test("", 0, 0, "abcde", 1, 3, -3);
68     test("", 0, 0, "abcde", 1, 4, -4);
69     test("", 0, 0, "abcde", 1, 5, -4);
70     test("", 0, 0, "abcde", 2, 0, 0);
71     test("", 0, 0, "abcde", 2, 1, -1);
72     test("", 0, 0, "abcde", 2, 2, -2);
73     test("", 0, 0, "abcde", 2, 3, -3);
74     test("", 0, 0, "abcde", 2, 4, -3);
75     test("", 0, 0, "abcde", 4, 0, 0);
76     test("", 0, 0, "abcde", 4, 1, -1);
77     test("", 0, 0, "abcde", 4, 2, -1);
78     test("", 0, 0, "abcde", 5, 0, 0);
79     test("", 0, 0, "abcde", 5, 1, 0);
80     test("", 0, 0, "abcde", 6, 0, 0);
81     test("", 0, 0, "abcdefghij", 0, 0, 0);
82     test("", 0, 0, "abcdefghij", 0, 1, -1);
83     test("", 0, 0, "abcdefghij", 0, 5, -5);
84     test("", 0, 0, "abcdefghij", 0, 9, -9);
85     test("", 0, 0, "abcdefghij", 0, 10, -10);
86     test("", 0, 0, "abcdefghij", 0, 11, -10);
87     test("", 0, 0, "abcdefghij", 1, 0, 0);
88     test("", 0, 0, "abcdefghij", 1, 1, -1);
89     test("", 0, 0, "abcdefghij", 1, 4, -4);
90     test("", 0, 0, "abcdefghij", 1, 8, -8);
91     test("", 0, 0, "abcdefghij", 1, 9, -9);
92     test("", 0, 0, "abcdefghij", 1, 10, -9);
93     test("", 0, 0, "abcdefghij", 5, 0, 0);
94     test("", 0, 0, "abcdefghij", 5, 1, -1);
95     test("", 0, 0, "abcdefghij", 5, 2, -2);
96     test("", 0, 0, "abcdefghij", 5, 4, -4);
97     test("", 0, 0, "abcdefghij", 5, 5, -5);
98     test("", 0, 0, "abcdefghij", 5, 6, -5);
99     test("", 0, 0, "abcdefghij", 9, 0, 0);
100     test("", 0, 0, "abcdefghij", 9, 1, -1);
101     test("", 0, 0, "abcdefghij", 9, 2, -1);
102     test("", 0, 0, "abcdefghij", 10, 0, 0);
103     test("", 0, 0, "abcdefghij", 10, 1, 0);
104     test("", 0, 0, "abcdefghij", 11, 0, 0);
105     test("", 0, 0, "abcdefghijklmnopqrst", 0, 0, 0);
106     test("", 0, 0, "abcdefghijklmnopqrst", 0, 1, -1);
107     test("", 0, 0, "abcdefghijklmnopqrst", 0, 10, -10);
108     test("", 0, 0, "abcdefghijklmnopqrst", 0, 19, -19);
109     test("", 0, 0, "abcdefghijklmnopqrst", 0, 20, -20);
110     test("", 0, 0, "abcdefghijklmnopqrst", 0, 21, -20);
111     test("", 0, 0, "abcdefghijklmnopqrst", 1, 0, 0);
112     test("", 0, 0, "abcdefghijklmnopqrst", 1, 1, -1);
113     test("", 0, 0, "abcdefghijklmnopqrst", 1, 9, -9);
114     test("", 0, 0, "abcdefghijklmnopqrst", 1, 18, -18);
115     test("", 0, 0, "abcdefghijklmnopqrst", 1, 19, -19);
116     test("", 0, 0, "abcdefghijklmnopqrst", 1, 20, -19);
117     test("", 0, 0, "abcdefghijklmnopqrst", 10, 0, 0);
118     test("", 0, 0, "abcdefghijklmnopqrst", 10, 1, -1);
119     test("", 0, 0, "abcdefghijklmnopqrst", 10, 5, -5);
120     test("", 0, 0, "abcdefghijklmnopqrst", 10, 9, -9);
121     test("", 0, 0, "abcdefghijklmnopqrst", 10, 10, -10);
122     test("", 0, 0, "abcdefghijklmnopqrst", 10, 11, -10);
123     test("", 0, 0, "abcdefghijklmnopqrst", 19, 0, 0);
124     test("", 0, 0, "abcdefghijklmnopqrst", 19, 1, -1);
125     test("", 0, 0, "abcdefghijklmnopqrst", 19, 2, -1);
126     test("", 0, 0, "abcdefghijklmnopqrst", 20, 0, 0);
127     test("", 0, 0, "abcdefghijklmnopqrst", 20, 1, 0);
128     test("", 0, 0, "abcdefghijklmnopqrst", 21, 0, 0);
129     test("", 0, 1, "", 0, 0, 0);
130     test("", 0, 1, "", 0, 1, 0);
131     test("", 0, 1, "", 1, 0, 0);
132     test("", 0, 1, "abcde", 0, 0, 0);
133     test("", 0, 1, "abcde", 0, 1, -1);
134     test("", 0, 1, "abcde", 0, 2, -2);
135     test("", 0, 1, "abcde", 0, 4, -4);
136     test("", 0, 1, "abcde", 0, 5, -5);
137     test("", 0, 1, "abcde", 0, 6, -5);
138     test("", 0, 1, "abcde", 1, 0, 0);
139     test("", 0, 1, "abcde", 1, 1, -1);
140     test("", 0, 1, "abcde", 1, 2, -2);
141     test("", 0, 1, "abcde", 1, 3, -3);
142     test("", 0, 1, "abcde", 1, 4, -4);
143     test("", 0, 1, "abcde", 1, 5, -4);
144     test("", 0, 1, "abcde", 2, 0, 0);
145     test("", 0, 1, "abcde", 2, 1, -1);
146     test("", 0, 1, "abcde", 2, 2, -2);
147     test("", 0, 1, "abcde", 2, 3, -3);
148     test("", 0, 1, "abcde", 2, 4, -3);
149     test("", 0, 1, "abcde", 4, 0, 0);
150     test("", 0, 1, "abcde", 4, 1, -1);
151     test("", 0, 1, "abcde", 4, 2, -1);
152     test("", 0, 1, "abcde", 5, 0, 0);
153     test("", 0, 1, "abcde", 5, 1, 0);
154     test("", 0, 1, "abcde", 6, 0, 0);
155 }
156 
test1()157 void test1()
158 {
159     test("", 0, 1, "abcdefghij", 0, 0, 0);
160     test("", 0, 1, "abcdefghij", 0, 1, -1);
161     test("", 0, 1, "abcdefghij", 0, 5, -5);
162     test("", 0, 1, "abcdefghij", 0, 9, -9);
163     test("", 0, 1, "abcdefghij", 0, 10, -10);
164     test("", 0, 1, "abcdefghij", 0, 11, -10);
165     test("", 0, 1, "abcdefghij", 1, 0, 0);
166     test("", 0, 1, "abcdefghij", 1, 1, -1);
167     test("", 0, 1, "abcdefghij", 1, 4, -4);
168     test("", 0, 1, "abcdefghij", 1, 8, -8);
169     test("", 0, 1, "abcdefghij", 1, 9, -9);
170     test("", 0, 1, "abcdefghij", 1, 10, -9);
171     test("", 0, 1, "abcdefghij", 5, 0, 0);
172     test("", 0, 1, "abcdefghij", 5, 1, -1);
173     test("", 0, 1, "abcdefghij", 5, 2, -2);
174     test("", 0, 1, "abcdefghij", 5, 4, -4);
175     test("", 0, 1, "abcdefghij", 5, 5, -5);
176     test("", 0, 1, "abcdefghij", 5, 6, -5);
177     test("", 0, 1, "abcdefghij", 9, 0, 0);
178     test("", 0, 1, "abcdefghij", 9, 1, -1);
179     test("", 0, 1, "abcdefghij", 9, 2, -1);
180     test("", 0, 1, "abcdefghij", 10, 0, 0);
181     test("", 0, 1, "abcdefghij", 10, 1, 0);
182     test("", 0, 1, "abcdefghij", 11, 0, 0);
183     test("", 0, 1, "abcdefghijklmnopqrst", 0, 0, 0);
184     test("", 0, 1, "abcdefghijklmnopqrst", 0, 1, -1);
185     test("", 0, 1, "abcdefghijklmnopqrst", 0, 10, -10);
186     test("", 0, 1, "abcdefghijklmnopqrst", 0, 19, -19);
187     test("", 0, 1, "abcdefghijklmnopqrst", 0, 20, -20);
188     test("", 0, 1, "abcdefghijklmnopqrst", 0, 21, -20);
189     test("", 0, 1, "abcdefghijklmnopqrst", 1, 0, 0);
190     test("", 0, 1, "abcdefghijklmnopqrst", 1, 1, -1);
191     test("", 0, 1, "abcdefghijklmnopqrst", 1, 9, -9);
192     test("", 0, 1, "abcdefghijklmnopqrst", 1, 18, -18);
193     test("", 0, 1, "abcdefghijklmnopqrst", 1, 19, -19);
194     test("", 0, 1, "abcdefghijklmnopqrst", 1, 20, -19);
195     test("", 0, 1, "abcdefghijklmnopqrst", 10, 0, 0);
196     test("", 0, 1, "abcdefghijklmnopqrst", 10, 1, -1);
197     test("", 0, 1, "abcdefghijklmnopqrst", 10, 5, -5);
198     test("", 0, 1, "abcdefghijklmnopqrst", 10, 9, -9);
199     test("", 0, 1, "abcdefghijklmnopqrst", 10, 10, -10);
200     test("", 0, 1, "abcdefghijklmnopqrst", 10, 11, -10);
201     test("", 0, 1, "abcdefghijklmnopqrst", 19, 0, 0);
202     test("", 0, 1, "abcdefghijklmnopqrst", 19, 1, -1);
203     test("", 0, 1, "abcdefghijklmnopqrst", 19, 2, -1);
204     test("", 0, 1, "abcdefghijklmnopqrst", 20, 0, 0);
205     test("", 0, 1, "abcdefghijklmnopqrst", 20, 1, 0);
206     test("", 0, 1, "abcdefghijklmnopqrst", 21, 0, 0);
207     test("", 1, 0, "", 0, 0, 0);
208     test("", 1, 0, "", 0, 1, 0);
209     test("", 1, 0, "", 1, 0, 0);
210     test("", 1, 0, "abcde", 0, 0, 0);
211     test("", 1, 0, "abcde", 0, 1, 0);
212     test("", 1, 0, "abcde", 0, 2, 0);
213     test("", 1, 0, "abcde", 0, 4, 0);
214     test("", 1, 0, "abcde", 0, 5, 0);
215     test("", 1, 0, "abcde", 0, 6, 0);
216     test("", 1, 0, "abcde", 1, 0, 0);
217     test("", 1, 0, "abcde", 1, 1, 0);
218     test("", 1, 0, "abcde", 1, 2, 0);
219     test("", 1, 0, "abcde", 1, 3, 0);
220     test("", 1, 0, "abcde", 1, 4, 0);
221     test("", 1, 0, "abcde", 1, 5, 0);
222     test("", 1, 0, "abcde", 2, 0, 0);
223     test("", 1, 0, "abcde", 2, 1, 0);
224     test("", 1, 0, "abcde", 2, 2, 0);
225     test("", 1, 0, "abcde", 2, 3, 0);
226     test("", 1, 0, "abcde", 2, 4, 0);
227     test("", 1, 0, "abcde", 4, 0, 0);
228     test("", 1, 0, "abcde", 4, 1, 0);
229     test("", 1, 0, "abcde", 4, 2, 0);
230     test("", 1, 0, "abcde", 5, 0, 0);
231     test("", 1, 0, "abcde", 5, 1, 0);
232     test("", 1, 0, "abcde", 6, 0, 0);
233     test("", 1, 0, "abcdefghij", 0, 0, 0);
234     test("", 1, 0, "abcdefghij", 0, 1, 0);
235     test("", 1, 0, "abcdefghij", 0, 5, 0);
236     test("", 1, 0, "abcdefghij", 0, 9, 0);
237     test("", 1, 0, "abcdefghij", 0, 10, 0);
238     test("", 1, 0, "abcdefghij", 0, 11, 0);
239     test("", 1, 0, "abcdefghij", 1, 0, 0);
240     test("", 1, 0, "abcdefghij", 1, 1, 0);
241     test("", 1, 0, "abcdefghij", 1, 4, 0);
242     test("", 1, 0, "abcdefghij", 1, 8, 0);
243     test("", 1, 0, "abcdefghij", 1, 9, 0);
244     test("", 1, 0, "abcdefghij", 1, 10, 0);
245     test("", 1, 0, "abcdefghij", 5, 0, 0);
246     test("", 1, 0, "abcdefghij", 5, 1, 0);
247     test("", 1, 0, "abcdefghij", 5, 2, 0);
248     test("", 1, 0, "abcdefghij", 5, 4, 0);
249     test("", 1, 0, "abcdefghij", 5, 5, 0);
250     test("", 1, 0, "abcdefghij", 5, 6, 0);
251     test("", 1, 0, "abcdefghij", 9, 0, 0);
252     test("", 1, 0, "abcdefghij", 9, 1, 0);
253     test("", 1, 0, "abcdefghij", 9, 2, 0);
254     test("", 1, 0, "abcdefghij", 10, 0, 0);
255     test("", 1, 0, "abcdefghij", 10, 1, 0);
256     test("", 1, 0, "abcdefghij", 11, 0, 0);
257     test("", 1, 0, "abcdefghijklmnopqrst", 0, 0, 0);
258     test("", 1, 0, "abcdefghijklmnopqrst", 0, 1, 0);
259 }
260 
test2()261 void test2()
262 {
263     test("", 1, 0, "abcdefghijklmnopqrst", 0, 10, 0);
264     test("", 1, 0, "abcdefghijklmnopqrst", 0, 19, 0);
265     test("", 1, 0, "abcdefghijklmnopqrst", 0, 20, 0);
266     test("", 1, 0, "abcdefghijklmnopqrst", 0, 21, 0);
267     test("", 1, 0, "abcdefghijklmnopqrst", 1, 0, 0);
268     test("", 1, 0, "abcdefghijklmnopqrst", 1, 1, 0);
269     test("", 1, 0, "abcdefghijklmnopqrst", 1, 9, 0);
270     test("", 1, 0, "abcdefghijklmnopqrst", 1, 18, 0);
271     test("", 1, 0, "abcdefghijklmnopqrst", 1, 19, 0);
272     test("", 1, 0, "abcdefghijklmnopqrst", 1, 20, 0);
273     test("", 1, 0, "abcdefghijklmnopqrst", 10, 0, 0);
274     test("", 1, 0, "abcdefghijklmnopqrst", 10, 1, 0);
275     test("", 1, 0, "abcdefghijklmnopqrst", 10, 5, 0);
276     test("", 1, 0, "abcdefghijklmnopqrst", 10, 9, 0);
277     test("", 1, 0, "abcdefghijklmnopqrst", 10, 10, 0);
278     test("", 1, 0, "abcdefghijklmnopqrst", 10, 11, 0);
279     test("", 1, 0, "abcdefghijklmnopqrst", 19, 0, 0);
280     test("", 1, 0, "abcdefghijklmnopqrst", 19, 1, 0);
281     test("", 1, 0, "abcdefghijklmnopqrst", 19, 2, 0);
282     test("", 1, 0, "abcdefghijklmnopqrst", 20, 0, 0);
283     test("", 1, 0, "abcdefghijklmnopqrst", 20, 1, 0);
284     test("", 1, 0, "abcdefghijklmnopqrst", 21, 0, 0);
285     test("abcde", 0, 0, "", 0, 0, 0);
286     test("abcde", 0, 0, "", 0, 1, 0);
287     test("abcde", 0, 0, "", 1, 0, 0);
288     test("abcde", 0, 0, "abcde", 0, 0, 0);
289     test("abcde", 0, 0, "abcde", 0, 1, -1);
290     test("abcde", 0, 0, "abcde", 0, 2, -2);
291     test("abcde", 0, 0, "abcde", 0, 4, -4);
292     test("abcde", 0, 0, "abcde", 0, 5, -5);
293     test("abcde", 0, 0, "abcde", 0, 6, -5);
294     test("abcde", 0, 0, "abcde", 1, 0, 0);
295     test("abcde", 0, 0, "abcde", 1, 1, -1);
296     test("abcde", 0, 0, "abcde", 1, 2, -2);
297     test("abcde", 0, 0, "abcde", 1, 3, -3);
298     test("abcde", 0, 0, "abcde", 1, 4, -4);
299     test("abcde", 0, 0, "abcde", 1, 5, -4);
300     test("abcde", 0, 0, "abcde", 2, 0, 0);
301     test("abcde", 0, 0, "abcde", 2, 1, -1);
302     test("abcde", 0, 0, "abcde", 2, 2, -2);
303     test("abcde", 0, 0, "abcde", 2, 3, -3);
304     test("abcde", 0, 0, "abcde", 2, 4, -3);
305     test("abcde", 0, 0, "abcde", 4, 0, 0);
306     test("abcde", 0, 0, "abcde", 4, 1, -1);
307     test("abcde", 0, 0, "abcde", 4, 2, -1);
308     test("abcde", 0, 0, "abcde", 5, 0, 0);
309     test("abcde", 0, 0, "abcde", 5, 1, 0);
310     test("abcde", 0, 0, "abcde", 6, 0, 0);
311     test("abcde", 0, 0, "abcdefghij", 0, 0, 0);
312     test("abcde", 0, 0, "abcdefghij", 0, 1, -1);
313     test("abcde", 0, 0, "abcdefghij", 0, 5, -5);
314     test("abcde", 0, 0, "abcdefghij", 0, 9, -9);
315     test("abcde", 0, 0, "abcdefghij", 0, 10, -10);
316     test("abcde", 0, 0, "abcdefghij", 0, 11, -10);
317     test("abcde", 0, 0, "abcdefghij", 1, 0, 0);
318     test("abcde", 0, 0, "abcdefghij", 1, 1, -1);
319     test("abcde", 0, 0, "abcdefghij", 1, 4, -4);
320     test("abcde", 0, 0, "abcdefghij", 1, 8, -8);
321     test("abcde", 0, 0, "abcdefghij", 1, 9, -9);
322     test("abcde", 0, 0, "abcdefghij", 1, 10, -9);
323     test("abcde", 0, 0, "abcdefghij", 5, 0, 0);
324     test("abcde", 0, 0, "abcdefghij", 5, 1, -1);
325     test("abcde", 0, 0, "abcdefghij", 5, 2, -2);
326     test("abcde", 0, 0, "abcdefghij", 5, 4, -4);
327     test("abcde", 0, 0, "abcdefghij", 5, 5, -5);
328     test("abcde", 0, 0, "abcdefghij", 5, 6, -5);
329     test("abcde", 0, 0, "abcdefghij", 9, 0, 0);
330     test("abcde", 0, 0, "abcdefghij", 9, 1, -1);
331     test("abcde", 0, 0, "abcdefghij", 9, 2, -1);
332     test("abcde", 0, 0, "abcdefghij", 10, 0, 0);
333     test("abcde", 0, 0, "abcdefghij", 10, 1, 0);
334     test("abcde", 0, 0, "abcdefghij", 11, 0, 0);
335     test("abcde", 0, 0, "abcdefghijklmnopqrst", 0, 0, 0);
336     test("abcde", 0, 0, "abcdefghijklmnopqrst", 0, 1, -1);
337     test("abcde", 0, 0, "abcdefghijklmnopqrst", 0, 10, -10);
338     test("abcde", 0, 0, "abcdefghijklmnopqrst", 0, 19, -19);
339     test("abcde", 0, 0, "abcdefghijklmnopqrst", 0, 20, -20);
340     test("abcde", 0, 0, "abcdefghijklmnopqrst", 0, 21, -20);
341     test("abcde", 0, 0, "abcdefghijklmnopqrst", 1, 0, 0);
342     test("abcde", 0, 0, "abcdefghijklmnopqrst", 1, 1, -1);
343     test("abcde", 0, 0, "abcdefghijklmnopqrst", 1, 9, -9);
344     test("abcde", 0, 0, "abcdefghijklmnopqrst", 1, 18, -18);
345     test("abcde", 0, 0, "abcdefghijklmnopqrst", 1, 19, -19);
346     test("abcde", 0, 0, "abcdefghijklmnopqrst", 1, 20, -19);
347     test("abcde", 0, 0, "abcdefghijklmnopqrst", 10, 0, 0);
348     test("abcde", 0, 0, "abcdefghijklmnopqrst", 10, 1, -1);
349     test("abcde", 0, 0, "abcdefghijklmnopqrst", 10, 5, -5);
350     test("abcde", 0, 0, "abcdefghijklmnopqrst", 10, 9, -9);
351     test("abcde", 0, 0, "abcdefghijklmnopqrst", 10, 10, -10);
352     test("abcde", 0, 0, "abcdefghijklmnopqrst", 10, 11, -10);
353     test("abcde", 0, 0, "abcdefghijklmnopqrst", 19, 0, 0);
354     test("abcde", 0, 0, "abcdefghijklmnopqrst", 19, 1, -1);
355     test("abcde", 0, 0, "abcdefghijklmnopqrst", 19, 2, -1);
356     test("abcde", 0, 0, "abcdefghijklmnopqrst", 20, 0, 0);
357     test("abcde", 0, 0, "abcdefghijklmnopqrst", 20, 1, 0);
358     test("abcde", 0, 0, "abcdefghijklmnopqrst", 21, 0, 0);
359     test("abcde", 0, 1, "", 0, 0, 1);
360     test("abcde", 0, 1, "", 0, 1, 1);
361     test("abcde", 0, 1, "", 1, 0, 0);
362     test("abcde", 0, 1, "abcde", 0, 0, 1);
363 }
364 
test3()365 void test3()
366 {
367     test("abcde", 0, 1, "abcde", 0, 1, 0);
368     test("abcde", 0, 1, "abcde", 0, 2, -1);
369     test("abcde", 0, 1, "abcde", 0, 4, -3);
370     test("abcde", 0, 1, "abcde", 0, 5, -4);
371     test("abcde", 0, 1, "abcde", 0, 6, -4);
372     test("abcde", 0, 1, "abcde", 1, 0, 1);
373     test("abcde", 0, 1, "abcde", 1, 1, -1);
374     test("abcde", 0, 1, "abcde", 1, 2, -1);
375     test("abcde", 0, 1, "abcde", 1, 3, -1);
376     test("abcde", 0, 1, "abcde", 1, 4, -1);
377     test("abcde", 0, 1, "abcde", 1, 5, -1);
378     test("abcde", 0, 1, "abcde", 2, 0, 1);
379     test("abcde", 0, 1, "abcde", 2, 1, -2);
380     test("abcde", 0, 1, "abcde", 2, 2, -2);
381     test("abcde", 0, 1, "abcde", 2, 3, -2);
382     test("abcde", 0, 1, "abcde", 2, 4, -2);
383     test("abcde", 0, 1, "abcde", 4, 0, 1);
384     test("abcde", 0, 1, "abcde", 4, 1, -4);
385     test("abcde", 0, 1, "abcde", 4, 2, -4);
386     test("abcde", 0, 1, "abcde", 5, 0, 1);
387     test("abcde", 0, 1, "abcde", 5, 1, 1);
388     test("abcde", 0, 1, "abcde", 6, 0, 0);
389     test("abcde", 0, 1, "abcdefghij", 0, 0, 1);
390     test("abcde", 0, 1, "abcdefghij", 0, 1, 0);
391     test("abcde", 0, 1, "abcdefghij", 0, 5, -4);
392     test("abcde", 0, 1, "abcdefghij", 0, 9, -8);
393     test("abcde", 0, 1, "abcdefghij", 0, 10, -9);
394     test("abcde", 0, 1, "abcdefghij", 0, 11, -9);
395     test("abcde", 0, 1, "abcdefghij", 1, 0, 1);
396     test("abcde", 0, 1, "abcdefghij", 1, 1, -1);
397     test("abcde", 0, 1, "abcdefghij", 1, 4, -1);
398     test("abcde", 0, 1, "abcdefghij", 1, 8, -1);
399     test("abcde", 0, 1, "abcdefghij", 1, 9, -1);
400     test("abcde", 0, 1, "abcdefghij", 1, 10, -1);
401     test("abcde", 0, 1, "abcdefghij", 5, 0, 1);
402     test("abcde", 0, 1, "abcdefghij", 5, 1, -5);
403     test("abcde", 0, 1, "abcdefghij", 5, 2, -5);
404     test("abcde", 0, 1, "abcdefghij", 5, 4, -5);
405     test("abcde", 0, 1, "abcdefghij", 5, 5, -5);
406     test("abcde", 0, 1, "abcdefghij", 5, 6, -5);
407     test("abcde", 0, 1, "abcdefghij", 9, 0, 1);
408     test("abcde", 0, 1, "abcdefghij", 9, 1, -9);
409     test("abcde", 0, 1, "abcdefghij", 9, 2, -9);
410     test("abcde", 0, 1, "abcdefghij", 10, 0, 1);
411     test("abcde", 0, 1, "abcdefghij", 10, 1, 1);
412     test("abcde", 0, 1, "abcdefghij", 11, 0, 0);
413     test("abcde", 0, 1, "abcdefghijklmnopqrst", 0, 0, 1);
414     test("abcde", 0, 1, "abcdefghijklmnopqrst", 0, 1, 0);
415     test("abcde", 0, 1, "abcdefghijklmnopqrst", 0, 10, -9);
416     test("abcde", 0, 1, "abcdefghijklmnopqrst", 0, 19, -18);
417     test("abcde", 0, 1, "abcdefghijklmnopqrst", 0, 20, -19);
418     test("abcde", 0, 1, "abcdefghijklmnopqrst", 0, 21, -19);
419     test("abcde", 0, 1, "abcdefghijklmnopqrst", 1, 0, 1);
420     test("abcde", 0, 1, "abcdefghijklmnopqrst", 1, 1, -1);
421     test("abcde", 0, 1, "abcdefghijklmnopqrst", 1, 9, -1);
422     test("abcde", 0, 1, "abcdefghijklmnopqrst", 1, 18, -1);
423     test("abcde", 0, 1, "abcdefghijklmnopqrst", 1, 19, -1);
424     test("abcde", 0, 1, "abcdefghijklmnopqrst", 1, 20, -1);
425     test("abcde", 0, 1, "abcdefghijklmnopqrst", 10, 0, 1);
426     test("abcde", 0, 1, "abcdefghijklmnopqrst", 10, 1, -10);
427     test("abcde", 0, 1, "abcdefghijklmnopqrst", 10, 5, -10);
428     test("abcde", 0, 1, "abcdefghijklmnopqrst", 10, 9, -10);
429     test("abcde", 0, 1, "abcdefghijklmnopqrst", 10, 10, -10);
430     test("abcde", 0, 1, "abcdefghijklmnopqrst", 10, 11, -10);
431     test("abcde", 0, 1, "abcdefghijklmnopqrst", 19, 0, 1);
432     test("abcde", 0, 1, "abcdefghijklmnopqrst", 19, 1, -19);
433     test("abcde", 0, 1, "abcdefghijklmnopqrst", 19, 2, -19);
434     test("abcde", 0, 1, "abcdefghijklmnopqrst", 20, 0, 1);
435     test("abcde", 0, 1, "abcdefghijklmnopqrst", 20, 1, 1);
436     test("abcde", 0, 1, "abcdefghijklmnopqrst", 21, 0, 0);
437     test("abcde", 0, 2, "", 0, 0, 2);
438     test("abcde", 0, 2, "", 0, 1, 2);
439     test("abcde", 0, 2, "", 1, 0, 0);
440     test("abcde", 0, 2, "abcde", 0, 0, 2);
441     test("abcde", 0, 2, "abcde", 0, 1, 1);
442     test("abcde", 0, 2, "abcde", 0, 2, 0);
443     test("abcde", 0, 2, "abcde", 0, 4, -2);
444     test("abcde", 0, 2, "abcde", 0, 5, -3);
445     test("abcde", 0, 2, "abcde", 0, 6, -3);
446     test("abcde", 0, 2, "abcde", 1, 0, 2);
447     test("abcde", 0, 2, "abcde", 1, 1, -1);
448     test("abcde", 0, 2, "abcde", 1, 2, -1);
449     test("abcde", 0, 2, "abcde", 1, 3, -1);
450     test("abcde", 0, 2, "abcde", 1, 4, -1);
451     test("abcde", 0, 2, "abcde", 1, 5, -1);
452     test("abcde", 0, 2, "abcde", 2, 0, 2);
453     test("abcde", 0, 2, "abcde", 2, 1, -2);
454     test("abcde", 0, 2, "abcde", 2, 2, -2);
455     test("abcde", 0, 2, "abcde", 2, 3, -2);
456     test("abcde", 0, 2, "abcde", 2, 4, -2);
457     test("abcde", 0, 2, "abcde", 4, 0, 2);
458     test("abcde", 0, 2, "abcde", 4, 1, -4);
459     test("abcde", 0, 2, "abcde", 4, 2, -4);
460     test("abcde", 0, 2, "abcde", 5, 0, 2);
461     test("abcde", 0, 2, "abcde", 5, 1, 2);
462     test("abcde", 0, 2, "abcde", 6, 0, 0);
463     test("abcde", 0, 2, "abcdefghij", 0, 0, 2);
464     test("abcde", 0, 2, "abcdefghij", 0, 1, 1);
465     test("abcde", 0, 2, "abcdefghij", 0, 5, -3);
466     test("abcde", 0, 2, "abcdefghij", 0, 9, -7);
467 }
468 
test4()469 void test4()
470 {
471     test("abcde", 0, 2, "abcdefghij", 0, 10, -8);
472     test("abcde", 0, 2, "abcdefghij", 0, 11, -8);
473     test("abcde", 0, 2, "abcdefghij", 1, 0, 2);
474     test("abcde", 0, 2, "abcdefghij", 1, 1, -1);
475     test("abcde", 0, 2, "abcdefghij", 1, 4, -1);
476     test("abcde", 0, 2, "abcdefghij", 1, 8, -1);
477     test("abcde", 0, 2, "abcdefghij", 1, 9, -1);
478     test("abcde", 0, 2, "abcdefghij", 1, 10, -1);
479     test("abcde", 0, 2, "abcdefghij", 5, 0, 2);
480     test("abcde", 0, 2, "abcdefghij", 5, 1, -5);
481     test("abcde", 0, 2, "abcdefghij", 5, 2, -5);
482     test("abcde", 0, 2, "abcdefghij", 5, 4, -5);
483     test("abcde", 0, 2, "abcdefghij", 5, 5, -5);
484     test("abcde", 0, 2, "abcdefghij", 5, 6, -5);
485     test("abcde", 0, 2, "abcdefghij", 9, 0, 2);
486     test("abcde", 0, 2, "abcdefghij", 9, 1, -9);
487     test("abcde", 0, 2, "abcdefghij", 9, 2, -9);
488     test("abcde", 0, 2, "abcdefghij", 10, 0, 2);
489     test("abcde", 0, 2, "abcdefghij", 10, 1, 2);
490     test("abcde", 0, 2, "abcdefghij", 11, 0, 0);
491     test("abcde", 0, 2, "abcdefghijklmnopqrst", 0, 0, 2);
492     test("abcde", 0, 2, "abcdefghijklmnopqrst", 0, 1, 1);
493     test("abcde", 0, 2, "abcdefghijklmnopqrst", 0, 10, -8);
494     test("abcde", 0, 2, "abcdefghijklmnopqrst", 0, 19, -17);
495     test("abcde", 0, 2, "abcdefghijklmnopqrst", 0, 20, -18);
496     test("abcde", 0, 2, "abcdefghijklmnopqrst", 0, 21, -18);
497     test("abcde", 0, 2, "abcdefghijklmnopqrst", 1, 0, 2);
498     test("abcde", 0, 2, "abcdefghijklmnopqrst", 1, 1, -1);
499     test("abcde", 0, 2, "abcdefghijklmnopqrst", 1, 9, -1);
500     test("abcde", 0, 2, "abcdefghijklmnopqrst", 1, 18, -1);
501     test("abcde", 0, 2, "abcdefghijklmnopqrst", 1, 19, -1);
502     test("abcde", 0, 2, "abcdefghijklmnopqrst", 1, 20, -1);
503     test("abcde", 0, 2, "abcdefghijklmnopqrst", 10, 0, 2);
504     test("abcde", 0, 2, "abcdefghijklmnopqrst", 10, 1, -10);
505     test("abcde", 0, 2, "abcdefghijklmnopqrst", 10, 5, -10);
506     test("abcde", 0, 2, "abcdefghijklmnopqrst", 10, 9, -10);
507     test("abcde", 0, 2, "abcdefghijklmnopqrst", 10, 10, -10);
508     test("abcde", 0, 2, "abcdefghijklmnopqrst", 10, 11, -10);
509     test("abcde", 0, 2, "abcdefghijklmnopqrst", 19, 0, 2);
510     test("abcde", 0, 2, "abcdefghijklmnopqrst", 19, 1, -19);
511     test("abcde", 0, 2, "abcdefghijklmnopqrst", 19, 2, -19);
512     test("abcde", 0, 2, "abcdefghijklmnopqrst", 20, 0, 2);
513     test("abcde", 0, 2, "abcdefghijklmnopqrst", 20, 1, 2);
514     test("abcde", 0, 2, "abcdefghijklmnopqrst", 21, 0, 0);
515     test("abcde", 0, 4, "", 0, 0, 4);
516     test("abcde", 0, 4, "", 0, 1, 4);
517     test("abcde", 0, 4, "", 1, 0, 0);
518     test("abcde", 0, 4, "abcde", 0, 0, 4);
519     test("abcde", 0, 4, "abcde", 0, 1, 3);
520     test("abcde", 0, 4, "abcde", 0, 2, 2);
521     test("abcde", 0, 4, "abcde", 0, 4, 0);
522     test("abcde", 0, 4, "abcde", 0, 5, -1);
523     test("abcde", 0, 4, "abcde", 0, 6, -1);
524     test("abcde", 0, 4, "abcde", 1, 0, 4);
525     test("abcde", 0, 4, "abcde", 1, 1, -1);
526     test("abcde", 0, 4, "abcde", 1, 2, -1);
527     test("abcde", 0, 4, "abcde", 1, 3, -1);
528     test("abcde", 0, 4, "abcde", 1, 4, -1);
529     test("abcde", 0, 4, "abcde", 1, 5, -1);
530     test("abcde", 0, 4, "abcde", 2, 0, 4);
531     test("abcde", 0, 4, "abcde", 2, 1, -2);
532     test("abcde", 0, 4, "abcde", 2, 2, -2);
533     test("abcde", 0, 4, "abcde", 2, 3, -2);
534     test("abcde", 0, 4, "abcde", 2, 4, -2);
535     test("abcde", 0, 4, "abcde", 4, 0, 4);
536     test("abcde", 0, 4, "abcde", 4, 1, -4);
537     test("abcde", 0, 4, "abcde", 4, 2, -4);
538     test("abcde", 0, 4, "abcde", 5, 0, 4);
539     test("abcde", 0, 4, "abcde", 5, 1, 4);
540     test("abcde", 0, 4, "abcde", 6, 0, 0);
541     test("abcde", 0, 4, "abcdefghij", 0, 0, 4);
542     test("abcde", 0, 4, "abcdefghij", 0, 1, 3);
543     test("abcde", 0, 4, "abcdefghij", 0, 5, -1);
544     test("abcde", 0, 4, "abcdefghij", 0, 9, -5);
545     test("abcde", 0, 4, "abcdefghij", 0, 10, -6);
546     test("abcde", 0, 4, "abcdefghij", 0, 11, -6);
547     test("abcde", 0, 4, "abcdefghij", 1, 0, 4);
548     test("abcde", 0, 4, "abcdefghij", 1, 1, -1);
549     test("abcde", 0, 4, "abcdefghij", 1, 4, -1);
550     test("abcde", 0, 4, "abcdefghij", 1, 8, -1);
551     test("abcde", 0, 4, "abcdefghij", 1, 9, -1);
552     test("abcde", 0, 4, "abcdefghij", 1, 10, -1);
553     test("abcde", 0, 4, "abcdefghij", 5, 0, 4);
554     test("abcde", 0, 4, "abcdefghij", 5, 1, -5);
555     test("abcde", 0, 4, "abcdefghij", 5, 2, -5);
556     test("abcde", 0, 4, "abcdefghij", 5, 4, -5);
557     test("abcde", 0, 4, "abcdefghij", 5, 5, -5);
558     test("abcde", 0, 4, "abcdefghij", 5, 6, -5);
559     test("abcde", 0, 4, "abcdefghij", 9, 0, 4);
560     test("abcde", 0, 4, "abcdefghij", 9, 1, -9);
561     test("abcde", 0, 4, "abcdefghij", 9, 2, -9);
562     test("abcde", 0, 4, "abcdefghij", 10, 0, 4);
563     test("abcde", 0, 4, "abcdefghij", 10, 1, 4);
564     test("abcde", 0, 4, "abcdefghij", 11, 0, 0);
565     test("abcde", 0, 4, "abcdefghijklmnopqrst", 0, 0, 4);
566     test("abcde", 0, 4, "abcdefghijklmnopqrst", 0, 1, 3);
567     test("abcde", 0, 4, "abcdefghijklmnopqrst", 0, 10, -6);
568     test("abcde", 0, 4, "abcdefghijklmnopqrst", 0, 19, -15);
569     test("abcde", 0, 4, "abcdefghijklmnopqrst", 0, 20, -16);
570     test("abcde", 0, 4, "abcdefghijklmnopqrst", 0, 21, -16);
571 }
572 
test5()573 void test5()
574 {
575     test("abcde", 0, 4, "abcdefghijklmnopqrst", 1, 0, 4);
576     test("abcde", 0, 4, "abcdefghijklmnopqrst", 1, 1, -1);
577     test("abcde", 0, 4, "abcdefghijklmnopqrst", 1, 9, -1);
578     test("abcde", 0, 4, "abcdefghijklmnopqrst", 1, 18, -1);
579     test("abcde", 0, 4, "abcdefghijklmnopqrst", 1, 19, -1);
580     test("abcde", 0, 4, "abcdefghijklmnopqrst", 1, 20, -1);
581     test("abcde", 0, 4, "abcdefghijklmnopqrst", 10, 0, 4);
582     test("abcde", 0, 4, "abcdefghijklmnopqrst", 10, 1, -10);
583     test("abcde", 0, 4, "abcdefghijklmnopqrst", 10, 5, -10);
584     test("abcde", 0, 4, "abcdefghijklmnopqrst", 10, 9, -10);
585     test("abcde", 0, 4, "abcdefghijklmnopqrst", 10, 10, -10);
586     test("abcde", 0, 4, "abcdefghijklmnopqrst", 10, 11, -10);
587     test("abcde", 0, 4, "abcdefghijklmnopqrst", 19, 0, 4);
588     test("abcde", 0, 4, "abcdefghijklmnopqrst", 19, 1, -19);
589     test("abcde", 0, 4, "abcdefghijklmnopqrst", 19, 2, -19);
590     test("abcde", 0, 4, "abcdefghijklmnopqrst", 20, 0, 4);
591     test("abcde", 0, 4, "abcdefghijklmnopqrst", 20, 1, 4);
592     test("abcde", 0, 4, "abcdefghijklmnopqrst", 21, 0, 0);
593     test("abcde", 0, 5, "", 0, 0, 5);
594     test("abcde", 0, 5, "", 0, 1, 5);
595     test("abcde", 0, 5, "", 1, 0, 0);
596     test("abcde", 0, 5, "abcde", 0, 0, 5);
597     test("abcde", 0, 5, "abcde", 0, 1, 4);
598     test("abcde", 0, 5, "abcde", 0, 2, 3);
599     test("abcde", 0, 5, "abcde", 0, 4, 1);
600     test("abcde", 0, 5, "abcde", 0, 5, 0);
601     test("abcde", 0, 5, "abcde", 0, 6, 0);
602     test("abcde", 0, 5, "abcde", 1, 0, 5);
603     test("abcde", 0, 5, "abcde", 1, 1, -1);
604     test("abcde", 0, 5, "abcde", 1, 2, -1);
605     test("abcde", 0, 5, "abcde", 1, 3, -1);
606     test("abcde", 0, 5, "abcde", 1, 4, -1);
607     test("abcde", 0, 5, "abcde", 1, 5, -1);
608     test("abcde", 0, 5, "abcde", 2, 0, 5);
609     test("abcde", 0, 5, "abcde", 2, 1, -2);
610     test("abcde", 0, 5, "abcde", 2, 2, -2);
611     test("abcde", 0, 5, "abcde", 2, 3, -2);
612     test("abcde", 0, 5, "abcde", 2, 4, -2);
613     test("abcde", 0, 5, "abcde", 4, 0, 5);
614     test("abcde", 0, 5, "abcde", 4, 1, -4);
615     test("abcde", 0, 5, "abcde", 4, 2, -4);
616     test("abcde", 0, 5, "abcde", 5, 0, 5);
617     test("abcde", 0, 5, "abcde", 5, 1, 5);
618     test("abcde", 0, 5, "abcde", 6, 0, 0);
619     test("abcde", 0, 5, "abcdefghij", 0, 0, 5);
620     test("abcde", 0, 5, "abcdefghij", 0, 1, 4);
621     test("abcde", 0, 5, "abcdefghij", 0, 5, 0);
622     test("abcde", 0, 5, "abcdefghij", 0, 9, -4);
623     test("abcde", 0, 5, "abcdefghij", 0, 10, -5);
624     test("abcde", 0, 5, "abcdefghij", 0, 11, -5);
625     test("abcde", 0, 5, "abcdefghij", 1, 0, 5);
626     test("abcde", 0, 5, "abcdefghij", 1, 1, -1);
627     test("abcde", 0, 5, "abcdefghij", 1, 4, -1);
628     test("abcde", 0, 5, "abcdefghij", 1, 8, -1);
629     test("abcde", 0, 5, "abcdefghij", 1, 9, -1);
630     test("abcde", 0, 5, "abcdefghij", 1, 10, -1);
631     test("abcde", 0, 5, "abcdefghij", 5, 0, 5);
632     test("abcde", 0, 5, "abcdefghij", 5, 1, -5);
633     test("abcde", 0, 5, "abcdefghij", 5, 2, -5);
634     test("abcde", 0, 5, "abcdefghij", 5, 4, -5);
635     test("abcde", 0, 5, "abcdefghij", 5, 5, -5);
636     test("abcde", 0, 5, "abcdefghij", 5, 6, -5);
637     test("abcde", 0, 5, "abcdefghij", 9, 0, 5);
638     test("abcde", 0, 5, "abcdefghij", 9, 1, -9);
639     test("abcde", 0, 5, "abcdefghij", 9, 2, -9);
640     test("abcde", 0, 5, "abcdefghij", 10, 0, 5);
641     test("abcde", 0, 5, "abcdefghij", 10, 1, 5);
642     test("abcde", 0, 5, "abcdefghij", 11, 0, 0);
643     test("abcde", 0, 5, "abcdefghijklmnopqrst", 0, 0, 5);
644     test("abcde", 0, 5, "abcdefghijklmnopqrst", 0, 1, 4);
645     test("abcde", 0, 5, "abcdefghijklmnopqrst", 0, 10, -5);
646     test("abcde", 0, 5, "abcdefghijklmnopqrst", 0, 19, -14);
647     test("abcde", 0, 5, "abcdefghijklmnopqrst", 0, 20, -15);
648     test("abcde", 0, 5, "abcdefghijklmnopqrst", 0, 21, -15);
649     test("abcde", 0, 5, "abcdefghijklmnopqrst", 1, 0, 5);
650     test("abcde", 0, 5, "abcdefghijklmnopqrst", 1, 1, -1);
651     test("abcde", 0, 5, "abcdefghijklmnopqrst", 1, 9, -1);
652     test("abcde", 0, 5, "abcdefghijklmnopqrst", 1, 18, -1);
653     test("abcde", 0, 5, "abcdefghijklmnopqrst", 1, 19, -1);
654     test("abcde", 0, 5, "abcdefghijklmnopqrst", 1, 20, -1);
655     test("abcde", 0, 5, "abcdefghijklmnopqrst", 10, 0, 5);
656     test("abcde", 0, 5, "abcdefghijklmnopqrst", 10, 1, -10);
657     test("abcde", 0, 5, "abcdefghijklmnopqrst", 10, 5, -10);
658     test("abcde", 0, 5, "abcdefghijklmnopqrst", 10, 9, -10);
659     test("abcde", 0, 5, "abcdefghijklmnopqrst", 10, 10, -10);
660     test("abcde", 0, 5, "abcdefghijklmnopqrst", 10, 11, -10);
661     test("abcde", 0, 5, "abcdefghijklmnopqrst", 19, 0, 5);
662     test("abcde", 0, 5, "abcdefghijklmnopqrst", 19, 1, -19);
663     test("abcde", 0, 5, "abcdefghijklmnopqrst", 19, 2, -19);
664     test("abcde", 0, 5, "abcdefghijklmnopqrst", 20, 0, 5);
665     test("abcde", 0, 5, "abcdefghijklmnopqrst", 20, 1, 5);
666     test("abcde", 0, 5, "abcdefghijklmnopqrst", 21, 0, 0);
667     test("abcde", 0, 6, "", 0, 0, 5);
668     test("abcde", 0, 6, "", 0, 1, 5);
669     test("abcde", 0, 6, "", 1, 0, 0);
670     test("abcde", 0, 6, "abcde", 0, 0, 5);
671     test("abcde", 0, 6, "abcde", 0, 1, 4);
672     test("abcde", 0, 6, "abcde", 0, 2, 3);
673     test("abcde", 0, 6, "abcde", 0, 4, 1);
674     test("abcde", 0, 6, "abcde", 0, 5, 0);
675 }
676 
test6()677 void test6()
678 {
679     test("abcde", 0, 6, "abcde", 0, 6, 0);
680     test("abcde", 0, 6, "abcde", 1, 0, 5);
681     test("abcde", 0, 6, "abcde", 1, 1, -1);
682     test("abcde", 0, 6, "abcde", 1, 2, -1);
683     test("abcde", 0, 6, "abcde", 1, 3, -1);
684     test("abcde", 0, 6, "abcde", 1, 4, -1);
685     test("abcde", 0, 6, "abcde", 1, 5, -1);
686     test("abcde", 0, 6, "abcde", 2, 0, 5);
687     test("abcde", 0, 6, "abcde", 2, 1, -2);
688     test("abcde", 0, 6, "abcde", 2, 2, -2);
689     test("abcde", 0, 6, "abcde", 2, 3, -2);
690     test("abcde", 0, 6, "abcde", 2, 4, -2);
691     test("abcde", 0, 6, "abcde", 4, 0, 5);
692     test("abcde", 0, 6, "abcde", 4, 1, -4);
693     test("abcde", 0, 6, "abcde", 4, 2, -4);
694     test("abcde", 0, 6, "abcde", 5, 0, 5);
695     test("abcde", 0, 6, "abcde", 5, 1, 5);
696     test("abcde", 0, 6, "abcde", 6, 0, 0);
697     test("abcde", 0, 6, "abcdefghij", 0, 0, 5);
698     test("abcde", 0, 6, "abcdefghij", 0, 1, 4);
699     test("abcde", 0, 6, "abcdefghij", 0, 5, 0);
700     test("abcde", 0, 6, "abcdefghij", 0, 9, -4);
701     test("abcde", 0, 6, "abcdefghij", 0, 10, -5);
702     test("abcde", 0, 6, "abcdefghij", 0, 11, -5);
703     test("abcde", 0, 6, "abcdefghij", 1, 0, 5);
704     test("abcde", 0, 6, "abcdefghij", 1, 1, -1);
705     test("abcde", 0, 6, "abcdefghij", 1, 4, -1);
706     test("abcde", 0, 6, "abcdefghij", 1, 8, -1);
707     test("abcde", 0, 6, "abcdefghij", 1, 9, -1);
708     test("abcde", 0, 6, "abcdefghij", 1, 10, -1);
709     test("abcde", 0, 6, "abcdefghij", 5, 0, 5);
710     test("abcde", 0, 6, "abcdefghij", 5, 1, -5);
711     test("abcde", 0, 6, "abcdefghij", 5, 2, -5);
712     test("abcde", 0, 6, "abcdefghij", 5, 4, -5);
713     test("abcde", 0, 6, "abcdefghij", 5, 5, -5);
714     test("abcde", 0, 6, "abcdefghij", 5, 6, -5);
715     test("abcde", 0, 6, "abcdefghij", 9, 0, 5);
716     test("abcde", 0, 6, "abcdefghij", 9, 1, -9);
717     test("abcde", 0, 6, "abcdefghij", 9, 2, -9);
718     test("abcde", 0, 6, "abcdefghij", 10, 0, 5);
719     test("abcde", 0, 6, "abcdefghij", 10, 1, 5);
720     test("abcde", 0, 6, "abcdefghij", 11, 0, 0);
721     test("abcde", 0, 6, "abcdefghijklmnopqrst", 0, 0, 5);
722     test("abcde", 0, 6, "abcdefghijklmnopqrst", 0, 1, 4);
723     test("abcde", 0, 6, "abcdefghijklmnopqrst", 0, 10, -5);
724     test("abcde", 0, 6, "abcdefghijklmnopqrst", 0, 19, -14);
725     test("abcde", 0, 6, "abcdefghijklmnopqrst", 0, 20, -15);
726     test("abcde", 0, 6, "abcdefghijklmnopqrst", 0, 21, -15);
727     test("abcde", 0, 6, "abcdefghijklmnopqrst", 1, 0, 5);
728     test("abcde", 0, 6, "abcdefghijklmnopqrst", 1, 1, -1);
729     test("abcde", 0, 6, "abcdefghijklmnopqrst", 1, 9, -1);
730     test("abcde", 0, 6, "abcdefghijklmnopqrst", 1, 18, -1);
731     test("abcde", 0, 6, "abcdefghijklmnopqrst", 1, 19, -1);
732     test("abcde", 0, 6, "abcdefghijklmnopqrst", 1, 20, -1);
733     test("abcde", 0, 6, "abcdefghijklmnopqrst", 10, 0, 5);
734     test("abcde", 0, 6, "abcdefghijklmnopqrst", 10, 1, -10);
735     test("abcde", 0, 6, "abcdefghijklmnopqrst", 10, 5, -10);
736     test("abcde", 0, 6, "abcdefghijklmnopqrst", 10, 9, -10);
737     test("abcde", 0, 6, "abcdefghijklmnopqrst", 10, 10, -10);
738     test("abcde", 0, 6, "abcdefghijklmnopqrst", 10, 11, -10);
739     test("abcde", 0, 6, "abcdefghijklmnopqrst", 19, 0, 5);
740     test("abcde", 0, 6, "abcdefghijklmnopqrst", 19, 1, -19);
741     test("abcde", 0, 6, "abcdefghijklmnopqrst", 19, 2, -19);
742     test("abcde", 0, 6, "abcdefghijklmnopqrst", 20, 0, 5);
743     test("abcde", 0, 6, "abcdefghijklmnopqrst", 20, 1, 5);
744     test("abcde", 0, 6, "abcdefghijklmnopqrst", 21, 0, 0);
745     test("abcde", 1, 0, "", 0, 0, 0);
746     test("abcde", 1, 0, "", 0, 1, 0);
747     test("abcde", 1, 0, "", 1, 0, 0);
748     test("abcde", 1, 0, "abcde", 0, 0, 0);
749     test("abcde", 1, 0, "abcde", 0, 1, -1);
750     test("abcde", 1, 0, "abcde", 0, 2, -2);
751     test("abcde", 1, 0, "abcde", 0, 4, -4);
752     test("abcde", 1, 0, "abcde", 0, 5, -5);
753     test("abcde", 1, 0, "abcde", 0, 6, -5);
754     test("abcde", 1, 0, "abcde", 1, 0, 0);
755     test("abcde", 1, 0, "abcde", 1, 1, -1);
756     test("abcde", 1, 0, "abcde", 1, 2, -2);
757     test("abcde", 1, 0, "abcde", 1, 3, -3);
758     test("abcde", 1, 0, "abcde", 1, 4, -4);
759     test("abcde", 1, 0, "abcde", 1, 5, -4);
760     test("abcde", 1, 0, "abcde", 2, 0, 0);
761     test("abcde", 1, 0, "abcde", 2, 1, -1);
762     test("abcde", 1, 0, "abcde", 2, 2, -2);
763     test("abcde", 1, 0, "abcde", 2, 3, -3);
764     test("abcde", 1, 0, "abcde", 2, 4, -3);
765     test("abcde", 1, 0, "abcde", 4, 0, 0);
766     test("abcde", 1, 0, "abcde", 4, 1, -1);
767     test("abcde", 1, 0, "abcde", 4, 2, -1);
768     test("abcde", 1, 0, "abcde", 5, 0, 0);
769     test("abcde", 1, 0, "abcde", 5, 1, 0);
770     test("abcde", 1, 0, "abcde", 6, 0, 0);
771     test("abcde", 1, 0, "abcdefghij", 0, 0, 0);
772     test("abcde", 1, 0, "abcdefghij", 0, 1, -1);
773     test("abcde", 1, 0, "abcdefghij", 0, 5, -5);
774     test("abcde", 1, 0, "abcdefghij", 0, 9, -9);
775     test("abcde", 1, 0, "abcdefghij", 0, 10, -10);
776     test("abcde", 1, 0, "abcdefghij", 0, 11, -10);
777     test("abcde", 1, 0, "abcdefghij", 1, 0, 0);
778     test("abcde", 1, 0, "abcdefghij", 1, 1, -1);
779 }
780 
test7()781 void test7()
782 {
783     test("abcde", 1, 0, "abcdefghij", 1, 4, -4);
784     test("abcde", 1, 0, "abcdefghij", 1, 8, -8);
785     test("abcde", 1, 0, "abcdefghij", 1, 9, -9);
786     test("abcde", 1, 0, "abcdefghij", 1, 10, -9);
787     test("abcde", 1, 0, "abcdefghij", 5, 0, 0);
788     test("abcde", 1, 0, "abcdefghij", 5, 1, -1);
789     test("abcde", 1, 0, "abcdefghij", 5, 2, -2);
790     test("abcde", 1, 0, "abcdefghij", 5, 4, -4);
791     test("abcde", 1, 0, "abcdefghij", 5, 5, -5);
792     test("abcde", 1, 0, "abcdefghij", 5, 6, -5);
793     test("abcde", 1, 0, "abcdefghij", 9, 0, 0);
794     test("abcde", 1, 0, "abcdefghij", 9, 1, -1);
795     test("abcde", 1, 0, "abcdefghij", 9, 2, -1);
796     test("abcde", 1, 0, "abcdefghij", 10, 0, 0);
797     test("abcde", 1, 0, "abcdefghij", 10, 1, 0);
798     test("abcde", 1, 0, "abcdefghij", 11, 0, 0);
799     test("abcde", 1, 0, "abcdefghijklmnopqrst", 0, 0, 0);
800     test("abcde", 1, 0, "abcdefghijklmnopqrst", 0, 1, -1);
801     test("abcde", 1, 0, "abcdefghijklmnopqrst", 0, 10, -10);
802     test("abcde", 1, 0, "abcdefghijklmnopqrst", 0, 19, -19);
803     test("abcde", 1, 0, "abcdefghijklmnopqrst", 0, 20, -20);
804     test("abcde", 1, 0, "abcdefghijklmnopqrst", 0, 21, -20);
805     test("abcde", 1, 0, "abcdefghijklmnopqrst", 1, 0, 0);
806     test("abcde", 1, 0, "abcdefghijklmnopqrst", 1, 1, -1);
807     test("abcde", 1, 0, "abcdefghijklmnopqrst", 1, 9, -9);
808     test("abcde", 1, 0, "abcdefghijklmnopqrst", 1, 18, -18);
809     test("abcde", 1, 0, "abcdefghijklmnopqrst", 1, 19, -19);
810     test("abcde", 1, 0, "abcdefghijklmnopqrst", 1, 20, -19);
811     test("abcde", 1, 0, "abcdefghijklmnopqrst", 10, 0, 0);
812     test("abcde", 1, 0, "abcdefghijklmnopqrst", 10, 1, -1);
813     test("abcde", 1, 0, "abcdefghijklmnopqrst", 10, 5, -5);
814     test("abcde", 1, 0, "abcdefghijklmnopqrst", 10, 9, -9);
815     test("abcde", 1, 0, "abcdefghijklmnopqrst", 10, 10, -10);
816     test("abcde", 1, 0, "abcdefghijklmnopqrst", 10, 11, -10);
817     test("abcde", 1, 0, "abcdefghijklmnopqrst", 19, 0, 0);
818     test("abcde", 1, 0, "abcdefghijklmnopqrst", 19, 1, -1);
819     test("abcde", 1, 0, "abcdefghijklmnopqrst", 19, 2, -1);
820     test("abcde", 1, 0, "abcdefghijklmnopqrst", 20, 0, 0);
821     test("abcde", 1, 0, "abcdefghijklmnopqrst", 20, 1, 0);
822     test("abcde", 1, 0, "abcdefghijklmnopqrst", 21, 0, 0);
823     test("abcde", 1, 1, "", 0, 0, 1);
824     test("abcde", 1, 1, "", 0, 1, 1);
825     test("abcde", 1, 1, "", 1, 0, 0);
826     test("abcde", 1, 1, "abcde", 0, 0, 1);
827     test("abcde", 1, 1, "abcde", 0, 1, 1);
828     test("abcde", 1, 1, "abcde", 0, 2, 1);
829     test("abcde", 1, 1, "abcde", 0, 4, 1);
830     test("abcde", 1, 1, "abcde", 0, 5, 1);
831     test("abcde", 1, 1, "abcde", 0, 6, 1);
832     test("abcde", 1, 1, "abcde", 1, 0, 1);
833     test("abcde", 1, 1, "abcde", 1, 1, 0);
834     test("abcde", 1, 1, "abcde", 1, 2, -1);
835     test("abcde", 1, 1, "abcde", 1, 3, -2);
836     test("abcde", 1, 1, "abcde", 1, 4, -3);
837     test("abcde", 1, 1, "abcde", 1, 5, -3);
838     test("abcde", 1, 1, "abcde", 2, 0, 1);
839     test("abcde", 1, 1, "abcde", 2, 1, -1);
840     test("abcde", 1, 1, "abcde", 2, 2, -1);
841     test("abcde", 1, 1, "abcde", 2, 3, -1);
842     test("abcde", 1, 1, "abcde", 2, 4, -1);
843     test("abcde", 1, 1, "abcde", 4, 0, 1);
844     test("abcde", 1, 1, "abcde", 4, 1, -3);
845     test("abcde", 1, 1, "abcde", 4, 2, -3);
846     test("abcde", 1, 1, "abcde", 5, 0, 1);
847     test("abcde", 1, 1, "abcde", 5, 1, 1);
848     test("abcde", 1, 1, "abcde", 6, 0, 0);
849     test("abcde", 1, 1, "abcdefghij", 0, 0, 1);
850     test("abcde", 1, 1, "abcdefghij", 0, 1, 1);
851     test("abcde", 1, 1, "abcdefghij", 0, 5, 1);
852     test("abcde", 1, 1, "abcdefghij", 0, 9, 1);
853     test("abcde", 1, 1, "abcdefghij", 0, 10, 1);
854     test("abcde", 1, 1, "abcdefghij", 0, 11, 1);
855     test("abcde", 1, 1, "abcdefghij", 1, 0, 1);
856     test("abcde", 1, 1, "abcdefghij", 1, 1, 0);
857     test("abcde", 1, 1, "abcdefghij", 1, 4, -3);
858     test("abcde", 1, 1, "abcdefghij", 1, 8, -7);
859     test("abcde", 1, 1, "abcdefghij", 1, 9, -8);
860     test("abcde", 1, 1, "abcdefghij", 1, 10, -8);
861     test("abcde", 1, 1, "abcdefghij", 5, 0, 1);
862     test("abcde", 1, 1, "abcdefghij", 5, 1, -4);
863     test("abcde", 1, 1, "abcdefghij", 5, 2, -4);
864     test("abcde", 1, 1, "abcdefghij", 5, 4, -4);
865     test("abcde", 1, 1, "abcdefghij", 5, 5, -4);
866     test("abcde", 1, 1, "abcdefghij", 5, 6, -4);
867     test("abcde", 1, 1, "abcdefghij", 9, 0, 1);
868     test("abcde", 1, 1, "abcdefghij", 9, 1, -8);
869     test("abcde", 1, 1, "abcdefghij", 9, 2, -8);
870     test("abcde", 1, 1, "abcdefghij", 10, 0, 1);
871     test("abcde", 1, 1, "abcdefghij", 10, 1, 1);
872     test("abcde", 1, 1, "abcdefghij", 11, 0, 0);
873     test("abcde", 1, 1, "abcdefghijklmnopqrst", 0, 0, 1);
874     test("abcde", 1, 1, "abcdefghijklmnopqrst", 0, 1, 1);
875     test("abcde", 1, 1, "abcdefghijklmnopqrst", 0, 10, 1);
876     test("abcde", 1, 1, "abcdefghijklmnopqrst", 0, 19, 1);
877     test("abcde", 1, 1, "abcdefghijklmnopqrst", 0, 20, 1);
878     test("abcde", 1, 1, "abcdefghijklmnopqrst", 0, 21, 1);
879     test("abcde", 1, 1, "abcdefghijklmnopqrst", 1, 0, 1);
880     test("abcde", 1, 1, "abcdefghijklmnopqrst", 1, 1, 0);
881     test("abcde", 1, 1, "abcdefghijklmnopqrst", 1, 9, -8);
882     test("abcde", 1, 1, "abcdefghijklmnopqrst", 1, 18, -17);
883 }
884 
test8()885 void test8()
886 {
887     test("abcde", 1, 1, "abcdefghijklmnopqrst", 1, 19, -18);
888     test("abcde", 1, 1, "abcdefghijklmnopqrst", 1, 20, -18);
889     test("abcde", 1, 1, "abcdefghijklmnopqrst", 10, 0, 1);
890     test("abcde", 1, 1, "abcdefghijklmnopqrst", 10, 1, -9);
891     test("abcde", 1, 1, "abcdefghijklmnopqrst", 10, 5, -9);
892     test("abcde", 1, 1, "abcdefghijklmnopqrst", 10, 9, -9);
893     test("abcde", 1, 1, "abcdefghijklmnopqrst", 10, 10, -9);
894     test("abcde", 1, 1, "abcdefghijklmnopqrst", 10, 11, -9);
895     test("abcde", 1, 1, "abcdefghijklmnopqrst", 19, 0, 1);
896     test("abcde", 1, 1, "abcdefghijklmnopqrst", 19, 1, -18);
897     test("abcde", 1, 1, "abcdefghijklmnopqrst", 19, 2, -18);
898     test("abcde", 1, 1, "abcdefghijklmnopqrst", 20, 0, 1);
899     test("abcde", 1, 1, "abcdefghijklmnopqrst", 20, 1, 1);
900     test("abcde", 1, 1, "abcdefghijklmnopqrst", 21, 0, 0);
901     test("abcde", 1, 2, "", 0, 0, 2);
902     test("abcde", 1, 2, "", 0, 1, 2);
903     test("abcde", 1, 2, "", 1, 0, 0);
904     test("abcde", 1, 2, "abcde", 0, 0, 2);
905     test("abcde", 1, 2, "abcde", 0, 1, 1);
906     test("abcde", 1, 2, "abcde", 0, 2, 1);
907     test("abcde", 1, 2, "abcde", 0, 4, 1);
908     test("abcde", 1, 2, "abcde", 0, 5, 1);
909     test("abcde", 1, 2, "abcde", 0, 6, 1);
910     test("abcde", 1, 2, "abcde", 1, 0, 2);
911     test("abcde", 1, 2, "abcde", 1, 1, 1);
912     test("abcde", 1, 2, "abcde", 1, 2, 0);
913     test("abcde", 1, 2, "abcde", 1, 3, -1);
914     test("abcde", 1, 2, "abcde", 1, 4, -2);
915     test("abcde", 1, 2, "abcde", 1, 5, -2);
916     test("abcde", 1, 2, "abcde", 2, 0, 2);
917     test("abcde", 1, 2, "abcde", 2, 1, -1);
918     test("abcde", 1, 2, "abcde", 2, 2, -1);
919     test("abcde", 1, 2, "abcde", 2, 3, -1);
920     test("abcde", 1, 2, "abcde", 2, 4, -1);
921     test("abcde", 1, 2, "abcde", 4, 0, 2);
922     test("abcde", 1, 2, "abcde", 4, 1, -3);
923     test("abcde", 1, 2, "abcde", 4, 2, -3);
924     test("abcde", 1, 2, "abcde", 5, 0, 2);
925     test("abcde", 1, 2, "abcde", 5, 1, 2);
926     test("abcde", 1, 2, "abcde", 6, 0, 0);
927     test("abcde", 1, 2, "abcdefghij", 0, 0, 2);
928     test("abcde", 1, 2, "abcdefghij", 0, 1, 1);
929     test("abcde", 1, 2, "abcdefghij", 0, 5, 1);
930     test("abcde", 1, 2, "abcdefghij", 0, 9, 1);
931     test("abcde", 1, 2, "abcdefghij", 0, 10, 1);
932     test("abcde", 1, 2, "abcdefghij", 0, 11, 1);
933     test("abcde", 1, 2, "abcdefghij", 1, 0, 2);
934     test("abcde", 1, 2, "abcdefghij", 1, 1, 1);
935     test("abcde", 1, 2, "abcdefghij", 1, 4, -2);
936     test("abcde", 1, 2, "abcdefghij", 1, 8, -6);
937     test("abcde", 1, 2, "abcdefghij", 1, 9, -7);
938     test("abcde", 1, 2, "abcdefghij", 1, 10, -7);
939     test("abcde", 1, 2, "abcdefghij", 5, 0, 2);
940     test("abcde", 1, 2, "abcdefghij", 5, 1, -4);
941     test("abcde", 1, 2, "abcdefghij", 5, 2, -4);
942     test("abcde", 1, 2, "abcdefghij", 5, 4, -4);
943     test("abcde", 1, 2, "abcdefghij", 5, 5, -4);
944     test("abcde", 1, 2, "abcdefghij", 5, 6, -4);
945     test("abcde", 1, 2, "abcdefghij", 9, 0, 2);
946     test("abcde", 1, 2, "abcdefghij", 9, 1, -8);
947     test("abcde", 1, 2, "abcdefghij", 9, 2, -8);
948     test("abcde", 1, 2, "abcdefghij", 10, 0, 2);
949     test("abcde", 1, 2, "abcdefghij", 10, 1, 2);
950     test("abcde", 1, 2, "abcdefghij", 11, 0, 0);
951     test("abcde", 1, 2, "abcdefghijklmnopqrst", 0, 0, 2);
952     test("abcde", 1, 2, "abcdefghijklmnopqrst", 0, 1, 1);
953     test("abcde", 1, 2, "abcdefghijklmnopqrst", 0, 10, 1);
954     test("abcde", 1, 2, "abcdefghijklmnopqrst", 0, 19, 1);
955     test("abcde", 1, 2, "abcdefghijklmnopqrst", 0, 20, 1);
956     test("abcde", 1, 2, "abcdefghijklmnopqrst", 0, 21, 1);
957     test("abcde", 1, 2, "abcdefghijklmnopqrst", 1, 0, 2);
958     test("abcde", 1, 2, "abcdefghijklmnopqrst", 1, 1, 1);
959     test("abcde", 1, 2, "abcdefghijklmnopqrst", 1, 9, -7);
960     test("abcde", 1, 2, "abcdefghijklmnopqrst", 1, 18, -16);
961     test("abcde", 1, 2, "abcdefghijklmnopqrst", 1, 19, -17);
962     test("abcde", 1, 2, "abcdefghijklmnopqrst", 1, 20, -17);
963     test("abcde", 1, 2, "abcdefghijklmnopqrst", 10, 0, 2);
964     test("abcde", 1, 2, "abcdefghijklmnopqrst", 10, 1, -9);
965     test("abcde", 1, 2, "abcdefghijklmnopqrst", 10, 5, -9);
966     test("abcde", 1, 2, "abcdefghijklmnopqrst", 10, 9, -9);
967     test("abcde", 1, 2, "abcdefghijklmnopqrst", 10, 10, -9);
968     test("abcde", 1, 2, "abcdefghijklmnopqrst", 10, 11, -9);
969     test("abcde", 1, 2, "abcdefghijklmnopqrst", 19, 0, 2);
970     test("abcde", 1, 2, "abcdefghijklmnopqrst", 19, 1, -18);
971     test("abcde", 1, 2, "abcdefghijklmnopqrst", 19, 2, -18);
972     test("abcde", 1, 2, "abcdefghijklmnopqrst", 20, 0, 2);
973     test("abcde", 1, 2, "abcdefghijklmnopqrst", 20, 1, 2);
974     test("abcde", 1, 2, "abcdefghijklmnopqrst", 21, 0, 0);
975     test("abcde", 1, 3, "", 0, 0, 3);
976     test("abcde", 1, 3, "", 0, 1, 3);
977     test("abcde", 1, 3, "", 1, 0, 0);
978     test("abcde", 1, 3, "abcde", 0, 0, 3);
979     test("abcde", 1, 3, "abcde", 0, 1, 1);
980     test("abcde", 1, 3, "abcde", 0, 2, 1);
981     test("abcde", 1, 3, "abcde", 0, 4, 1);
982     test("abcde", 1, 3, "abcde", 0, 5, 1);
983     test("abcde", 1, 3, "abcde", 0, 6, 1);
984     test("abcde", 1, 3, "abcde", 1, 0, 3);
985     test("abcde", 1, 3, "abcde", 1, 1, 2);
986     test("abcde", 1, 3, "abcde", 1, 2, 1);
987 }
988 
test9()989 void test9()
990 {
991     test("abcde", 1, 3, "abcde", 1, 3, 0);
992     test("abcde", 1, 3, "abcde", 1, 4, -1);
993     test("abcde", 1, 3, "abcde", 1, 5, -1);
994     test("abcde", 1, 3, "abcde", 2, 0, 3);
995     test("abcde", 1, 3, "abcde", 2, 1, -1);
996     test("abcde", 1, 3, "abcde", 2, 2, -1);
997     test("abcde", 1, 3, "abcde", 2, 3, -1);
998     test("abcde", 1, 3, "abcde", 2, 4, -1);
999     test("abcde", 1, 3, "abcde", 4, 0, 3);
1000     test("abcde", 1, 3, "abcde", 4, 1, -3);
1001     test("abcde", 1, 3, "abcde", 4, 2, -3);
1002     test("abcde", 1, 3, "abcde", 5, 0, 3);
1003     test("abcde", 1, 3, "abcde", 5, 1, 3);
1004     test("abcde", 1, 3, "abcde", 6, 0, 0);
1005     test("abcde", 1, 3, "abcdefghij", 0, 0, 3);
1006     test("abcde", 1, 3, "abcdefghij", 0, 1, 1);
1007     test("abcde", 1, 3, "abcdefghij", 0, 5, 1);
1008     test("abcde", 1, 3, "abcdefghij", 0, 9, 1);
1009     test("abcde", 1, 3, "abcdefghij", 0, 10, 1);
1010     test("abcde", 1, 3, "abcdefghij", 0, 11, 1);
1011     test("abcde", 1, 3, "abcdefghij", 1, 0, 3);
1012     test("abcde", 1, 3, "abcdefghij", 1, 1, 2);
1013     test("abcde", 1, 3, "abcdefghij", 1, 4, -1);
1014     test("abcde", 1, 3, "abcdefghij", 1, 8, -5);
1015     test("abcde", 1, 3, "abcdefghij", 1, 9, -6);
1016     test("abcde", 1, 3, "abcdefghij", 1, 10, -6);
1017     test("abcde", 1, 3, "abcdefghij", 5, 0, 3);
1018     test("abcde", 1, 3, "abcdefghij", 5, 1, -4);
1019     test("abcde", 1, 3, "abcdefghij", 5, 2, -4);
1020     test("abcde", 1, 3, "abcdefghij", 5, 4, -4);
1021     test("abcde", 1, 3, "abcdefghij", 5, 5, -4);
1022     test("abcde", 1, 3, "abcdefghij", 5, 6, -4);
1023     test("abcde", 1, 3, "abcdefghij", 9, 0, 3);
1024     test("abcde", 1, 3, "abcdefghij", 9, 1, -8);
1025     test("abcde", 1, 3, "abcdefghij", 9, 2, -8);
1026     test("abcde", 1, 3, "abcdefghij", 10, 0, 3);
1027     test("abcde", 1, 3, "abcdefghij", 10, 1, 3);
1028     test("abcde", 1, 3, "abcdefghij", 11, 0, 0);
1029     test("abcde", 1, 3, "abcdefghijklmnopqrst", 0, 0, 3);
1030     test("abcde", 1, 3, "abcdefghijklmnopqrst", 0, 1, 1);
1031     test("abcde", 1, 3, "abcdefghijklmnopqrst", 0, 10, 1);
1032     test("abcde", 1, 3, "abcdefghijklmnopqrst", 0, 19, 1);
1033     test("abcde", 1, 3, "abcdefghijklmnopqrst", 0, 20, 1);
1034     test("abcde", 1, 3, "abcdefghijklmnopqrst", 0, 21, 1);
1035     test("abcde", 1, 3, "abcdefghijklmnopqrst", 1, 0, 3);
1036     test("abcde", 1, 3, "abcdefghijklmnopqrst", 1, 1, 2);
1037     test("abcde", 1, 3, "abcdefghijklmnopqrst", 1, 9, -6);
1038     test("abcde", 1, 3, "abcdefghijklmnopqrst", 1, 18, -15);
1039     test("abcde", 1, 3, "abcdefghijklmnopqrst", 1, 19, -16);
1040     test("abcde", 1, 3, "abcdefghijklmnopqrst", 1, 20, -16);
1041     test("abcde", 1, 3, "abcdefghijklmnopqrst", 10, 0, 3);
1042     test("abcde", 1, 3, "abcdefghijklmnopqrst", 10, 1, -9);
1043     test("abcde", 1, 3, "abcdefghijklmnopqrst", 10, 5, -9);
1044     test("abcde", 1, 3, "abcdefghijklmnopqrst", 10, 9, -9);
1045     test("abcde", 1, 3, "abcdefghijklmnopqrst", 10, 10, -9);
1046     test("abcde", 1, 3, "abcdefghijklmnopqrst", 10, 11, -9);
1047     test("abcde", 1, 3, "abcdefghijklmnopqrst", 19, 0, 3);
1048     test("abcde", 1, 3, "abcdefghijklmnopqrst", 19, 1, -18);
1049     test("abcde", 1, 3, "abcdefghijklmnopqrst", 19, 2, -18);
1050     test("abcde", 1, 3, "abcdefghijklmnopqrst", 20, 0, 3);
1051     test("abcde", 1, 3, "abcdefghijklmnopqrst", 20, 1, 3);
1052     test("abcde", 1, 3, "abcdefghijklmnopqrst", 21, 0, 0);
1053     test("abcde", 1, 4, "", 0, 0, 4);
1054     test("abcde", 1, 4, "", 0, 1, 4);
1055     test("abcde", 1, 4, "", 1, 0, 0);
1056     test("abcde", 1, 4, "abcde", 0, 0, 4);
1057     test("abcde", 1, 4, "abcde", 0, 1, 1);
1058     test("abcde", 1, 4, "abcde", 0, 2, 1);
1059     test("abcde", 1, 4, "abcde", 0, 4, 1);
1060     test("abcde", 1, 4, "abcde", 0, 5, 1);
1061     test("abcde", 1, 4, "abcde", 0, 6, 1);
1062     test("abcde", 1, 4, "abcde", 1, 0, 4);
1063     test("abcde", 1, 4, "abcde", 1, 1, 3);
1064     test("abcde", 1, 4, "abcde", 1, 2, 2);
1065     test("abcde", 1, 4, "abcde", 1, 3, 1);
1066     test("abcde", 1, 4, "abcde", 1, 4, 0);
1067     test("abcde", 1, 4, "abcde", 1, 5, 0);
1068     test("abcde", 1, 4, "abcde", 2, 0, 4);
1069     test("abcde", 1, 4, "abcde", 2, 1, -1);
1070     test("abcde", 1, 4, "abcde", 2, 2, -1);
1071     test("abcde", 1, 4, "abcde", 2, 3, -1);
1072     test("abcde", 1, 4, "abcde", 2, 4, -1);
1073     test("abcde", 1, 4, "abcde", 4, 0, 4);
1074     test("abcde", 1, 4, "abcde", 4, 1, -3);
1075     test("abcde", 1, 4, "abcde", 4, 2, -3);
1076     test("abcde", 1, 4, "abcde", 5, 0, 4);
1077     test("abcde", 1, 4, "abcde", 5, 1, 4);
1078     test("abcde", 1, 4, "abcde", 6, 0, 0);
1079     test("abcde", 1, 4, "abcdefghij", 0, 0, 4);
1080     test("abcde", 1, 4, "abcdefghij", 0, 1, 1);
1081     test("abcde", 1, 4, "abcdefghij", 0, 5, 1);
1082     test("abcde", 1, 4, "abcdefghij", 0, 9, 1);
1083     test("abcde", 1, 4, "abcdefghij", 0, 10, 1);
1084     test("abcde", 1, 4, "abcdefghij", 0, 11, 1);
1085     test("abcde", 1, 4, "abcdefghij", 1, 0, 4);
1086     test("abcde", 1, 4, "abcdefghij", 1, 1, 3);
1087     test("abcde", 1, 4, "abcdefghij", 1, 4, 0);
1088     test("abcde", 1, 4, "abcdefghij", 1, 8, -4);
1089     test("abcde", 1, 4, "abcdefghij", 1, 9, -5);
1090     test("abcde", 1, 4, "abcdefghij", 1, 10, -5);
1091 }
1092 
test10()1093 void test10()
1094 {
1095     test("abcde", 1, 4, "abcdefghij", 5, 0, 4);
1096     test("abcde", 1, 4, "abcdefghij", 5, 1, -4);
1097     test("abcde", 1, 4, "abcdefghij", 5, 2, -4);
1098     test("abcde", 1, 4, "abcdefghij", 5, 4, -4);
1099     test("abcde", 1, 4, "abcdefghij", 5, 5, -4);
1100     test("abcde", 1, 4, "abcdefghij", 5, 6, -4);
1101     test("abcde", 1, 4, "abcdefghij", 9, 0, 4);
1102     test("abcde", 1, 4, "abcdefghij", 9, 1, -8);
1103     test("abcde", 1, 4, "abcdefghij", 9, 2, -8);
1104     test("abcde", 1, 4, "abcdefghij", 10, 0, 4);
1105     test("abcde", 1, 4, "abcdefghij", 10, 1, 4);
1106     test("abcde", 1, 4, "abcdefghij", 11, 0, 0);
1107     test("abcde", 1, 4, "abcdefghijklmnopqrst", 0, 0, 4);
1108     test("abcde", 1, 4, "abcdefghijklmnopqrst", 0, 1, 1);
1109     test("abcde", 1, 4, "abcdefghijklmnopqrst", 0, 10, 1);
1110     test("abcde", 1, 4, "abcdefghijklmnopqrst", 0, 19, 1);
1111     test("abcde", 1, 4, "abcdefghijklmnopqrst", 0, 20, 1);
1112     test("abcde", 1, 4, "abcdefghijklmnopqrst", 0, 21, 1);
1113     test("abcde", 1, 4, "abcdefghijklmnopqrst", 1, 0, 4);
1114     test("abcde", 1, 4, "abcdefghijklmnopqrst", 1, 1, 3);
1115     test("abcde", 1, 4, "abcdefghijklmnopqrst", 1, 9, -5);
1116     test("abcde", 1, 4, "abcdefghijklmnopqrst", 1, 18, -14);
1117     test("abcde", 1, 4, "abcdefghijklmnopqrst", 1, 19, -15);
1118     test("abcde", 1, 4, "abcdefghijklmnopqrst", 1, 20, -15);
1119     test("abcde", 1, 4, "abcdefghijklmnopqrst", 10, 0, 4);
1120     test("abcde", 1, 4, "abcdefghijklmnopqrst", 10, 1, -9);
1121     test("abcde", 1, 4, "abcdefghijklmnopqrst", 10, 5, -9);
1122     test("abcde", 1, 4, "abcdefghijklmnopqrst", 10, 9, -9);
1123     test("abcde", 1, 4, "abcdefghijklmnopqrst", 10, 10, -9);
1124     test("abcde", 1, 4, "abcdefghijklmnopqrst", 10, 11, -9);
1125     test("abcde", 1, 4, "abcdefghijklmnopqrst", 19, 0, 4);
1126     test("abcde", 1, 4, "abcdefghijklmnopqrst", 19, 1, -18);
1127     test("abcde", 1, 4, "abcdefghijklmnopqrst", 19, 2, -18);
1128     test("abcde", 1, 4, "abcdefghijklmnopqrst", 20, 0, 4);
1129     test("abcde", 1, 4, "abcdefghijklmnopqrst", 20, 1, 4);
1130     test("abcde", 1, 4, "abcdefghijklmnopqrst", 21, 0, 0);
1131     test("abcde", 1, 5, "", 0, 0, 4);
1132     test("abcde", 1, 5, "", 0, 1, 4);
1133     test("abcde", 1, 5, "", 1, 0, 0);
1134     test("abcde", 1, 5, "abcde", 0, 0, 4);
1135     test("abcde", 1, 5, "abcde", 0, 1, 1);
1136     test("abcde", 1, 5, "abcde", 0, 2, 1);
1137     test("abcde", 1, 5, "abcde", 0, 4, 1);
1138     test("abcde", 1, 5, "abcde", 0, 5, 1);
1139     test("abcde", 1, 5, "abcde", 0, 6, 1);
1140     test("abcde", 1, 5, "abcde", 1, 0, 4);
1141     test("abcde", 1, 5, "abcde", 1, 1, 3);
1142     test("abcde", 1, 5, "abcde", 1, 2, 2);
1143     test("abcde", 1, 5, "abcde", 1, 3, 1);
1144     test("abcde", 1, 5, "abcde", 1, 4, 0);
1145     test("abcde", 1, 5, "abcde", 1, 5, 0);
1146     test("abcde", 1, 5, "abcde", 2, 0, 4);
1147     test("abcde", 1, 5, "abcde", 2, 1, -1);
1148     test("abcde", 1, 5, "abcde", 2, 2, -1);
1149     test("abcde", 1, 5, "abcde", 2, 3, -1);
1150     test("abcde", 1, 5, "abcde", 2, 4, -1);
1151     test("abcde", 1, 5, "abcde", 4, 0, 4);
1152     test("abcde", 1, 5, "abcde", 4, 1, -3);
1153     test("abcde", 1, 5, "abcde", 4, 2, -3);
1154     test("abcde", 1, 5, "abcde", 5, 0, 4);
1155     test("abcde", 1, 5, "abcde", 5, 1, 4);
1156     test("abcde", 1, 5, "abcde", 6, 0, 0);
1157     test("abcde", 1, 5, "abcdefghij", 0, 0, 4);
1158     test("abcde", 1, 5, "abcdefghij", 0, 1, 1);
1159     test("abcde", 1, 5, "abcdefghij", 0, 5, 1);
1160     test("abcde", 1, 5, "abcdefghij", 0, 9, 1);
1161     test("abcde", 1, 5, "abcdefghij", 0, 10, 1);
1162     test("abcde", 1, 5, "abcdefghij", 0, 11, 1);
1163     test("abcde", 1, 5, "abcdefghij", 1, 0, 4);
1164     test("abcde", 1, 5, "abcdefghij", 1, 1, 3);
1165     test("abcde", 1, 5, "abcdefghij", 1, 4, 0);
1166     test("abcde", 1, 5, "abcdefghij", 1, 8, -4);
1167     test("abcde", 1, 5, "abcdefghij", 1, 9, -5);
1168     test("abcde", 1, 5, "abcdefghij", 1, 10, -5);
1169     test("abcde", 1, 5, "abcdefghij", 5, 0, 4);
1170     test("abcde", 1, 5, "abcdefghij", 5, 1, -4);
1171     test("abcde", 1, 5, "abcdefghij", 5, 2, -4);
1172     test("abcde", 1, 5, "abcdefghij", 5, 4, -4);
1173     test("abcde", 1, 5, "abcdefghij", 5, 5, -4);
1174     test("abcde", 1, 5, "abcdefghij", 5, 6, -4);
1175     test("abcde", 1, 5, "abcdefghij", 9, 0, 4);
1176     test("abcde", 1, 5, "abcdefghij", 9, 1, -8);
1177     test("abcde", 1, 5, "abcdefghij", 9, 2, -8);
1178     test("abcde", 1, 5, "abcdefghij", 10, 0, 4);
1179     test("abcde", 1, 5, "abcdefghij", 10, 1, 4);
1180     test("abcde", 1, 5, "abcdefghij", 11, 0, 0);
1181     test("abcde", 1, 5, "abcdefghijklmnopqrst", 0, 0, 4);
1182     test("abcde", 1, 5, "abcdefghijklmnopqrst", 0, 1, 1);
1183     test("abcde", 1, 5, "abcdefghijklmnopqrst", 0, 10, 1);
1184     test("abcde", 1, 5, "abcdefghijklmnopqrst", 0, 19, 1);
1185     test("abcde", 1, 5, "abcdefghijklmnopqrst", 0, 20, 1);
1186     test("abcde", 1, 5, "abcdefghijklmnopqrst", 0, 21, 1);
1187     test("abcde", 1, 5, "abcdefghijklmnopqrst", 1, 0, 4);
1188     test("abcde", 1, 5, "abcdefghijklmnopqrst", 1, 1, 3);
1189     test("abcde", 1, 5, "abcdefghijklmnopqrst", 1, 9, -5);
1190     test("abcde", 1, 5, "abcdefghijklmnopqrst", 1, 18, -14);
1191     test("abcde", 1, 5, "abcdefghijklmnopqrst", 1, 19, -15);
1192     test("abcde", 1, 5, "abcdefghijklmnopqrst", 1, 20, -15);
1193     test("abcde", 1, 5, "abcdefghijklmnopqrst", 10, 0, 4);
1194     test("abcde", 1, 5, "abcdefghijklmnopqrst", 10, 1, -9);
1195 }
1196 
test11()1197 void test11()
1198 {
1199     test("abcde", 1, 5, "abcdefghijklmnopqrst", 10, 5, -9);
1200     test("abcde", 1, 5, "abcdefghijklmnopqrst", 10, 9, -9);
1201     test("abcde", 1, 5, "abcdefghijklmnopqrst", 10, 10, -9);
1202     test("abcde", 1, 5, "abcdefghijklmnopqrst", 10, 11, -9);
1203     test("abcde", 1, 5, "abcdefghijklmnopqrst", 19, 0, 4);
1204     test("abcde", 1, 5, "abcdefghijklmnopqrst", 19, 1, -18);
1205     test("abcde", 1, 5, "abcdefghijklmnopqrst", 19, 2, -18);
1206     test("abcde", 1, 5, "abcdefghijklmnopqrst", 20, 0, 4);
1207     test("abcde", 1, 5, "abcdefghijklmnopqrst", 20, 1, 4);
1208     test("abcde", 1, 5, "abcdefghijklmnopqrst", 21, 0, 0);
1209     test("abcde", 2, 0, "", 0, 0, 0);
1210     test("abcde", 2, 0, "", 0, 1, 0);
1211     test("abcde", 2, 0, "", 1, 0, 0);
1212     test("abcde", 2, 0, "abcde", 0, 0, 0);
1213     test("abcde", 2, 0, "abcde", 0, 1, -1);
1214     test("abcde", 2, 0, "abcde", 0, 2, -2);
1215     test("abcde", 2, 0, "abcde", 0, 4, -4);
1216     test("abcde", 2, 0, "abcde", 0, 5, -5);
1217     test("abcde", 2, 0, "abcde", 0, 6, -5);
1218     test("abcde", 2, 0, "abcde", 1, 0, 0);
1219     test("abcde", 2, 0, "abcde", 1, 1, -1);
1220     test("abcde", 2, 0, "abcde", 1, 2, -2);
1221     test("abcde", 2, 0, "abcde", 1, 3, -3);
1222     test("abcde", 2, 0, "abcde", 1, 4, -4);
1223     test("abcde", 2, 0, "abcde", 1, 5, -4);
1224     test("abcde", 2, 0, "abcde", 2, 0, 0);
1225     test("abcde", 2, 0, "abcde", 2, 1, -1);
1226     test("abcde", 2, 0, "abcde", 2, 2, -2);
1227     test("abcde", 2, 0, "abcde", 2, 3, -3);
1228     test("abcde", 2, 0, "abcde", 2, 4, -3);
1229     test("abcde", 2, 0, "abcde", 4, 0, 0);
1230     test("abcde", 2, 0, "abcde", 4, 1, -1);
1231     test("abcde", 2, 0, "abcde", 4, 2, -1);
1232     test("abcde", 2, 0, "abcde", 5, 0, 0);
1233     test("abcde", 2, 0, "abcde", 5, 1, 0);
1234     test("abcde", 2, 0, "abcde", 6, 0, 0);
1235     test("abcde", 2, 0, "abcdefghij", 0, 0, 0);
1236     test("abcde", 2, 0, "abcdefghij", 0, 1, -1);
1237     test("abcde", 2, 0, "abcdefghij", 0, 5, -5);
1238     test("abcde", 2, 0, "abcdefghij", 0, 9, -9);
1239     test("abcde", 2, 0, "abcdefghij", 0, 10, -10);
1240     test("abcde", 2, 0, "abcdefghij", 0, 11, -10);
1241     test("abcde", 2, 0, "abcdefghij", 1, 0, 0);
1242     test("abcde", 2, 0, "abcdefghij", 1, 1, -1);
1243     test("abcde", 2, 0, "abcdefghij", 1, 4, -4);
1244     test("abcde", 2, 0, "abcdefghij", 1, 8, -8);
1245     test("abcde", 2, 0, "abcdefghij", 1, 9, -9);
1246     test("abcde", 2, 0, "abcdefghij", 1, 10, -9);
1247     test("abcde", 2, 0, "abcdefghij", 5, 0, 0);
1248     test("abcde", 2, 0, "abcdefghij", 5, 1, -1);
1249     test("abcde", 2, 0, "abcdefghij", 5, 2, -2);
1250     test("abcde", 2, 0, "abcdefghij", 5, 4, -4);
1251     test("abcde", 2, 0, "abcdefghij", 5, 5, -5);
1252     test("abcde", 2, 0, "abcdefghij", 5, 6, -5);
1253     test("abcde", 2, 0, "abcdefghij", 9, 0, 0);
1254     test("abcde", 2, 0, "abcdefghij", 9, 1, -1);
1255     test("abcde", 2, 0, "abcdefghij", 9, 2, -1);
1256     test("abcde", 2, 0, "abcdefghij", 10, 0, 0);
1257     test("abcde", 2, 0, "abcdefghij", 10, 1, 0);
1258     test("abcde", 2, 0, "abcdefghij", 11, 0, 0);
1259     test("abcde", 2, 0, "abcdefghijklmnopqrst", 0, 0, 0);
1260     test("abcde", 2, 0, "abcdefghijklmnopqrst", 0, 1, -1);
1261     test("abcde", 2, 0, "abcdefghijklmnopqrst", 0, 10, -10);
1262     test("abcde", 2, 0, "abcdefghijklmnopqrst", 0, 19, -19);
1263     test("abcde", 2, 0, "abcdefghijklmnopqrst", 0, 20, -20);
1264     test("abcde", 2, 0, "abcdefghijklmnopqrst", 0, 21, -20);
1265     test("abcde", 2, 0, "abcdefghijklmnopqrst", 1, 0, 0);
1266     test("abcde", 2, 0, "abcdefghijklmnopqrst", 1, 1, -1);
1267     test("abcde", 2, 0, "abcdefghijklmnopqrst", 1, 9, -9);
1268     test("abcde", 2, 0, "abcdefghijklmnopqrst", 1, 18, -18);
1269     test("abcde", 2, 0, "abcdefghijklmnopqrst", 1, 19, -19);
1270     test("abcde", 2, 0, "abcdefghijklmnopqrst", 1, 20, -19);
1271     test("abcde", 2, 0, "abcdefghijklmnopqrst", 10, 0, 0);
1272     test("abcde", 2, 0, "abcdefghijklmnopqrst", 10, 1, -1);
1273     test("abcde", 2, 0, "abcdefghijklmnopqrst", 10, 5, -5);
1274     test("abcde", 2, 0, "abcdefghijklmnopqrst", 10, 9, -9);
1275     test("abcde", 2, 0, "abcdefghijklmnopqrst", 10, 10, -10);
1276     test("abcde", 2, 0, "abcdefghijklmnopqrst", 10, 11, -10);
1277     test("abcde", 2, 0, "abcdefghijklmnopqrst", 19, 0, 0);
1278     test("abcde", 2, 0, "abcdefghijklmnopqrst", 19, 1, -1);
1279     test("abcde", 2, 0, "abcdefghijklmnopqrst", 19, 2, -1);
1280     test("abcde", 2, 0, "abcdefghijklmnopqrst", 20, 0, 0);
1281     test("abcde", 2, 0, "abcdefghijklmnopqrst", 20, 1, 0);
1282     test("abcde", 2, 0, "abcdefghijklmnopqrst", 21, 0, 0);
1283     test("abcde", 2, 1, "", 0, 0, 1);
1284     test("abcde", 2, 1, "", 0, 1, 1);
1285     test("abcde", 2, 1, "", 1, 0, 0);
1286     test("abcde", 2, 1, "abcde", 0, 0, 1);
1287     test("abcde", 2, 1, "abcde", 0, 1, 2);
1288     test("abcde", 2, 1, "abcde", 0, 2, 2);
1289     test("abcde", 2, 1, "abcde", 0, 4, 2);
1290     test("abcde", 2, 1, "abcde", 0, 5, 2);
1291     test("abcde", 2, 1, "abcde", 0, 6, 2);
1292     test("abcde", 2, 1, "abcde", 1, 0, 1);
1293     test("abcde", 2, 1, "abcde", 1, 1, 1);
1294     test("abcde", 2, 1, "abcde", 1, 2, 1);
1295     test("abcde", 2, 1, "abcde", 1, 3, 1);
1296     test("abcde", 2, 1, "abcde", 1, 4, 1);
1297     test("abcde", 2, 1, "abcde", 1, 5, 1);
1298     test("abcde", 2, 1, "abcde", 2, 0, 1);
1299 }
1300 
test12()1301 void test12()
1302 {
1303     test("abcde", 2, 1, "abcde", 2, 1, 0);
1304     test("abcde", 2, 1, "abcde", 2, 2, -1);
1305     test("abcde", 2, 1, "abcde", 2, 3, -2);
1306     test("abcde", 2, 1, "abcde", 2, 4, -2);
1307     test("abcde", 2, 1, "abcde", 4, 0, 1);
1308     test("abcde", 2, 1, "abcde", 4, 1, -2);
1309     test("abcde", 2, 1, "abcde", 4, 2, -2);
1310     test("abcde", 2, 1, "abcde", 5, 0, 1);
1311     test("abcde", 2, 1, "abcde", 5, 1, 1);
1312     test("abcde", 2, 1, "abcde", 6, 0, 0);
1313     test("abcde", 2, 1, "abcdefghij", 0, 0, 1);
1314     test("abcde", 2, 1, "abcdefghij", 0, 1, 2);
1315     test("abcde", 2, 1, "abcdefghij", 0, 5, 2);
1316     test("abcde", 2, 1, "abcdefghij", 0, 9, 2);
1317     test("abcde", 2, 1, "abcdefghij", 0, 10, 2);
1318     test("abcde", 2, 1, "abcdefghij", 0, 11, 2);
1319     test("abcde", 2, 1, "abcdefghij", 1, 0, 1);
1320     test("abcde", 2, 1, "abcdefghij", 1, 1, 1);
1321     test("abcde", 2, 1, "abcdefghij", 1, 4, 1);
1322     test("abcde", 2, 1, "abcdefghij", 1, 8, 1);
1323     test("abcde", 2, 1, "abcdefghij", 1, 9, 1);
1324     test("abcde", 2, 1, "abcdefghij", 1, 10, 1);
1325     test("abcde", 2, 1, "abcdefghij", 5, 0, 1);
1326     test("abcde", 2, 1, "abcdefghij", 5, 1, -3);
1327     test("abcde", 2, 1, "abcdefghij", 5, 2, -3);
1328     test("abcde", 2, 1, "abcdefghij", 5, 4, -3);
1329     test("abcde", 2, 1, "abcdefghij", 5, 5, -3);
1330     test("abcde", 2, 1, "abcdefghij", 5, 6, -3);
1331     test("abcde", 2, 1, "abcdefghij", 9, 0, 1);
1332     test("abcde", 2, 1, "abcdefghij", 9, 1, -7);
1333     test("abcde", 2, 1, "abcdefghij", 9, 2, -7);
1334     test("abcde", 2, 1, "abcdefghij", 10, 0, 1);
1335     test("abcde", 2, 1, "abcdefghij", 10, 1, 1);
1336     test("abcde", 2, 1, "abcdefghij", 11, 0, 0);
1337     test("abcde", 2, 1, "abcdefghijklmnopqrst", 0, 0, 1);
1338     test("abcde", 2, 1, "abcdefghijklmnopqrst", 0, 1, 2);
1339     test("abcde", 2, 1, "abcdefghijklmnopqrst", 0, 10, 2);
1340     test("abcde", 2, 1, "abcdefghijklmnopqrst", 0, 19, 2);
1341     test("abcde", 2, 1, "abcdefghijklmnopqrst", 0, 20, 2);
1342     test("abcde", 2, 1, "abcdefghijklmnopqrst", 0, 21, 2);
1343     test("abcde", 2, 1, "abcdefghijklmnopqrst", 1, 0, 1);
1344     test("abcde", 2, 1, "abcdefghijklmnopqrst", 1, 1, 1);
1345     test("abcde", 2, 1, "abcdefghijklmnopqrst", 1, 9, 1);
1346     test("abcde", 2, 1, "abcdefghijklmnopqrst", 1, 18, 1);
1347     test("abcde", 2, 1, "abcdefghijklmnopqrst", 1, 19, 1);
1348     test("abcde", 2, 1, "abcdefghijklmnopqrst", 1, 20, 1);
1349     test("abcde", 2, 1, "abcdefghijklmnopqrst", 10, 0, 1);
1350     test("abcde", 2, 1, "abcdefghijklmnopqrst", 10, 1, -8);
1351     test("abcde", 2, 1, "abcdefghijklmnopqrst", 10, 5, -8);
1352     test("abcde", 2, 1, "abcdefghijklmnopqrst", 10, 9, -8);
1353     test("abcde", 2, 1, "abcdefghijklmnopqrst", 10, 10, -8);
1354     test("abcde", 2, 1, "abcdefghijklmnopqrst", 10, 11, -8);
1355     test("abcde", 2, 1, "abcdefghijklmnopqrst", 19, 0, 1);
1356     test("abcde", 2, 1, "abcdefghijklmnopqrst", 19, 1, -17);
1357     test("abcde", 2, 1, "abcdefghijklmnopqrst", 19, 2, -17);
1358     test("abcde", 2, 1, "abcdefghijklmnopqrst", 20, 0, 1);
1359     test("abcde", 2, 1, "abcdefghijklmnopqrst", 20, 1, 1);
1360     test("abcde", 2, 1, "abcdefghijklmnopqrst", 21, 0, 0);
1361     test("abcde", 2, 2, "", 0, 0, 2);
1362     test("abcde", 2, 2, "", 0, 1, 2);
1363     test("abcde", 2, 2, "", 1, 0, 0);
1364     test("abcde", 2, 2, "abcde", 0, 0, 2);
1365     test("abcde", 2, 2, "abcde", 0, 1, 2);
1366     test("abcde", 2, 2, "abcde", 0, 2, 2);
1367     test("abcde", 2, 2, "abcde", 0, 4, 2);
1368     test("abcde", 2, 2, "abcde", 0, 5, 2);
1369     test("abcde", 2, 2, "abcde", 0, 6, 2);
1370     test("abcde", 2, 2, "abcde", 1, 0, 2);
1371     test("abcde", 2, 2, "abcde", 1, 1, 1);
1372     test("abcde", 2, 2, "abcde", 1, 2, 1);
1373     test("abcde", 2, 2, "abcde", 1, 3, 1);
1374     test("abcde", 2, 2, "abcde", 1, 4, 1);
1375     test("abcde", 2, 2, "abcde", 1, 5, 1);
1376     test("abcde", 2, 2, "abcde", 2, 0, 2);
1377     test("abcde", 2, 2, "abcde", 2, 1, 1);
1378     test("abcde", 2, 2, "abcde", 2, 2, 0);
1379     test("abcde", 2, 2, "abcde", 2, 3, -1);
1380     test("abcde", 2, 2, "abcde", 2, 4, -1);
1381     test("abcde", 2, 2, "abcde", 4, 0, 2);
1382     test("abcde", 2, 2, "abcde", 4, 1, -2);
1383     test("abcde", 2, 2, "abcde", 4, 2, -2);
1384     test("abcde", 2, 2, "abcde", 5, 0, 2);
1385     test("abcde", 2, 2, "abcde", 5, 1, 2);
1386     test("abcde", 2, 2, "abcde", 6, 0, 0);
1387     test("abcde", 2, 2, "abcdefghij", 0, 0, 2);
1388     test("abcde", 2, 2, "abcdefghij", 0, 1, 2);
1389     test("abcde", 2, 2, "abcdefghij", 0, 5, 2);
1390     test("abcde", 2, 2, "abcdefghij", 0, 9, 2);
1391     test("abcde", 2, 2, "abcdefghij", 0, 10, 2);
1392     test("abcde", 2, 2, "abcdefghij", 0, 11, 2);
1393     test("abcde", 2, 2, "abcdefghij", 1, 0, 2);
1394     test("abcde", 2, 2, "abcdefghij", 1, 1, 1);
1395     test("abcde", 2, 2, "abcdefghij", 1, 4, 1);
1396     test("abcde", 2, 2, "abcdefghij", 1, 8, 1);
1397     test("abcde", 2, 2, "abcdefghij", 1, 9, 1);
1398     test("abcde", 2, 2, "abcdefghij", 1, 10, 1);
1399     test("abcde", 2, 2, "abcdefghij", 5, 0, 2);
1400     test("abcde", 2, 2, "abcdefghij", 5, 1, -3);
1401     test("abcde", 2, 2, "abcdefghij", 5, 2, -3);
1402     test("abcde", 2, 2, "abcdefghij", 5, 4, -3);
1403 }
1404 
test13()1405 void test13()
1406 {
1407     test("abcde", 2, 2, "abcdefghij", 5, 5, -3);
1408     test("abcde", 2, 2, "abcdefghij", 5, 6, -3);
1409     test("abcde", 2, 2, "abcdefghij", 9, 0, 2);
1410     test("abcde", 2, 2, "abcdefghij", 9, 1, -7);
1411     test("abcde", 2, 2, "abcdefghij", 9, 2, -7);
1412     test("abcde", 2, 2, "abcdefghij", 10, 0, 2);
1413     test("abcde", 2, 2, "abcdefghij", 10, 1, 2);
1414     test("abcde", 2, 2, "abcdefghij", 11, 0, 0);
1415     test("abcde", 2, 2, "abcdefghijklmnopqrst", 0, 0, 2);
1416     test("abcde", 2, 2, "abcdefghijklmnopqrst", 0, 1, 2);
1417     test("abcde", 2, 2, "abcdefghijklmnopqrst", 0, 10, 2);
1418     test("abcde", 2, 2, "abcdefghijklmnopqrst", 0, 19, 2);
1419     test("abcde", 2, 2, "abcdefghijklmnopqrst", 0, 20, 2);
1420     test("abcde", 2, 2, "abcdefghijklmnopqrst", 0, 21, 2);
1421     test("abcde", 2, 2, "abcdefghijklmnopqrst", 1, 0, 2);
1422     test("abcde", 2, 2, "abcdefghijklmnopqrst", 1, 1, 1);
1423     test("abcde", 2, 2, "abcdefghijklmnopqrst", 1, 9, 1);
1424     test("abcde", 2, 2, "abcdefghijklmnopqrst", 1, 18, 1);
1425     test("abcde", 2, 2, "abcdefghijklmnopqrst", 1, 19, 1);
1426     test("abcde", 2, 2, "abcdefghijklmnopqrst", 1, 20, 1);
1427     test("abcde", 2, 2, "abcdefghijklmnopqrst", 10, 0, 2);
1428     test("abcde", 2, 2, "abcdefghijklmnopqrst", 10, 1, -8);
1429     test("abcde", 2, 2, "abcdefghijklmnopqrst", 10, 5, -8);
1430     test("abcde", 2, 2, "abcdefghijklmnopqrst", 10, 9, -8);
1431     test("abcde", 2, 2, "abcdefghijklmnopqrst", 10, 10, -8);
1432     test("abcde", 2, 2, "abcdefghijklmnopqrst", 10, 11, -8);
1433     test("abcde", 2, 2, "abcdefghijklmnopqrst", 19, 0, 2);
1434     test("abcde", 2, 2, "abcdefghijklmnopqrst", 19, 1, -17);
1435     test("abcde", 2, 2, "abcdefghijklmnopqrst", 19, 2, -17);
1436     test("abcde", 2, 2, "abcdefghijklmnopqrst", 20, 0, 2);
1437     test("abcde", 2, 2, "abcdefghijklmnopqrst", 20, 1, 2);
1438     test("abcde", 2, 2, "abcdefghijklmnopqrst", 21, 0, 0);
1439     test("abcde", 2, 3, "", 0, 0, 3);
1440     test("abcde", 2, 3, "", 0, 1, 3);
1441     test("abcde", 2, 3, "", 1, 0, 0);
1442     test("abcde", 2, 3, "abcde", 0, 0, 3);
1443     test("abcde", 2, 3, "abcde", 0, 1, 2);
1444     test("abcde", 2, 3, "abcde", 0, 2, 2);
1445     test("abcde", 2, 3, "abcde", 0, 4, 2);
1446     test("abcde", 2, 3, "abcde", 0, 5, 2);
1447     test("abcde", 2, 3, "abcde", 0, 6, 2);
1448     test("abcde", 2, 3, "abcde", 1, 0, 3);
1449     test("abcde", 2, 3, "abcde", 1, 1, 1);
1450     test("abcde", 2, 3, "abcde", 1, 2, 1);
1451     test("abcde", 2, 3, "abcde", 1, 3, 1);
1452     test("abcde", 2, 3, "abcde", 1, 4, 1);
1453     test("abcde", 2, 3, "abcde", 1, 5, 1);
1454     test("abcde", 2, 3, "abcde", 2, 0, 3);
1455     test("abcde", 2, 3, "abcde", 2, 1, 2);
1456     test("abcde", 2, 3, "abcde", 2, 2, 1);
1457     test("abcde", 2, 3, "abcde", 2, 3, 0);
1458     test("abcde", 2, 3, "abcde", 2, 4, 0);
1459     test("abcde", 2, 3, "abcde", 4, 0, 3);
1460     test("abcde", 2, 3, "abcde", 4, 1, -2);
1461     test("abcde", 2, 3, "abcde", 4, 2, -2);
1462     test("abcde", 2, 3, "abcde", 5, 0, 3);
1463     test("abcde", 2, 3, "abcde", 5, 1, 3);
1464     test("abcde", 2, 3, "abcde", 6, 0, 0);
1465     test("abcde", 2, 3, "abcdefghij", 0, 0, 3);
1466     test("abcde", 2, 3, "abcdefghij", 0, 1, 2);
1467     test("abcde", 2, 3, "abcdefghij", 0, 5, 2);
1468     test("abcde", 2, 3, "abcdefghij", 0, 9, 2);
1469     test("abcde", 2, 3, "abcdefghij", 0, 10, 2);
1470     test("abcde", 2, 3, "abcdefghij", 0, 11, 2);
1471     test("abcde", 2, 3, "abcdefghij", 1, 0, 3);
1472     test("abcde", 2, 3, "abcdefghij", 1, 1, 1);
1473     test("abcde", 2, 3, "abcdefghij", 1, 4, 1);
1474     test("abcde", 2, 3, "abcdefghij", 1, 8, 1);
1475     test("abcde", 2, 3, "abcdefghij", 1, 9, 1);
1476     test("abcde", 2, 3, "abcdefghij", 1, 10, 1);
1477     test("abcde", 2, 3, "abcdefghij", 5, 0, 3);
1478     test("abcde", 2, 3, "abcdefghij", 5, 1, -3);
1479     test("abcde", 2, 3, "abcdefghij", 5, 2, -3);
1480     test("abcde", 2, 3, "abcdefghij", 5, 4, -3);
1481     test("abcde", 2, 3, "abcdefghij", 5, 5, -3);
1482     test("abcde", 2, 3, "abcdefghij", 5, 6, -3);
1483     test("abcde", 2, 3, "abcdefghij", 9, 0, 3);
1484     test("abcde", 2, 3, "abcdefghij", 9, 1, -7);
1485     test("abcde", 2, 3, "abcdefghij", 9, 2, -7);
1486     test("abcde", 2, 3, "abcdefghij", 10, 0, 3);
1487     test("abcde", 2, 3, "abcdefghij", 10, 1, 3);
1488     test("abcde", 2, 3, "abcdefghij", 11, 0, 0);
1489     test("abcde", 2, 3, "abcdefghijklmnopqrst", 0, 0, 3);
1490     test("abcde", 2, 3, "abcdefghijklmnopqrst", 0, 1, 2);
1491     test("abcde", 2, 3, "abcdefghijklmnopqrst", 0, 10, 2);
1492     test("abcde", 2, 3, "abcdefghijklmnopqrst", 0, 19, 2);
1493     test("abcde", 2, 3, "abcdefghijklmnopqrst", 0, 20, 2);
1494     test("abcde", 2, 3, "abcdefghijklmnopqrst", 0, 21, 2);
1495     test("abcde", 2, 3, "abcdefghijklmnopqrst", 1, 0, 3);
1496     test("abcde", 2, 3, "abcdefghijklmnopqrst", 1, 1, 1);
1497     test("abcde", 2, 3, "abcdefghijklmnopqrst", 1, 9, 1);
1498     test("abcde", 2, 3, "abcdefghijklmnopqrst", 1, 18, 1);
1499     test("abcde", 2, 3, "abcdefghijklmnopqrst", 1, 19, 1);
1500     test("abcde", 2, 3, "abcdefghijklmnopqrst", 1, 20, 1);
1501     test("abcde", 2, 3, "abcdefghijklmnopqrst", 10, 0, 3);
1502     test("abcde", 2, 3, "abcdefghijklmnopqrst", 10, 1, -8);
1503     test("abcde", 2, 3, "abcdefghijklmnopqrst", 10, 5, -8);
1504     test("abcde", 2, 3, "abcdefghijklmnopqrst", 10, 9, -8);
1505     test("abcde", 2, 3, "abcdefghijklmnopqrst", 10, 10, -8);
1506     test("abcde", 2, 3, "abcdefghijklmnopqrst", 10, 11, -8);
1507 }
1508 
test14()1509 void test14()
1510 {
1511     test("abcde", 2, 3, "abcdefghijklmnopqrst", 19, 0, 3);
1512     test("abcde", 2, 3, "abcdefghijklmnopqrst", 19, 1, -17);
1513     test("abcde", 2, 3, "abcdefghijklmnopqrst", 19, 2, -17);
1514     test("abcde", 2, 3, "abcdefghijklmnopqrst", 20, 0, 3);
1515     test("abcde", 2, 3, "abcdefghijklmnopqrst", 20, 1, 3);
1516     test("abcde", 2, 3, "abcdefghijklmnopqrst", 21, 0, 0);
1517     test("abcde", 2, 4, "", 0, 0, 3);
1518     test("abcde", 2, 4, "", 0, 1, 3);
1519     test("abcde", 2, 4, "", 1, 0, 0);
1520     test("abcde", 2, 4, "abcde", 0, 0, 3);
1521     test("abcde", 2, 4, "abcde", 0, 1, 2);
1522     test("abcde", 2, 4, "abcde", 0, 2, 2);
1523     test("abcde", 2, 4, "abcde", 0, 4, 2);
1524     test("abcde", 2, 4, "abcde", 0, 5, 2);
1525     test("abcde", 2, 4, "abcde", 0, 6, 2);
1526     test("abcde", 2, 4, "abcde", 1, 0, 3);
1527     test("abcde", 2, 4, "abcde", 1, 1, 1);
1528     test("abcde", 2, 4, "abcde", 1, 2, 1);
1529     test("abcde", 2, 4, "abcde", 1, 3, 1);
1530     test("abcde", 2, 4, "abcde", 1, 4, 1);
1531     test("abcde", 2, 4, "abcde", 1, 5, 1);
1532     test("abcde", 2, 4, "abcde", 2, 0, 3);
1533     test("abcde", 2, 4, "abcde", 2, 1, 2);
1534     test("abcde", 2, 4, "abcde", 2, 2, 1);
1535     test("abcde", 2, 4, "abcde", 2, 3, 0);
1536     test("abcde", 2, 4, "abcde", 2, 4, 0);
1537     test("abcde", 2, 4, "abcde", 4, 0, 3);
1538     test("abcde", 2, 4, "abcde", 4, 1, -2);
1539     test("abcde", 2, 4, "abcde", 4, 2, -2);
1540     test("abcde", 2, 4, "abcde", 5, 0, 3);
1541     test("abcde", 2, 4, "abcde", 5, 1, 3);
1542     test("abcde", 2, 4, "abcde", 6, 0, 0);
1543     test("abcde", 2, 4, "abcdefghij", 0, 0, 3);
1544     test("abcde", 2, 4, "abcdefghij", 0, 1, 2);
1545     test("abcde", 2, 4, "abcdefghij", 0, 5, 2);
1546     test("abcde", 2, 4, "abcdefghij", 0, 9, 2);
1547     test("abcde", 2, 4, "abcdefghij", 0, 10, 2);
1548     test("abcde", 2, 4, "abcdefghij", 0, 11, 2);
1549     test("abcde", 2, 4, "abcdefghij", 1, 0, 3);
1550     test("abcde", 2, 4, "abcdefghij", 1, 1, 1);
1551     test("abcde", 2, 4, "abcdefghij", 1, 4, 1);
1552     test("abcde", 2, 4, "abcdefghij", 1, 8, 1);
1553     test("abcde", 2, 4, "abcdefghij", 1, 9, 1);
1554     test("abcde", 2, 4, "abcdefghij", 1, 10, 1);
1555     test("abcde", 2, 4, "abcdefghij", 5, 0, 3);
1556     test("abcde", 2, 4, "abcdefghij", 5, 1, -3);
1557     test("abcde", 2, 4, "abcdefghij", 5, 2, -3);
1558     test("abcde", 2, 4, "abcdefghij", 5, 4, -3);
1559     test("abcde", 2, 4, "abcdefghij", 5, 5, -3);
1560     test("abcde", 2, 4, "abcdefghij", 5, 6, -3);
1561     test("abcde", 2, 4, "abcdefghij", 9, 0, 3);
1562     test("abcde", 2, 4, "abcdefghij", 9, 1, -7);
1563     test("abcde", 2, 4, "abcdefghij", 9, 2, -7);
1564     test("abcde", 2, 4, "abcdefghij", 10, 0, 3);
1565     test("abcde", 2, 4, "abcdefghij", 10, 1, 3);
1566     test("abcde", 2, 4, "abcdefghij", 11, 0, 0);
1567     test("abcde", 2, 4, "abcdefghijklmnopqrst", 0, 0, 3);
1568     test("abcde", 2, 4, "abcdefghijklmnopqrst", 0, 1, 2);
1569     test("abcde", 2, 4, "abcdefghijklmnopqrst", 0, 10, 2);
1570     test("abcde", 2, 4, "abcdefghijklmnopqrst", 0, 19, 2);
1571     test("abcde", 2, 4, "abcdefghijklmnopqrst", 0, 20, 2);
1572     test("abcde", 2, 4, "abcdefghijklmnopqrst", 0, 21, 2);
1573     test("abcde", 2, 4, "abcdefghijklmnopqrst", 1, 0, 3);
1574     test("abcde", 2, 4, "abcdefghijklmnopqrst", 1, 1, 1);
1575     test("abcde", 2, 4, "abcdefghijklmnopqrst", 1, 9, 1);
1576     test("abcde", 2, 4, "abcdefghijklmnopqrst", 1, 18, 1);
1577     test("abcde", 2, 4, "abcdefghijklmnopqrst", 1, 19, 1);
1578     test("abcde", 2, 4, "abcdefghijklmnopqrst", 1, 20, 1);
1579     test("abcde", 2, 4, "abcdefghijklmnopqrst", 10, 0, 3);
1580     test("abcde", 2, 4, "abcdefghijklmnopqrst", 10, 1, -8);
1581     test("abcde", 2, 4, "abcdefghijklmnopqrst", 10, 5, -8);
1582     test("abcde", 2, 4, "abcdefghijklmnopqrst", 10, 9, -8);
1583     test("abcde", 2, 4, "abcdefghijklmnopqrst", 10, 10, -8);
1584     test("abcde", 2, 4, "abcdefghijklmnopqrst", 10, 11, -8);
1585     test("abcde", 2, 4, "abcdefghijklmnopqrst", 19, 0, 3);
1586     test("abcde", 2, 4, "abcdefghijklmnopqrst", 19, 1, -17);
1587     test("abcde", 2, 4, "abcdefghijklmnopqrst", 19, 2, -17);
1588     test("abcde", 2, 4, "abcdefghijklmnopqrst", 20, 0, 3);
1589     test("abcde", 2, 4, "abcdefghijklmnopqrst", 20, 1, 3);
1590     test("abcde", 2, 4, "abcdefghijklmnopqrst", 21, 0, 0);
1591     test("abcde", 4, 0, "", 0, 0, 0);
1592     test("abcde", 4, 0, "", 0, 1, 0);
1593     test("abcde", 4, 0, "", 1, 0, 0);
1594     test("abcde", 4, 0, "abcde", 0, 0, 0);
1595     test("abcde", 4, 0, "abcde", 0, 1, -1);
1596     test("abcde", 4, 0, "abcde", 0, 2, -2);
1597     test("abcde", 4, 0, "abcde", 0, 4, -4);
1598     test("abcde", 4, 0, "abcde", 0, 5, -5);
1599     test("abcde", 4, 0, "abcde", 0, 6, -5);
1600     test("abcde", 4, 0, "abcde", 1, 0, 0);
1601     test("abcde", 4, 0, "abcde", 1, 1, -1);
1602     test("abcde", 4, 0, "abcde", 1, 2, -2);
1603     test("abcde", 4, 0, "abcde", 1, 3, -3);
1604     test("abcde", 4, 0, "abcde", 1, 4, -4);
1605     test("abcde", 4, 0, "abcde", 1, 5, -4);
1606     test("abcde", 4, 0, "abcde", 2, 0, 0);
1607     test("abcde", 4, 0, "abcde", 2, 1, -1);
1608     test("abcde", 4, 0, "abcde", 2, 2, -2);
1609     test("abcde", 4, 0, "abcde", 2, 3, -3);
1610     test("abcde", 4, 0, "abcde", 2, 4, -3);
1611 }
1612 
test15()1613 void test15()
1614 {
1615     test("abcde", 4, 0, "abcde", 4, 0, 0);
1616     test("abcde", 4, 0, "abcde", 4, 1, -1);
1617     test("abcde", 4, 0, "abcde", 4, 2, -1);
1618     test("abcde", 4, 0, "abcde", 5, 0, 0);
1619     test("abcde", 4, 0, "abcde", 5, 1, 0);
1620     test("abcde", 4, 0, "abcde", 6, 0, 0);
1621     test("abcde", 4, 0, "abcdefghij", 0, 0, 0);
1622     test("abcde", 4, 0, "abcdefghij", 0, 1, -1);
1623     test("abcde", 4, 0, "abcdefghij", 0, 5, -5);
1624     test("abcde", 4, 0, "abcdefghij", 0, 9, -9);
1625     test("abcde", 4, 0, "abcdefghij", 0, 10, -10);
1626     test("abcde", 4, 0, "abcdefghij", 0, 11, -10);
1627     test("abcde", 4, 0, "abcdefghij", 1, 0, 0);
1628     test("abcde", 4, 0, "abcdefghij", 1, 1, -1);
1629     test("abcde", 4, 0, "abcdefghij", 1, 4, -4);
1630     test("abcde", 4, 0, "abcdefghij", 1, 8, -8);
1631     test("abcde", 4, 0, "abcdefghij", 1, 9, -9);
1632     test("abcde", 4, 0, "abcdefghij", 1, 10, -9);
1633     test("abcde", 4, 0, "abcdefghij", 5, 0, 0);
1634     test("abcde", 4, 0, "abcdefghij", 5, 1, -1);
1635     test("abcde", 4, 0, "abcdefghij", 5, 2, -2);
1636     test("abcde", 4, 0, "abcdefghij", 5, 4, -4);
1637     test("abcde", 4, 0, "abcdefghij", 5, 5, -5);
1638     test("abcde", 4, 0, "abcdefghij", 5, 6, -5);
1639     test("abcde", 4, 0, "abcdefghij", 9, 0, 0);
1640     test("abcde", 4, 0, "abcdefghij", 9, 1, -1);
1641     test("abcde", 4, 0, "abcdefghij", 9, 2, -1);
1642     test("abcde", 4, 0, "abcdefghij", 10, 0, 0);
1643     test("abcde", 4, 0, "abcdefghij", 10, 1, 0);
1644     test("abcde", 4, 0, "abcdefghij", 11, 0, 0);
1645     test("abcde", 4, 0, "abcdefghijklmnopqrst", 0, 0, 0);
1646     test("abcde", 4, 0, "abcdefghijklmnopqrst", 0, 1, -1);
1647     test("abcde", 4, 0, "abcdefghijklmnopqrst", 0, 10, -10);
1648     test("abcde", 4, 0, "abcdefghijklmnopqrst", 0, 19, -19);
1649     test("abcde", 4, 0, "abcdefghijklmnopqrst", 0, 20, -20);
1650     test("abcde", 4, 0, "abcdefghijklmnopqrst", 0, 21, -20);
1651     test("abcde", 4, 0, "abcdefghijklmnopqrst", 1, 0, 0);
1652     test("abcde", 4, 0, "abcdefghijklmnopqrst", 1, 1, -1);
1653     test("abcde", 4, 0, "abcdefghijklmnopqrst", 1, 9, -9);
1654     test("abcde", 4, 0, "abcdefghijklmnopqrst", 1, 18, -18);
1655     test("abcde", 4, 0, "abcdefghijklmnopqrst", 1, 19, -19);
1656     test("abcde", 4, 0, "abcdefghijklmnopqrst", 1, 20, -19);
1657     test("abcde", 4, 0, "abcdefghijklmnopqrst", 10, 0, 0);
1658     test("abcde", 4, 0, "abcdefghijklmnopqrst", 10, 1, -1);
1659     test("abcde", 4, 0, "abcdefghijklmnopqrst", 10, 5, -5);
1660     test("abcde", 4, 0, "abcdefghijklmnopqrst", 10, 9, -9);
1661     test("abcde", 4, 0, "abcdefghijklmnopqrst", 10, 10, -10);
1662     test("abcde", 4, 0, "abcdefghijklmnopqrst", 10, 11, -10);
1663     test("abcde", 4, 0, "abcdefghijklmnopqrst", 19, 0, 0);
1664     test("abcde", 4, 0, "abcdefghijklmnopqrst", 19, 1, -1);
1665     test("abcde", 4, 0, "abcdefghijklmnopqrst", 19, 2, -1);
1666     test("abcde", 4, 0, "abcdefghijklmnopqrst", 20, 0, 0);
1667     test("abcde", 4, 0, "abcdefghijklmnopqrst", 20, 1, 0);
1668     test("abcde", 4, 0, "abcdefghijklmnopqrst", 21, 0, 0);
1669     test("abcde", 4, 1, "", 0, 0, 1);
1670     test("abcde", 4, 1, "", 0, 1, 1);
1671     test("abcde", 4, 1, "", 1, 0, 0);
1672     test("abcde", 4, 1, "abcde", 0, 0, 1);
1673     test("abcde", 4, 1, "abcde", 0, 1, 4);
1674     test("abcde", 4, 1, "abcde", 0, 2, 4);
1675     test("abcde", 4, 1, "abcde", 0, 4, 4);
1676     test("abcde", 4, 1, "abcde", 0, 5, 4);
1677     test("abcde", 4, 1, "abcde", 0, 6, 4);
1678     test("abcde", 4, 1, "abcde", 1, 0, 1);
1679     test("abcde", 4, 1, "abcde", 1, 1, 3);
1680     test("abcde", 4, 1, "abcde", 1, 2, 3);
1681     test("abcde", 4, 1, "abcde", 1, 3, 3);
1682     test("abcde", 4, 1, "abcde", 1, 4, 3);
1683     test("abcde", 4, 1, "abcde", 1, 5, 3);
1684     test("abcde", 4, 1, "abcde", 2, 0, 1);
1685     test("abcde", 4, 1, "abcde", 2, 1, 2);
1686     test("abcde", 4, 1, "abcde", 2, 2, 2);
1687     test("abcde", 4, 1, "abcde", 2, 3, 2);
1688     test("abcde", 4, 1, "abcde", 2, 4, 2);
1689     test("abcde", 4, 1, "abcde", 4, 0, 1);
1690     test("abcde", 4, 1, "abcde", 4, 1, 0);
1691     test("abcde", 4, 1, "abcde", 4, 2, 0);
1692     test("abcde", 4, 1, "abcde", 5, 0, 1);
1693     test("abcde", 4, 1, "abcde", 5, 1, 1);
1694     test("abcde", 4, 1, "abcde", 6, 0, 0);
1695     test("abcde", 4, 1, "abcdefghij", 0, 0, 1);
1696     test("abcde", 4, 1, "abcdefghij", 0, 1, 4);
1697     test("abcde", 4, 1, "abcdefghij", 0, 5, 4);
1698     test("abcde", 4, 1, "abcdefghij", 0, 9, 4);
1699     test("abcde", 4, 1, "abcdefghij", 0, 10, 4);
1700     test("abcde", 4, 1, "abcdefghij", 0, 11, 4);
1701     test("abcde", 4, 1, "abcdefghij", 1, 0, 1);
1702     test("abcde", 4, 1, "abcdefghij", 1, 1, 3);
1703     test("abcde", 4, 1, "abcdefghij", 1, 4, 3);
1704     test("abcde", 4, 1, "abcdefghij", 1, 8, 3);
1705     test("abcde", 4, 1, "abcdefghij", 1, 9, 3);
1706     test("abcde", 4, 1, "abcdefghij", 1, 10, 3);
1707     test("abcde", 4, 1, "abcdefghij", 5, 0, 1);
1708     test("abcde", 4, 1, "abcdefghij", 5, 1, -1);
1709     test("abcde", 4, 1, "abcdefghij", 5, 2, -1);
1710     test("abcde", 4, 1, "abcdefghij", 5, 4, -1);
1711     test("abcde", 4, 1, "abcdefghij", 5, 5, -1);
1712     test("abcde", 4, 1, "abcdefghij", 5, 6, -1);
1713     test("abcde", 4, 1, "abcdefghij", 9, 0, 1);
1714     test("abcde", 4, 1, "abcdefghij", 9, 1, -5);
1715 }
1716 
test16()1717 void test16()
1718 {
1719     test("abcde", 4, 1, "abcdefghij", 9, 2, -5);
1720     test("abcde", 4, 1, "abcdefghij", 10, 0, 1);
1721     test("abcde", 4, 1, "abcdefghij", 10, 1, 1);
1722     test("abcde", 4, 1, "abcdefghij", 11, 0, 0);
1723     test("abcde", 4, 1, "abcdefghijklmnopqrst", 0, 0, 1);
1724     test("abcde", 4, 1, "abcdefghijklmnopqrst", 0, 1, 4);
1725     test("abcde", 4, 1, "abcdefghijklmnopqrst", 0, 10, 4);
1726     test("abcde", 4, 1, "abcdefghijklmnopqrst", 0, 19, 4);
1727     test("abcde", 4, 1, "abcdefghijklmnopqrst", 0, 20, 4);
1728     test("abcde", 4, 1, "abcdefghijklmnopqrst", 0, 21, 4);
1729     test("abcde", 4, 1, "abcdefghijklmnopqrst", 1, 0, 1);
1730     test("abcde", 4, 1, "abcdefghijklmnopqrst", 1, 1, 3);
1731     test("abcde", 4, 1, "abcdefghijklmnopqrst", 1, 9, 3);
1732     test("abcde", 4, 1, "abcdefghijklmnopqrst", 1, 18, 3);
1733     test("abcde", 4, 1, "abcdefghijklmnopqrst", 1, 19, 3);
1734     test("abcde", 4, 1, "abcdefghijklmnopqrst", 1, 20, 3);
1735     test("abcde", 4, 1, "abcdefghijklmnopqrst", 10, 0, 1);
1736     test("abcde", 4, 1, "abcdefghijklmnopqrst", 10, 1, -6);
1737     test("abcde", 4, 1, "abcdefghijklmnopqrst", 10, 5, -6);
1738     test("abcde", 4, 1, "abcdefghijklmnopqrst", 10, 9, -6);
1739     test("abcde", 4, 1, "abcdefghijklmnopqrst", 10, 10, -6);
1740     test("abcde", 4, 1, "abcdefghijklmnopqrst", 10, 11, -6);
1741     test("abcde", 4, 1, "abcdefghijklmnopqrst", 19, 0, 1);
1742     test("abcde", 4, 1, "abcdefghijklmnopqrst", 19, 1, -15);
1743     test("abcde", 4, 1, "abcdefghijklmnopqrst", 19, 2, -15);
1744     test("abcde", 4, 1, "abcdefghijklmnopqrst", 20, 0, 1);
1745     test("abcde", 4, 1, "abcdefghijklmnopqrst", 20, 1, 1);
1746     test("abcde", 4, 1, "abcdefghijklmnopqrst", 21, 0, 0);
1747     test("abcde", 4, 2, "", 0, 0, 1);
1748     test("abcde", 4, 2, "", 0, 1, 1);
1749     test("abcde", 4, 2, "", 1, 0, 0);
1750     test("abcde", 4, 2, "abcde", 0, 0, 1);
1751     test("abcde", 4, 2, "abcde", 0, 1, 4);
1752     test("abcde", 4, 2, "abcde", 0, 2, 4);
1753     test("abcde", 4, 2, "abcde", 0, 4, 4);
1754     test("abcde", 4, 2, "abcde", 0, 5, 4);
1755     test("abcde", 4, 2, "abcde", 0, 6, 4);
1756     test("abcde", 4, 2, "abcde", 1, 0, 1);
1757     test("abcde", 4, 2, "abcde", 1, 1, 3);
1758     test("abcde", 4, 2, "abcde", 1, 2, 3);
1759     test("abcde", 4, 2, "abcde", 1, 3, 3);
1760     test("abcde", 4, 2, "abcde", 1, 4, 3);
1761     test("abcde", 4, 2, "abcde", 1, 5, 3);
1762     test("abcde", 4, 2, "abcde", 2, 0, 1);
1763     test("abcde", 4, 2, "abcde", 2, 1, 2);
1764     test("abcde", 4, 2, "abcde", 2, 2, 2);
1765     test("abcde", 4, 2, "abcde", 2, 3, 2);
1766     test("abcde", 4, 2, "abcde", 2, 4, 2);
1767     test("abcde", 4, 2, "abcde", 4, 0, 1);
1768     test("abcde", 4, 2, "abcde", 4, 1, 0);
1769     test("abcde", 4, 2, "abcde", 4, 2, 0);
1770     test("abcde", 4, 2, "abcde", 5, 0, 1);
1771     test("abcde", 4, 2, "abcde", 5, 1, 1);
1772     test("abcde", 4, 2, "abcde", 6, 0, 0);
1773     test("abcde", 4, 2, "abcdefghij", 0, 0, 1);
1774     test("abcde", 4, 2, "abcdefghij", 0, 1, 4);
1775     test("abcde", 4, 2, "abcdefghij", 0, 5, 4);
1776     test("abcde", 4, 2, "abcdefghij", 0, 9, 4);
1777     test("abcde", 4, 2, "abcdefghij", 0, 10, 4);
1778     test("abcde", 4, 2, "abcdefghij", 0, 11, 4);
1779     test("abcde", 4, 2, "abcdefghij", 1, 0, 1);
1780     test("abcde", 4, 2, "abcdefghij", 1, 1, 3);
1781     test("abcde", 4, 2, "abcdefghij", 1, 4, 3);
1782     test("abcde", 4, 2, "abcdefghij", 1, 8, 3);
1783     test("abcde", 4, 2, "abcdefghij", 1, 9, 3);
1784     test("abcde", 4, 2, "abcdefghij", 1, 10, 3);
1785     test("abcde", 4, 2, "abcdefghij", 5, 0, 1);
1786     test("abcde", 4, 2, "abcdefghij", 5, 1, -1);
1787     test("abcde", 4, 2, "abcdefghij", 5, 2, -1);
1788     test("abcde", 4, 2, "abcdefghij", 5, 4, -1);
1789     test("abcde", 4, 2, "abcdefghij", 5, 5, -1);
1790     test("abcde", 4, 2, "abcdefghij", 5, 6, -1);
1791     test("abcde", 4, 2, "abcdefghij", 9, 0, 1);
1792     test("abcde", 4, 2, "abcdefghij", 9, 1, -5);
1793     test("abcde", 4, 2, "abcdefghij", 9, 2, -5);
1794     test("abcde", 4, 2, "abcdefghij", 10, 0, 1);
1795     test("abcde", 4, 2, "abcdefghij", 10, 1, 1);
1796     test("abcde", 4, 2, "abcdefghij", 11, 0, 0);
1797     test("abcde", 4, 2, "abcdefghijklmnopqrst", 0, 0, 1);
1798     test("abcde", 4, 2, "abcdefghijklmnopqrst", 0, 1, 4);
1799     test("abcde", 4, 2, "abcdefghijklmnopqrst", 0, 10, 4);
1800     test("abcde", 4, 2, "abcdefghijklmnopqrst", 0, 19, 4);
1801     test("abcde", 4, 2, "abcdefghijklmnopqrst", 0, 20, 4);
1802     test("abcde", 4, 2, "abcdefghijklmnopqrst", 0, 21, 4);
1803     test("abcde", 4, 2, "abcdefghijklmnopqrst", 1, 0, 1);
1804     test("abcde", 4, 2, "abcdefghijklmnopqrst", 1, 1, 3);
1805     test("abcde", 4, 2, "abcdefghijklmnopqrst", 1, 9, 3);
1806     test("abcde", 4, 2, "abcdefghijklmnopqrst", 1, 18, 3);
1807     test("abcde", 4, 2, "abcdefghijklmnopqrst", 1, 19, 3);
1808     test("abcde", 4, 2, "abcdefghijklmnopqrst", 1, 20, 3);
1809     test("abcde", 4, 2, "abcdefghijklmnopqrst", 10, 0, 1);
1810     test("abcde", 4, 2, "abcdefghijklmnopqrst", 10, 1, -6);
1811     test("abcde", 4, 2, "abcdefghijklmnopqrst", 10, 5, -6);
1812     test("abcde", 4, 2, "abcdefghijklmnopqrst", 10, 9, -6);
1813     test("abcde", 4, 2, "abcdefghijklmnopqrst", 10, 10, -6);
1814     test("abcde", 4, 2, "abcdefghijklmnopqrst", 10, 11, -6);
1815     test("abcde", 4, 2, "abcdefghijklmnopqrst", 19, 0, 1);
1816     test("abcde", 4, 2, "abcdefghijklmnopqrst", 19, 1, -15);
1817     test("abcde", 4, 2, "abcdefghijklmnopqrst", 19, 2, -15);
1818     test("abcde", 4, 2, "abcdefghijklmnopqrst", 20, 0, 1);
1819 }
1820 
test17()1821 void test17()
1822 {
1823     test("abcde", 4, 2, "abcdefghijklmnopqrst", 20, 1, 1);
1824     test("abcde", 4, 2, "abcdefghijklmnopqrst", 21, 0, 0);
1825     test("abcde", 5, 0, "", 0, 0, 0);
1826     test("abcde", 5, 0, "", 0, 1, 0);
1827     test("abcde", 5, 0, "", 1, 0, 0);
1828     test("abcde", 5, 0, "abcde", 0, 0, 0);
1829     test("abcde", 5, 0, "abcde", 0, 1, -1);
1830     test("abcde", 5, 0, "abcde", 0, 2, -2);
1831     test("abcde", 5, 0, "abcde", 0, 4, -4);
1832     test("abcde", 5, 0, "abcde", 0, 5, -5);
1833     test("abcde", 5, 0, "abcde", 0, 6, -5);
1834     test("abcde", 5, 0, "abcde", 1, 0, 0);
1835     test("abcde", 5, 0, "abcde", 1, 1, -1);
1836     test("abcde", 5, 0, "abcde", 1, 2, -2);
1837     test("abcde", 5, 0, "abcde", 1, 3, -3);
1838     test("abcde", 5, 0, "abcde", 1, 4, -4);
1839     test("abcde", 5, 0, "abcde", 1, 5, -4);
1840     test("abcde", 5, 0, "abcde", 2, 0, 0);
1841     test("abcde", 5, 0, "abcde", 2, 1, -1);
1842     test("abcde", 5, 0, "abcde", 2, 2, -2);
1843     test("abcde", 5, 0, "abcde", 2, 3, -3);
1844     test("abcde", 5, 0, "abcde", 2, 4, -3);
1845     test("abcde", 5, 0, "abcde", 4, 0, 0);
1846     test("abcde", 5, 0, "abcde", 4, 1, -1);
1847     test("abcde", 5, 0, "abcde", 4, 2, -1);
1848     test("abcde", 5, 0, "abcde", 5, 0, 0);
1849     test("abcde", 5, 0, "abcde", 5, 1, 0);
1850     test("abcde", 5, 0, "abcde", 6, 0, 0);
1851     test("abcde", 5, 0, "abcdefghij", 0, 0, 0);
1852     test("abcde", 5, 0, "abcdefghij", 0, 1, -1);
1853     test("abcde", 5, 0, "abcdefghij", 0, 5, -5);
1854     test("abcde", 5, 0, "abcdefghij", 0, 9, -9);
1855     test("abcde", 5, 0, "abcdefghij", 0, 10, -10);
1856     test("abcde", 5, 0, "abcdefghij", 0, 11, -10);
1857     test("abcde", 5, 0, "abcdefghij", 1, 0, 0);
1858     test("abcde", 5, 0, "abcdefghij", 1, 1, -1);
1859     test("abcde", 5, 0, "abcdefghij", 1, 4, -4);
1860     test("abcde", 5, 0, "abcdefghij", 1, 8, -8);
1861     test("abcde", 5, 0, "abcdefghij", 1, 9, -9);
1862     test("abcde", 5, 0, "abcdefghij", 1, 10, -9);
1863     test("abcde", 5, 0, "abcdefghij", 5, 0, 0);
1864     test("abcde", 5, 0, "abcdefghij", 5, 1, -1);
1865     test("abcde", 5, 0, "abcdefghij", 5, 2, -2);
1866     test("abcde", 5, 0, "abcdefghij", 5, 4, -4);
1867     test("abcde", 5, 0, "abcdefghij", 5, 5, -5);
1868     test("abcde", 5, 0, "abcdefghij", 5, 6, -5);
1869     test("abcde", 5, 0, "abcdefghij", 9, 0, 0);
1870     test("abcde", 5, 0, "abcdefghij", 9, 1, -1);
1871     test("abcde", 5, 0, "abcdefghij", 9, 2, -1);
1872     test("abcde", 5, 0, "abcdefghij", 10, 0, 0);
1873     test("abcde", 5, 0, "abcdefghij", 10, 1, 0);
1874     test("abcde", 5, 0, "abcdefghij", 11, 0, 0);
1875     test("abcde", 5, 0, "abcdefghijklmnopqrst", 0, 0, 0);
1876     test("abcde", 5, 0, "abcdefghijklmnopqrst", 0, 1, -1);
1877     test("abcde", 5, 0, "abcdefghijklmnopqrst", 0, 10, -10);
1878     test("abcde", 5, 0, "abcdefghijklmnopqrst", 0, 19, -19);
1879     test("abcde", 5, 0, "abcdefghijklmnopqrst", 0, 20, -20);
1880     test("abcde", 5, 0, "abcdefghijklmnopqrst", 0, 21, -20);
1881     test("abcde", 5, 0, "abcdefghijklmnopqrst", 1, 0, 0);
1882     test("abcde", 5, 0, "abcdefghijklmnopqrst", 1, 1, -1);
1883     test("abcde", 5, 0, "abcdefghijklmnopqrst", 1, 9, -9);
1884     test("abcde", 5, 0, "abcdefghijklmnopqrst", 1, 18, -18);
1885     test("abcde", 5, 0, "abcdefghijklmnopqrst", 1, 19, -19);
1886     test("abcde", 5, 0, "abcdefghijklmnopqrst", 1, 20, -19);
1887     test("abcde", 5, 0, "abcdefghijklmnopqrst", 10, 0, 0);
1888     test("abcde", 5, 0, "abcdefghijklmnopqrst", 10, 1, -1);
1889     test("abcde", 5, 0, "abcdefghijklmnopqrst", 10, 5, -5);
1890     test("abcde", 5, 0, "abcdefghijklmnopqrst", 10, 9, -9);
1891     test("abcde", 5, 0, "abcdefghijklmnopqrst", 10, 10, -10);
1892     test("abcde", 5, 0, "abcdefghijklmnopqrst", 10, 11, -10);
1893     test("abcde", 5, 0, "abcdefghijklmnopqrst", 19, 0, 0);
1894     test("abcde", 5, 0, "abcdefghijklmnopqrst", 19, 1, -1);
1895     test("abcde", 5, 0, "abcdefghijklmnopqrst", 19, 2, -1);
1896     test("abcde", 5, 0, "abcdefghijklmnopqrst", 20, 0, 0);
1897     test("abcde", 5, 0, "abcdefghijklmnopqrst", 20, 1, 0);
1898     test("abcde", 5, 0, "abcdefghijklmnopqrst", 21, 0, 0);
1899     test("abcde", 5, 1, "", 0, 0, 0);
1900     test("abcde", 5, 1, "", 0, 1, 0);
1901     test("abcde", 5, 1, "", 1, 0, 0);
1902     test("abcde", 5, 1, "abcde", 0, 0, 0);
1903     test("abcde", 5, 1, "abcde", 0, 1, -1);
1904     test("abcde", 5, 1, "abcde", 0, 2, -2);
1905     test("abcde", 5, 1, "abcde", 0, 4, -4);
1906     test("abcde", 5, 1, "abcde", 0, 5, -5);
1907     test("abcde", 5, 1, "abcde", 0, 6, -5);
1908     test("abcde", 5, 1, "abcde", 1, 0, 0);
1909     test("abcde", 5, 1, "abcde", 1, 1, -1);
1910     test("abcde", 5, 1, "abcde", 1, 2, -2);
1911     test("abcde", 5, 1, "abcde", 1, 3, -3);
1912     test("abcde", 5, 1, "abcde", 1, 4, -4);
1913     test("abcde", 5, 1, "abcde", 1, 5, -4);
1914     test("abcde", 5, 1, "abcde", 2, 0, 0);
1915     test("abcde", 5, 1, "abcde", 2, 1, -1);
1916     test("abcde", 5, 1, "abcde", 2, 2, -2);
1917     test("abcde", 5, 1, "abcde", 2, 3, -3);
1918     test("abcde", 5, 1, "abcde", 2, 4, -3);
1919     test("abcde", 5, 1, "abcde", 4, 0, 0);
1920     test("abcde", 5, 1, "abcde", 4, 1, -1);
1921     test("abcde", 5, 1, "abcde", 4, 2, -1);
1922     test("abcde", 5, 1, "abcde", 5, 0, 0);
1923 }
1924 
test18()1925 void test18()
1926 {
1927     test("abcde", 5, 1, "abcde", 5, 1, 0);
1928     test("abcde", 5, 1, "abcde", 6, 0, 0);
1929     test("abcde", 5, 1, "abcdefghij", 0, 0, 0);
1930     test("abcde", 5, 1, "abcdefghij", 0, 1, -1);
1931     test("abcde", 5, 1, "abcdefghij", 0, 5, -5);
1932     test("abcde", 5, 1, "abcdefghij", 0, 9, -9);
1933     test("abcde", 5, 1, "abcdefghij", 0, 10, -10);
1934     test("abcde", 5, 1, "abcdefghij", 0, 11, -10);
1935     test("abcde", 5, 1, "abcdefghij", 1, 0, 0);
1936     test("abcde", 5, 1, "abcdefghij", 1, 1, -1);
1937     test("abcde", 5, 1, "abcdefghij", 1, 4, -4);
1938     test("abcde", 5, 1, "abcdefghij", 1, 8, -8);
1939     test("abcde", 5, 1, "abcdefghij", 1, 9, -9);
1940     test("abcde", 5, 1, "abcdefghij", 1, 10, -9);
1941     test("abcde", 5, 1, "abcdefghij", 5, 0, 0);
1942     test("abcde", 5, 1, "abcdefghij", 5, 1, -1);
1943     test("abcde", 5, 1, "abcdefghij", 5, 2, -2);
1944     test("abcde", 5, 1, "abcdefghij", 5, 4, -4);
1945     test("abcde", 5, 1, "abcdefghij", 5, 5, -5);
1946     test("abcde", 5, 1, "abcdefghij", 5, 6, -5);
1947     test("abcde", 5, 1, "abcdefghij", 9, 0, 0);
1948     test("abcde", 5, 1, "abcdefghij", 9, 1, -1);
1949     test("abcde", 5, 1, "abcdefghij", 9, 2, -1);
1950     test("abcde", 5, 1, "abcdefghij", 10, 0, 0);
1951     test("abcde", 5, 1, "abcdefghij", 10, 1, 0);
1952     test("abcde", 5, 1, "abcdefghij", 11, 0, 0);
1953     test("abcde", 5, 1, "abcdefghijklmnopqrst", 0, 0, 0);
1954     test("abcde", 5, 1, "abcdefghijklmnopqrst", 0, 1, -1);
1955     test("abcde", 5, 1, "abcdefghijklmnopqrst", 0, 10, -10);
1956     test("abcde", 5, 1, "abcdefghijklmnopqrst", 0, 19, -19);
1957     test("abcde", 5, 1, "abcdefghijklmnopqrst", 0, 20, -20);
1958     test("abcde", 5, 1, "abcdefghijklmnopqrst", 0, 21, -20);
1959     test("abcde", 5, 1, "abcdefghijklmnopqrst", 1, 0, 0);
1960     test("abcde", 5, 1, "abcdefghijklmnopqrst", 1, 1, -1);
1961     test("abcde", 5, 1, "abcdefghijklmnopqrst", 1, 9, -9);
1962     test("abcde", 5, 1, "abcdefghijklmnopqrst", 1, 18, -18);
1963     test("abcde", 5, 1, "abcdefghijklmnopqrst", 1, 19, -19);
1964     test("abcde", 5, 1, "abcdefghijklmnopqrst", 1, 20, -19);
1965     test("abcde", 5, 1, "abcdefghijklmnopqrst", 10, 0, 0);
1966     test("abcde", 5, 1, "abcdefghijklmnopqrst", 10, 1, -1);
1967     test("abcde", 5, 1, "abcdefghijklmnopqrst", 10, 5, -5);
1968     test("abcde", 5, 1, "abcdefghijklmnopqrst", 10, 9, -9);
1969     test("abcde", 5, 1, "abcdefghijklmnopqrst", 10, 10, -10);
1970     test("abcde", 5, 1, "abcdefghijklmnopqrst", 10, 11, -10);
1971     test("abcde", 5, 1, "abcdefghijklmnopqrst", 19, 0, 0);
1972     test("abcde", 5, 1, "abcdefghijklmnopqrst", 19, 1, -1);
1973     test("abcde", 5, 1, "abcdefghijklmnopqrst", 19, 2, -1);
1974     test("abcde", 5, 1, "abcdefghijklmnopqrst", 20, 0, 0);
1975     test("abcde", 5, 1, "abcdefghijklmnopqrst", 20, 1, 0);
1976     test("abcde", 5, 1, "abcdefghijklmnopqrst", 21, 0, 0);
1977     test("abcde", 6, 0, "", 0, 0, 0);
1978     test("abcde", 6, 0, "", 0, 1, 0);
1979     test("abcde", 6, 0, "", 1, 0, 0);
1980     test("abcde", 6, 0, "abcde", 0, 0, 0);
1981     test("abcde", 6, 0, "abcde", 0, 1, 0);
1982     test("abcde", 6, 0, "abcde", 0, 2, 0);
1983     test("abcde", 6, 0, "abcde", 0, 4, 0);
1984     test("abcde", 6, 0, "abcde", 0, 5, 0);
1985     test("abcde", 6, 0, "abcde", 0, 6, 0);
1986     test("abcde", 6, 0, "abcde", 1, 0, 0);
1987     test("abcde", 6, 0, "abcde", 1, 1, 0);
1988     test("abcde", 6, 0, "abcde", 1, 2, 0);
1989     test("abcde", 6, 0, "abcde", 1, 3, 0);
1990     test("abcde", 6, 0, "abcde", 1, 4, 0);
1991     test("abcde", 6, 0, "abcde", 1, 5, 0);
1992     test("abcde", 6, 0, "abcde", 2, 0, 0);
1993     test("abcde", 6, 0, "abcde", 2, 1, 0);
1994     test("abcde", 6, 0, "abcde", 2, 2, 0);
1995     test("abcde", 6, 0, "abcde", 2, 3, 0);
1996     test("abcde", 6, 0, "abcde", 2, 4, 0);
1997     test("abcde", 6, 0, "abcde", 4, 0, 0);
1998     test("abcde", 6, 0, "abcde", 4, 1, 0);
1999     test("abcde", 6, 0, "abcde", 4, 2, 0);
2000     test("abcde", 6, 0, "abcde", 5, 0, 0);
2001     test("abcde", 6, 0, "abcde", 5, 1, 0);
2002     test("abcde", 6, 0, "abcde", 6, 0, 0);
2003     test("abcde", 6, 0, "abcdefghij", 0, 0, 0);
2004     test("abcde", 6, 0, "abcdefghij", 0, 1, 0);
2005     test("abcde", 6, 0, "abcdefghij", 0, 5, 0);
2006     test("abcde", 6, 0, "abcdefghij", 0, 9, 0);
2007     test("abcde", 6, 0, "abcdefghij", 0, 10, 0);
2008     test("abcde", 6, 0, "abcdefghij", 0, 11, 0);
2009     test("abcde", 6, 0, "abcdefghij", 1, 0, 0);
2010     test("abcde", 6, 0, "abcdefghij", 1, 1, 0);
2011     test("abcde", 6, 0, "abcdefghij", 1, 4, 0);
2012     test("abcde", 6, 0, "abcdefghij", 1, 8, 0);
2013     test("abcde", 6, 0, "abcdefghij", 1, 9, 0);
2014     test("abcde", 6, 0, "abcdefghij", 1, 10, 0);
2015     test("abcde", 6, 0, "abcdefghij", 5, 0, 0);
2016     test("abcde", 6, 0, "abcdefghij", 5, 1, 0);
2017     test("abcde", 6, 0, "abcdefghij", 5, 2, 0);
2018     test("abcde", 6, 0, "abcdefghij", 5, 4, 0);
2019     test("abcde", 6, 0, "abcdefghij", 5, 5, 0);
2020     test("abcde", 6, 0, "abcdefghij", 5, 6, 0);
2021     test("abcde", 6, 0, "abcdefghij", 9, 0, 0);
2022     test("abcde", 6, 0, "abcdefghij", 9, 1, 0);
2023     test("abcde", 6, 0, "abcdefghij", 9, 2, 0);
2024     test("abcde", 6, 0, "abcdefghij", 10, 0, 0);
2025     test("abcde", 6, 0, "abcdefghij", 10, 1, 0);
2026     test("abcde", 6, 0, "abcdefghij", 11, 0, 0);
2027 }
2028 
test19()2029 void test19()
2030 {
2031     test("abcde", 6, 0, "abcdefghijklmnopqrst", 0, 0, 0);
2032     test("abcde", 6, 0, "abcdefghijklmnopqrst", 0, 1, 0);
2033     test("abcde", 6, 0, "abcdefghijklmnopqrst", 0, 10, 0);
2034     test("abcde", 6, 0, "abcdefghijklmnopqrst", 0, 19, 0);
2035     test("abcde", 6, 0, "abcdefghijklmnopqrst", 0, 20, 0);
2036     test("abcde", 6, 0, "abcdefghijklmnopqrst", 0, 21, 0);
2037     test("abcde", 6, 0, "abcdefghijklmnopqrst", 1, 0, 0);
2038     test("abcde", 6, 0, "abcdefghijklmnopqrst", 1, 1, 0);
2039     test("abcde", 6, 0, "abcdefghijklmnopqrst", 1, 9, 0);
2040     test("abcde", 6, 0, "abcdefghijklmnopqrst", 1, 18, 0);
2041     test("abcde", 6, 0, "abcdefghijklmnopqrst", 1, 19, 0);
2042     test("abcde", 6, 0, "abcdefghijklmnopqrst", 1, 20, 0);
2043     test("abcde", 6, 0, "abcdefghijklmnopqrst", 10, 0, 0);
2044     test("abcde", 6, 0, "abcdefghijklmnopqrst", 10, 1, 0);
2045     test("abcde", 6, 0, "abcdefghijklmnopqrst", 10, 5, 0);
2046     test("abcde", 6, 0, "abcdefghijklmnopqrst", 10, 9, 0);
2047     test("abcde", 6, 0, "abcdefghijklmnopqrst", 10, 10, 0);
2048     test("abcde", 6, 0, "abcdefghijklmnopqrst", 10, 11, 0);
2049     test("abcde", 6, 0, "abcdefghijklmnopqrst", 19, 0, 0);
2050     test("abcde", 6, 0, "abcdefghijklmnopqrst", 19, 1, 0);
2051     test("abcde", 6, 0, "abcdefghijklmnopqrst", 19, 2, 0);
2052     test("abcde", 6, 0, "abcdefghijklmnopqrst", 20, 0, 0);
2053     test("abcde", 6, 0, "abcdefghijklmnopqrst", 20, 1, 0);
2054     test("abcde", 6, 0, "abcdefghijklmnopqrst", 21, 0, 0);
2055     test("abcdefghij", 0, 0, "", 0, 0, 0);
2056     test("abcdefghij", 0, 0, "", 0, 1, 0);
2057     test("abcdefghij", 0, 0, "", 1, 0, 0);
2058     test("abcdefghij", 0, 0, "abcde", 0, 0, 0);
2059     test("abcdefghij", 0, 0, "abcde", 0, 1, -1);
2060     test("abcdefghij", 0, 0, "abcde", 0, 2, -2);
2061     test("abcdefghij", 0, 0, "abcde", 0, 4, -4);
2062     test("abcdefghij", 0, 0, "abcde", 0, 5, -5);
2063     test("abcdefghij", 0, 0, "abcde", 0, 6, -5);
2064     test("abcdefghij", 0, 0, "abcde", 1, 0, 0);
2065     test("abcdefghij", 0, 0, "abcde", 1, 1, -1);
2066     test("abcdefghij", 0, 0, "abcde", 1, 2, -2);
2067     test("abcdefghij", 0, 0, "abcde", 1, 3, -3);
2068     test("abcdefghij", 0, 0, "abcde", 1, 4, -4);
2069     test("abcdefghij", 0, 0, "abcde", 1, 5, -4);
2070     test("abcdefghij", 0, 0, "abcde", 2, 0, 0);
2071     test("abcdefghij", 0, 0, "abcde", 2, 1, -1);
2072     test("abcdefghij", 0, 0, "abcde", 2, 2, -2);
2073     test("abcdefghij", 0, 0, "abcde", 2, 3, -3);
2074     test("abcdefghij", 0, 0, "abcde", 2, 4, -3);
2075     test("abcdefghij", 0, 0, "abcde", 4, 0, 0);
2076     test("abcdefghij", 0, 0, "abcde", 4, 1, -1);
2077     test("abcdefghij", 0, 0, "abcde", 4, 2, -1);
2078     test("abcdefghij", 0, 0, "abcde", 5, 0, 0);
2079     test("abcdefghij", 0, 0, "abcde", 5, 1, 0);
2080     test("abcdefghij", 0, 0, "abcde", 6, 0, 0);
2081     test("abcdefghij", 0, 0, "abcdefghij", 0, 0, 0);
2082     test("abcdefghij", 0, 0, "abcdefghij", 0, 1, -1);
2083     test("abcdefghij", 0, 0, "abcdefghij", 0, 5, -5);
2084     test("abcdefghij", 0, 0, "abcdefghij", 0, 9, -9);
2085     test("abcdefghij", 0, 0, "abcdefghij", 0, 10, -10);
2086     test("abcdefghij", 0, 0, "abcdefghij", 0, 11, -10);
2087     test("abcdefghij", 0, 0, "abcdefghij", 1, 0, 0);
2088     test("abcdefghij", 0, 0, "abcdefghij", 1, 1, -1);
2089     test("abcdefghij", 0, 0, "abcdefghij", 1, 4, -4);
2090     test("abcdefghij", 0, 0, "abcdefghij", 1, 8, -8);
2091     test("abcdefghij", 0, 0, "abcdefghij", 1, 9, -9);
2092     test("abcdefghij", 0, 0, "abcdefghij", 1, 10, -9);
2093     test("abcdefghij", 0, 0, "abcdefghij", 5, 0, 0);
2094     test("abcdefghij", 0, 0, "abcdefghij", 5, 1, -1);
2095     test("abcdefghij", 0, 0, "abcdefghij", 5, 2, -2);
2096     test("abcdefghij", 0, 0, "abcdefghij", 5, 4, -4);
2097     test("abcdefghij", 0, 0, "abcdefghij", 5, 5, -5);
2098     test("abcdefghij", 0, 0, "abcdefghij", 5, 6, -5);
2099     test("abcdefghij", 0, 0, "abcdefghij", 9, 0, 0);
2100     test("abcdefghij", 0, 0, "abcdefghij", 9, 1, -1);
2101     test("abcdefghij", 0, 0, "abcdefghij", 9, 2, -1);
2102     test("abcdefghij", 0, 0, "abcdefghij", 10, 0, 0);
2103     test("abcdefghij", 0, 0, "abcdefghij", 10, 1, 0);
2104     test("abcdefghij", 0, 0, "abcdefghij", 11, 0, 0);
2105     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 0, 0, 0);
2106     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 0, 1, -1);
2107     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 0, 10, -10);
2108     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 0, 19, -19);
2109     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 0, 20, -20);
2110     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 0, 21, -20);
2111     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 1, 0, 0);
2112     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 1, 1, -1);
2113     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 1, 9, -9);
2114     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 1, 18, -18);
2115     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 1, 19, -19);
2116     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 1, 20, -19);
2117     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 10, 0, 0);
2118     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 10, 1, -1);
2119     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 10, 5, -5);
2120     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 10, 9, -9);
2121     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 10, 10, -10);
2122     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 10, 11, -10);
2123     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 19, 0, 0);
2124     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 19, 1, -1);
2125     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 19, 2, -1);
2126     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 20, 0, 0);
2127     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 20, 1, 0);
2128     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 21, 0, 0);
2129     test("abcdefghij", 0, 1, "", 0, 0, 1);
2130     test("abcdefghij", 0, 1, "", 0, 1, 1);
2131 }
2132 
test20()2133 void test20()
2134 {
2135     test("abcdefghij", 0, 1, "", 1, 0, 0);
2136     test("abcdefghij", 0, 1, "abcde", 0, 0, 1);
2137     test("abcdefghij", 0, 1, "abcde", 0, 1, 0);
2138     test("abcdefghij", 0, 1, "abcde", 0, 2, -1);
2139     test("abcdefghij", 0, 1, "abcde", 0, 4, -3);
2140     test("abcdefghij", 0, 1, "abcde", 0, 5, -4);
2141     test("abcdefghij", 0, 1, "abcde", 0, 6, -4);
2142     test("abcdefghij", 0, 1, "abcde", 1, 0, 1);
2143     test("abcdefghij", 0, 1, "abcde", 1, 1, -1);
2144     test("abcdefghij", 0, 1, "abcde", 1, 2, -1);
2145     test("abcdefghij", 0, 1, "abcde", 1, 3, -1);
2146     test("abcdefghij", 0, 1, "abcde", 1, 4, -1);
2147     test("abcdefghij", 0, 1, "abcde", 1, 5, -1);
2148     test("abcdefghij", 0, 1, "abcde", 2, 0, 1);
2149     test("abcdefghij", 0, 1, "abcde", 2, 1, -2);
2150     test("abcdefghij", 0, 1, "abcde", 2, 2, -2);
2151     test("abcdefghij", 0, 1, "abcde", 2, 3, -2);
2152     test("abcdefghij", 0, 1, "abcde", 2, 4, -2);
2153     test("abcdefghij", 0, 1, "abcde", 4, 0, 1);
2154     test("abcdefghij", 0, 1, "abcde", 4, 1, -4);
2155     test("abcdefghij", 0, 1, "abcde", 4, 2, -4);
2156     test("abcdefghij", 0, 1, "abcde", 5, 0, 1);
2157     test("abcdefghij", 0, 1, "abcde", 5, 1, 1);
2158     test("abcdefghij", 0, 1, "abcde", 6, 0, 0);
2159     test("abcdefghij", 0, 1, "abcdefghij", 0, 0, 1);
2160     test("abcdefghij", 0, 1, "abcdefghij", 0, 1, 0);
2161     test("abcdefghij", 0, 1, "abcdefghij", 0, 5, -4);
2162     test("abcdefghij", 0, 1, "abcdefghij", 0, 9, -8);
2163     test("abcdefghij", 0, 1, "abcdefghij", 0, 10, -9);
2164     test("abcdefghij", 0, 1, "abcdefghij", 0, 11, -9);
2165     test("abcdefghij", 0, 1, "abcdefghij", 1, 0, 1);
2166     test("abcdefghij", 0, 1, "abcdefghij", 1, 1, -1);
2167     test("abcdefghij", 0, 1, "abcdefghij", 1, 4, -1);
2168     test("abcdefghij", 0, 1, "abcdefghij", 1, 8, -1);
2169     test("abcdefghij", 0, 1, "abcdefghij", 1, 9, -1);
2170     test("abcdefghij", 0, 1, "abcdefghij", 1, 10, -1);
2171     test("abcdefghij", 0, 1, "abcdefghij", 5, 0, 1);
2172     test("abcdefghij", 0, 1, "abcdefghij", 5, 1, -5);
2173     test("abcdefghij", 0, 1, "abcdefghij", 5, 2, -5);
2174     test("abcdefghij", 0, 1, "abcdefghij", 5, 4, -5);
2175     test("abcdefghij", 0, 1, "abcdefghij", 5, 5, -5);
2176     test("abcdefghij", 0, 1, "abcdefghij", 5, 6, -5);
2177     test("abcdefghij", 0, 1, "abcdefghij", 9, 0, 1);
2178     test("abcdefghij", 0, 1, "abcdefghij", 9, 1, -9);
2179     test("abcdefghij", 0, 1, "abcdefghij", 9, 2, -9);
2180     test("abcdefghij", 0, 1, "abcdefghij", 10, 0, 1);
2181     test("abcdefghij", 0, 1, "abcdefghij", 10, 1, 1);
2182     test("abcdefghij", 0, 1, "abcdefghij", 11, 0, 0);
2183     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 0, 0, 1);
2184     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 0, 1, 0);
2185     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 0, 10, -9);
2186     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 0, 19, -18);
2187     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 0, 20, -19);
2188     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 0, 21, -19);
2189     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 1, 0, 1);
2190     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 1, 1, -1);
2191     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 1, 9, -1);
2192     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 1, 18, -1);
2193     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 1, 19, -1);
2194     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 1, 20, -1);
2195     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 10, 0, 1);
2196     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 10, 1, -10);
2197     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 10, 5, -10);
2198     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 10, 9, -10);
2199     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 10, 10, -10);
2200     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 10, 11, -10);
2201     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 19, 0, 1);
2202     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 19, 1, -19);
2203     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 19, 2, -19);
2204     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 20, 0, 1);
2205     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 20, 1, 1);
2206     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 21, 0, 0);
2207     test("abcdefghij", 0, 5, "", 0, 0, 5);
2208     test("abcdefghij", 0, 5, "", 0, 1, 5);
2209     test("abcdefghij", 0, 5, "", 1, 0, 0);
2210     test("abcdefghij", 0, 5, "abcde", 0, 0, 5);
2211     test("abcdefghij", 0, 5, "abcde", 0, 1, 4);
2212     test("abcdefghij", 0, 5, "abcde", 0, 2, 3);
2213     test("abcdefghij", 0, 5, "abcde", 0, 4, 1);
2214     test("abcdefghij", 0, 5, "abcde", 0, 5, 0);
2215     test("abcdefghij", 0, 5, "abcde", 0, 6, 0);
2216     test("abcdefghij", 0, 5, "abcde", 1, 0, 5);
2217     test("abcdefghij", 0, 5, "abcde", 1, 1, -1);
2218     test("abcdefghij", 0, 5, "abcde", 1, 2, -1);
2219     test("abcdefghij", 0, 5, "abcde", 1, 3, -1);
2220     test("abcdefghij", 0, 5, "abcde", 1, 4, -1);
2221     test("abcdefghij", 0, 5, "abcde", 1, 5, -1);
2222     test("abcdefghij", 0, 5, "abcde", 2, 0, 5);
2223     test("abcdefghij", 0, 5, "abcde", 2, 1, -2);
2224     test("abcdefghij", 0, 5, "abcde", 2, 2, -2);
2225     test("abcdefghij", 0, 5, "abcde", 2, 3, -2);
2226     test("abcdefghij", 0, 5, "abcde", 2, 4, -2);
2227     test("abcdefghij", 0, 5, "abcde", 4, 0, 5);
2228     test("abcdefghij", 0, 5, "abcde", 4, 1, -4);
2229     test("abcdefghij", 0, 5, "abcde", 4, 2, -4);
2230     test("abcdefghij", 0, 5, "abcde", 5, 0, 5);
2231     test("abcdefghij", 0, 5, "abcde", 5, 1, 5);
2232     test("abcdefghij", 0, 5, "abcde", 6, 0, 0);
2233     test("abcdefghij", 0, 5, "abcdefghij", 0, 0, 5);
2234     test("abcdefghij", 0, 5, "abcdefghij", 0, 1, 4);
2235 }
2236 
test21()2237 void test21()
2238 {
2239     test("abcdefghij", 0, 5, "abcdefghij", 0, 5, 0);
2240     test("abcdefghij", 0, 5, "abcdefghij", 0, 9, -4);
2241     test("abcdefghij", 0, 5, "abcdefghij", 0, 10, -5);
2242     test("abcdefghij", 0, 5, "abcdefghij", 0, 11, -5);
2243     test("abcdefghij", 0, 5, "abcdefghij", 1, 0, 5);
2244     test("abcdefghij", 0, 5, "abcdefghij", 1, 1, -1);
2245     test("abcdefghij", 0, 5, "abcdefghij", 1, 4, -1);
2246     test("abcdefghij", 0, 5, "abcdefghij", 1, 8, -1);
2247     test("abcdefghij", 0, 5, "abcdefghij", 1, 9, -1);
2248     test("abcdefghij", 0, 5, "abcdefghij", 1, 10, -1);
2249     test("abcdefghij", 0, 5, "abcdefghij", 5, 0, 5);
2250     test("abcdefghij", 0, 5, "abcdefghij", 5, 1, -5);
2251     test("abcdefghij", 0, 5, "abcdefghij", 5, 2, -5);
2252     test("abcdefghij", 0, 5, "abcdefghij", 5, 4, -5);
2253     test("abcdefghij", 0, 5, "abcdefghij", 5, 5, -5);
2254     test("abcdefghij", 0, 5, "abcdefghij", 5, 6, -5);
2255     test("abcdefghij", 0, 5, "abcdefghij", 9, 0, 5);
2256     test("abcdefghij", 0, 5, "abcdefghij", 9, 1, -9);
2257     test("abcdefghij", 0, 5, "abcdefghij", 9, 2, -9);
2258     test("abcdefghij", 0, 5, "abcdefghij", 10, 0, 5);
2259     test("abcdefghij", 0, 5, "abcdefghij", 10, 1, 5);
2260     test("abcdefghij", 0, 5, "abcdefghij", 11, 0, 0);
2261     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 0, 0, 5);
2262     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 0, 1, 4);
2263     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 0, 10, -5);
2264     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 0, 19, -14);
2265     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 0, 20, -15);
2266     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 0, 21, -15);
2267     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 1, 0, 5);
2268     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 1, 1, -1);
2269     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 1, 9, -1);
2270     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 1, 18, -1);
2271     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 1, 19, -1);
2272     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 1, 20, -1);
2273     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 10, 0, 5);
2274     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 10, 1, -10);
2275     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 10, 5, -10);
2276     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 10, 9, -10);
2277     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 10, 10, -10);
2278     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 10, 11, -10);
2279     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 19, 0, 5);
2280     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 19, 1, -19);
2281     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 19, 2, -19);
2282     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 20, 0, 5);
2283     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 20, 1, 5);
2284     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 21, 0, 0);
2285     test("abcdefghij", 0, 9, "", 0, 0, 9);
2286     test("abcdefghij", 0, 9, "", 0, 1, 9);
2287     test("abcdefghij", 0, 9, "", 1, 0, 0);
2288     test("abcdefghij", 0, 9, "abcde", 0, 0, 9);
2289     test("abcdefghij", 0, 9, "abcde", 0, 1, 8);
2290     test("abcdefghij", 0, 9, "abcde", 0, 2, 7);
2291     test("abcdefghij", 0, 9, "abcde", 0, 4, 5);
2292     test("abcdefghij", 0, 9, "abcde", 0, 5, 4);
2293     test("abcdefghij", 0, 9, "abcde", 0, 6, 4);
2294     test("abcdefghij", 0, 9, "abcde", 1, 0, 9);
2295     test("abcdefghij", 0, 9, "abcde", 1, 1, -1);
2296     test("abcdefghij", 0, 9, "abcde", 1, 2, -1);
2297     test("abcdefghij", 0, 9, "abcde", 1, 3, -1);
2298     test("abcdefghij", 0, 9, "abcde", 1, 4, -1);
2299     test("abcdefghij", 0, 9, "abcde", 1, 5, -1);
2300     test("abcdefghij", 0, 9, "abcde", 2, 0, 9);
2301     test("abcdefghij", 0, 9, "abcde", 2, 1, -2);
2302     test("abcdefghij", 0, 9, "abcde", 2, 2, -2);
2303     test("abcdefghij", 0, 9, "abcde", 2, 3, -2);
2304     test("abcdefghij", 0, 9, "abcde", 2, 4, -2);
2305     test("abcdefghij", 0, 9, "abcde", 4, 0, 9);
2306     test("abcdefghij", 0, 9, "abcde", 4, 1, -4);
2307     test("abcdefghij", 0, 9, "abcde", 4, 2, -4);
2308     test("abcdefghij", 0, 9, "abcde", 5, 0, 9);
2309     test("abcdefghij", 0, 9, "abcde", 5, 1, 9);
2310     test("abcdefghij", 0, 9, "abcde", 6, 0, 0);
2311     test("abcdefghij", 0, 9, "abcdefghij", 0, 0, 9);
2312     test("abcdefghij", 0, 9, "abcdefghij", 0, 1, 8);
2313     test("abcdefghij", 0, 9, "abcdefghij", 0, 5, 4);
2314     test("abcdefghij", 0, 9, "abcdefghij", 0, 9, 0);
2315     test("abcdefghij", 0, 9, "abcdefghij", 0, 10, -1);
2316     test("abcdefghij", 0, 9, "abcdefghij", 0, 11, -1);
2317     test("abcdefghij", 0, 9, "abcdefghij", 1, 0, 9);
2318     test("abcdefghij", 0, 9, "abcdefghij", 1, 1, -1);
2319     test("abcdefghij", 0, 9, "abcdefghij", 1, 4, -1);
2320     test("abcdefghij", 0, 9, "abcdefghij", 1, 8, -1);
2321     test("abcdefghij", 0, 9, "abcdefghij", 1, 9, -1);
2322     test("abcdefghij", 0, 9, "abcdefghij", 1, 10, -1);
2323     test("abcdefghij", 0, 9, "abcdefghij", 5, 0, 9);
2324     test("abcdefghij", 0, 9, "abcdefghij", 5, 1, -5);
2325     test("abcdefghij", 0, 9, "abcdefghij", 5, 2, -5);
2326     test("abcdefghij", 0, 9, "abcdefghij", 5, 4, -5);
2327     test("abcdefghij", 0, 9, "abcdefghij", 5, 5, -5);
2328     test("abcdefghij", 0, 9, "abcdefghij", 5, 6, -5);
2329     test("abcdefghij", 0, 9, "abcdefghij", 9, 0, 9);
2330     test("abcdefghij", 0, 9, "abcdefghij", 9, 1, -9);
2331     test("abcdefghij", 0, 9, "abcdefghij", 9, 2, -9);
2332     test("abcdefghij", 0, 9, "abcdefghij", 10, 0, 9);
2333     test("abcdefghij", 0, 9, "abcdefghij", 10, 1, 9);
2334     test("abcdefghij", 0, 9, "abcdefghij", 11, 0, 0);
2335     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 0, 0, 9);
2336     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 0, 1, 8);
2337     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 0, 10, -1);
2338     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 0, 19, -10);
2339 }
2340 
test22()2341 void test22()
2342 {
2343     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 0, 20, -11);
2344     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 0, 21, -11);
2345     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 1, 0, 9);
2346     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 1, 1, -1);
2347     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 1, 9, -1);
2348     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 1, 18, -1);
2349     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 1, 19, -1);
2350     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 1, 20, -1);
2351     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 10, 0, 9);
2352     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 10, 1, -10);
2353     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 10, 5, -10);
2354     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 10, 9, -10);
2355     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 10, 10, -10);
2356     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 10, 11, -10);
2357     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 19, 0, 9);
2358     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 19, 1, -19);
2359     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 19, 2, -19);
2360     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 20, 0, 9);
2361     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 20, 1, 9);
2362     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 21, 0, 0);
2363     test("abcdefghij", 0, 10, "", 0, 0, 10);
2364     test("abcdefghij", 0, 10, "", 0, 1, 10);
2365     test("abcdefghij", 0, 10, "", 1, 0, 0);
2366     test("abcdefghij", 0, 10, "abcde", 0, 0, 10);
2367     test("abcdefghij", 0, 10, "abcde", 0, 1, 9);
2368     test("abcdefghij", 0, 10, "abcde", 0, 2, 8);
2369     test("abcdefghij", 0, 10, "abcde", 0, 4, 6);
2370     test("abcdefghij", 0, 10, "abcde", 0, 5, 5);
2371     test("abcdefghij", 0, 10, "abcde", 0, 6, 5);
2372     test("abcdefghij", 0, 10, "abcde", 1, 0, 10);
2373     test("abcdefghij", 0, 10, "abcde", 1, 1, -1);
2374     test("abcdefghij", 0, 10, "abcde", 1, 2, -1);
2375     test("abcdefghij", 0, 10, "abcde", 1, 3, -1);
2376     test("abcdefghij", 0, 10, "abcde", 1, 4, -1);
2377     test("abcdefghij", 0, 10, "abcde", 1, 5, -1);
2378     test("abcdefghij", 0, 10, "abcde", 2, 0, 10);
2379     test("abcdefghij", 0, 10, "abcde", 2, 1, -2);
2380     test("abcdefghij", 0, 10, "abcde", 2, 2, -2);
2381     test("abcdefghij", 0, 10, "abcde", 2, 3, -2);
2382     test("abcdefghij", 0, 10, "abcde", 2, 4, -2);
2383     test("abcdefghij", 0, 10, "abcde", 4, 0, 10);
2384     test("abcdefghij", 0, 10, "abcde", 4, 1, -4);
2385     test("abcdefghij", 0, 10, "abcde", 4, 2, -4);
2386     test("abcdefghij", 0, 10, "abcde", 5, 0, 10);
2387     test("abcdefghij", 0, 10, "abcde", 5, 1, 10);
2388     test("abcdefghij", 0, 10, "abcde", 6, 0, 0);
2389     test("abcdefghij", 0, 10, "abcdefghij", 0, 0, 10);
2390     test("abcdefghij", 0, 10, "abcdefghij", 0, 1, 9);
2391     test("abcdefghij", 0, 10, "abcdefghij", 0, 5, 5);
2392     test("abcdefghij", 0, 10, "abcdefghij", 0, 9, 1);
2393     test("abcdefghij", 0, 10, "abcdefghij", 0, 10, 0);
2394     test("abcdefghij", 0, 10, "abcdefghij", 0, 11, 0);
2395     test("abcdefghij", 0, 10, "abcdefghij", 1, 0, 10);
2396     test("abcdefghij", 0, 10, "abcdefghij", 1, 1, -1);
2397     test("abcdefghij", 0, 10, "abcdefghij", 1, 4, -1);
2398     test("abcdefghij", 0, 10, "abcdefghij", 1, 8, -1);
2399     test("abcdefghij", 0, 10, "abcdefghij", 1, 9, -1);
2400     test("abcdefghij", 0, 10, "abcdefghij", 1, 10, -1);
2401     test("abcdefghij", 0, 10, "abcdefghij", 5, 0, 10);
2402     test("abcdefghij", 0, 10, "abcdefghij", 5, 1, -5);
2403     test("abcdefghij", 0, 10, "abcdefghij", 5, 2, -5);
2404     test("abcdefghij", 0, 10, "abcdefghij", 5, 4, -5);
2405     test("abcdefghij", 0, 10, "abcdefghij", 5, 5, -5);
2406     test("abcdefghij", 0, 10, "abcdefghij", 5, 6, -5);
2407     test("abcdefghij", 0, 10, "abcdefghij", 9, 0, 10);
2408     test("abcdefghij", 0, 10, "abcdefghij", 9, 1, -9);
2409     test("abcdefghij", 0, 10, "abcdefghij", 9, 2, -9);
2410     test("abcdefghij", 0, 10, "abcdefghij", 10, 0, 10);
2411     test("abcdefghij", 0, 10, "abcdefghij", 10, 1, 10);
2412     test("abcdefghij", 0, 10, "abcdefghij", 11, 0, 0);
2413     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 0, 0, 10);
2414     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 0, 1, 9);
2415     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 0, 10, 0);
2416     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 0, 19, -9);
2417     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 0, 20, -10);
2418     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 0, 21, -10);
2419     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 1, 0, 10);
2420     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 1, 1, -1);
2421     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 1, 9, -1);
2422     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 1, 18, -1);
2423     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 1, 19, -1);
2424     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 1, 20, -1);
2425     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 10, 0, 10);
2426     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 10, 1, -10);
2427     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 10, 5, -10);
2428     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 10, 9, -10);
2429     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 10, 10, -10);
2430     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 10, 11, -10);
2431     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 19, 0, 10);
2432     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 19, 1, -19);
2433     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 19, 2, -19);
2434     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 20, 0, 10);
2435     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 20, 1, 10);
2436     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 21, 0, 0);
2437     test("abcdefghij", 0, 11, "", 0, 0, 10);
2438     test("abcdefghij", 0, 11, "", 0, 1, 10);
2439     test("abcdefghij", 0, 11, "", 1, 0, 0);
2440     test("abcdefghij", 0, 11, "abcde", 0, 0, 10);
2441     test("abcdefghij", 0, 11, "abcde", 0, 1, 9);
2442     test("abcdefghij", 0, 11, "abcde", 0, 2, 8);
2443 }
2444 
test23()2445 void test23()
2446 {
2447     test("abcdefghij", 0, 11, "abcde", 0, 4, 6);
2448     test("abcdefghij", 0, 11, "abcde", 0, 5, 5);
2449     test("abcdefghij", 0, 11, "abcde", 0, 6, 5);
2450     test("abcdefghij", 0, 11, "abcde", 1, 0, 10);
2451     test("abcdefghij", 0, 11, "abcde", 1, 1, -1);
2452     test("abcdefghij", 0, 11, "abcde", 1, 2, -1);
2453     test("abcdefghij", 0, 11, "abcde", 1, 3, -1);
2454     test("abcdefghij", 0, 11, "abcde", 1, 4, -1);
2455     test("abcdefghij", 0, 11, "abcde", 1, 5, -1);
2456     test("abcdefghij", 0, 11, "abcde", 2, 0, 10);
2457     test("abcdefghij", 0, 11, "abcde", 2, 1, -2);
2458     test("abcdefghij", 0, 11, "abcde", 2, 2, -2);
2459     test("abcdefghij", 0, 11, "abcde", 2, 3, -2);
2460     test("abcdefghij", 0, 11, "abcde", 2, 4, -2);
2461     test("abcdefghij", 0, 11, "abcde", 4, 0, 10);
2462     test("abcdefghij", 0, 11, "abcde", 4, 1, -4);
2463     test("abcdefghij", 0, 11, "abcde", 4, 2, -4);
2464     test("abcdefghij", 0, 11, "abcde", 5, 0, 10);
2465     test("abcdefghij", 0, 11, "abcde", 5, 1, 10);
2466     test("abcdefghij", 0, 11, "abcde", 6, 0, 0);
2467     test("abcdefghij", 0, 11, "abcdefghij", 0, 0, 10);
2468     test("abcdefghij", 0, 11, "abcdefghij", 0, 1, 9);
2469     test("abcdefghij", 0, 11, "abcdefghij", 0, 5, 5);
2470     test("abcdefghij", 0, 11, "abcdefghij", 0, 9, 1);
2471     test("abcdefghij", 0, 11, "abcdefghij", 0, 10, 0);
2472     test("abcdefghij", 0, 11, "abcdefghij", 0, 11, 0);
2473     test("abcdefghij", 0, 11, "abcdefghij", 1, 0, 10);
2474     test("abcdefghij", 0, 11, "abcdefghij", 1, 1, -1);
2475     test("abcdefghij", 0, 11, "abcdefghij", 1, 4, -1);
2476     test("abcdefghij", 0, 11, "abcdefghij", 1, 8, -1);
2477     test("abcdefghij", 0, 11, "abcdefghij", 1, 9, -1);
2478     test("abcdefghij", 0, 11, "abcdefghij", 1, 10, -1);
2479     test("abcdefghij", 0, 11, "abcdefghij", 5, 0, 10);
2480     test("abcdefghij", 0, 11, "abcdefghij", 5, 1, -5);
2481     test("abcdefghij", 0, 11, "abcdefghij", 5, 2, -5);
2482     test("abcdefghij", 0, 11, "abcdefghij", 5, 4, -5);
2483     test("abcdefghij", 0, 11, "abcdefghij", 5, 5, -5);
2484     test("abcdefghij", 0, 11, "abcdefghij", 5, 6, -5);
2485     test("abcdefghij", 0, 11, "abcdefghij", 9, 0, 10);
2486     test("abcdefghij", 0, 11, "abcdefghij", 9, 1, -9);
2487     test("abcdefghij", 0, 11, "abcdefghij", 9, 2, -9);
2488     test("abcdefghij", 0, 11, "abcdefghij", 10, 0, 10);
2489     test("abcdefghij", 0, 11, "abcdefghij", 10, 1, 10);
2490     test("abcdefghij", 0, 11, "abcdefghij", 11, 0, 0);
2491     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 0, 0, 10);
2492     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 0, 1, 9);
2493     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 0, 10, 0);
2494     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 0, 19, -9);
2495     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 0, 20, -10);
2496     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 0, 21, -10);
2497     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 1, 0, 10);
2498     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 1, 1, -1);
2499     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 1, 9, -1);
2500     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 1, 18, -1);
2501     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 1, 19, -1);
2502     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 1, 20, -1);
2503     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 10, 0, 10);
2504     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 10, 1, -10);
2505     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 10, 5, -10);
2506     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 10, 9, -10);
2507     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 10, 10, -10);
2508     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 10, 11, -10);
2509     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 19, 0, 10);
2510     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 19, 1, -19);
2511     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 19, 2, -19);
2512     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 20, 0, 10);
2513     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 20, 1, 10);
2514     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 21, 0, 0);
2515     test("abcdefghij", 1, 0, "", 0, 0, 0);
2516     test("abcdefghij", 1, 0, "", 0, 1, 0);
2517     test("abcdefghij", 1, 0, "", 1, 0, 0);
2518     test("abcdefghij", 1, 0, "abcde", 0, 0, 0);
2519     test("abcdefghij", 1, 0, "abcde", 0, 1, -1);
2520     test("abcdefghij", 1, 0, "abcde", 0, 2, -2);
2521     test("abcdefghij", 1, 0, "abcde", 0, 4, -4);
2522     test("abcdefghij", 1, 0, "abcde", 0, 5, -5);
2523     test("abcdefghij", 1, 0, "abcde", 0, 6, -5);
2524     test("abcdefghij", 1, 0, "abcde", 1, 0, 0);
2525     test("abcdefghij", 1, 0, "abcde", 1, 1, -1);
2526     test("abcdefghij", 1, 0, "abcde", 1, 2, -2);
2527     test("abcdefghij", 1, 0, "abcde", 1, 3, -3);
2528     test("abcdefghij", 1, 0, "abcde", 1, 4, -4);
2529     test("abcdefghij", 1, 0, "abcde", 1, 5, -4);
2530     test("abcdefghij", 1, 0, "abcde", 2, 0, 0);
2531     test("abcdefghij", 1, 0, "abcde", 2, 1, -1);
2532     test("abcdefghij", 1, 0, "abcde", 2, 2, -2);
2533     test("abcdefghij", 1, 0, "abcde", 2, 3, -3);
2534     test("abcdefghij", 1, 0, "abcde", 2, 4, -3);
2535     test("abcdefghij", 1, 0, "abcde", 4, 0, 0);
2536     test("abcdefghij", 1, 0, "abcde", 4, 1, -1);
2537     test("abcdefghij", 1, 0, "abcde", 4, 2, -1);
2538     test("abcdefghij", 1, 0, "abcde", 5, 0, 0);
2539     test("abcdefghij", 1, 0, "abcde", 5, 1, 0);
2540     test("abcdefghij", 1, 0, "abcde", 6, 0, 0);
2541     test("abcdefghij", 1, 0, "abcdefghij", 0, 0, 0);
2542     test("abcdefghij", 1, 0, "abcdefghij", 0, 1, -1);
2543     test("abcdefghij", 1, 0, "abcdefghij", 0, 5, -5);
2544     test("abcdefghij", 1, 0, "abcdefghij", 0, 9, -9);
2545     test("abcdefghij", 1, 0, "abcdefghij", 0, 10, -10);
2546     test("abcdefghij", 1, 0, "abcdefghij", 0, 11, -10);
2547 }
2548 
test24()2549 void test24()
2550 {
2551     test("abcdefghij", 1, 0, "abcdefghij", 1, 0, 0);
2552     test("abcdefghij", 1, 0, "abcdefghij", 1, 1, -1);
2553     test("abcdefghij", 1, 0, "abcdefghij", 1, 4, -4);
2554     test("abcdefghij", 1, 0, "abcdefghij", 1, 8, -8);
2555     test("abcdefghij", 1, 0, "abcdefghij", 1, 9, -9);
2556     test("abcdefghij", 1, 0, "abcdefghij", 1, 10, -9);
2557     test("abcdefghij", 1, 0, "abcdefghij", 5, 0, 0);
2558     test("abcdefghij", 1, 0, "abcdefghij", 5, 1, -1);
2559     test("abcdefghij", 1, 0, "abcdefghij", 5, 2, -2);
2560     test("abcdefghij", 1, 0, "abcdefghij", 5, 4, -4);
2561     test("abcdefghij", 1, 0, "abcdefghij", 5, 5, -5);
2562     test("abcdefghij", 1, 0, "abcdefghij", 5, 6, -5);
2563     test("abcdefghij", 1, 0, "abcdefghij", 9, 0, 0);
2564     test("abcdefghij", 1, 0, "abcdefghij", 9, 1, -1);
2565     test("abcdefghij", 1, 0, "abcdefghij", 9, 2, -1);
2566     test("abcdefghij", 1, 0, "abcdefghij", 10, 0, 0);
2567     test("abcdefghij", 1, 0, "abcdefghij", 10, 1, 0);
2568     test("abcdefghij", 1, 0, "abcdefghij", 11, 0, 0);
2569     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 0, 0, 0);
2570     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 0, 1, -1);
2571     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 0, 10, -10);
2572     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 0, 19, -19);
2573     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 0, 20, -20);
2574     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 0, 21, -20);
2575     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 1, 0, 0);
2576     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 1, 1, -1);
2577     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 1, 9, -9);
2578     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 1, 18, -18);
2579     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 1, 19, -19);
2580     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 1, 20, -19);
2581     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 10, 0, 0);
2582     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 10, 1, -1);
2583     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 10, 5, -5);
2584     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 10, 9, -9);
2585     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 10, 10, -10);
2586     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 10, 11, -10);
2587     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 19, 0, 0);
2588     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 19, 1, -1);
2589     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 19, 2, -1);
2590     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 20, 0, 0);
2591     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 20, 1, 0);
2592     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 21, 0, 0);
2593     test("abcdefghij", 1, 1, "", 0, 0, 1);
2594     test("abcdefghij", 1, 1, "", 0, 1, 1);
2595     test("abcdefghij", 1, 1, "", 1, 0, 0);
2596     test("abcdefghij", 1, 1, "abcde", 0, 0, 1);
2597     test("abcdefghij", 1, 1, "abcde", 0, 1, 1);
2598     test("abcdefghij", 1, 1, "abcde", 0, 2, 1);
2599     test("abcdefghij", 1, 1, "abcde", 0, 4, 1);
2600     test("abcdefghij", 1, 1, "abcde", 0, 5, 1);
2601     test("abcdefghij", 1, 1, "abcde", 0, 6, 1);
2602     test("abcdefghij", 1, 1, "abcde", 1, 0, 1);
2603     test("abcdefghij", 1, 1, "abcde", 1, 1, 0);
2604     test("abcdefghij", 1, 1, "abcde", 1, 2, -1);
2605     test("abcdefghij", 1, 1, "abcde", 1, 3, -2);
2606     test("abcdefghij", 1, 1, "abcde", 1, 4, -3);
2607     test("abcdefghij", 1, 1, "abcde", 1, 5, -3);
2608     test("abcdefghij", 1, 1, "abcde", 2, 0, 1);
2609     test("abcdefghij", 1, 1, "abcde", 2, 1, -1);
2610     test("abcdefghij", 1, 1, "abcde", 2, 2, -1);
2611     test("abcdefghij", 1, 1, "abcde", 2, 3, -1);
2612     test("abcdefghij", 1, 1, "abcde", 2, 4, -1);
2613     test("abcdefghij", 1, 1, "abcde", 4, 0, 1);
2614     test("abcdefghij", 1, 1, "abcde", 4, 1, -3);
2615     test("abcdefghij", 1, 1, "abcde", 4, 2, -3);
2616     test("abcdefghij", 1, 1, "abcde", 5, 0, 1);
2617     test("abcdefghij", 1, 1, "abcde", 5, 1, 1);
2618     test("abcdefghij", 1, 1, "abcde", 6, 0, 0);
2619     test("abcdefghij", 1, 1, "abcdefghij", 0, 0, 1);
2620     test("abcdefghij", 1, 1, "abcdefghij", 0, 1, 1);
2621     test("abcdefghij", 1, 1, "abcdefghij", 0, 5, 1);
2622     test("abcdefghij", 1, 1, "abcdefghij", 0, 9, 1);
2623     test("abcdefghij", 1, 1, "abcdefghij", 0, 10, 1);
2624     test("abcdefghij", 1, 1, "abcdefghij", 0, 11, 1);
2625     test("abcdefghij", 1, 1, "abcdefghij", 1, 0, 1);
2626     test("abcdefghij", 1, 1, "abcdefghij", 1, 1, 0);
2627     test("abcdefghij", 1, 1, "abcdefghij", 1, 4, -3);
2628     test("abcdefghij", 1, 1, "abcdefghij", 1, 8, -7);
2629     test("abcdefghij", 1, 1, "abcdefghij", 1, 9, -8);
2630     test("abcdefghij", 1, 1, "abcdefghij", 1, 10, -8);
2631     test("abcdefghij", 1, 1, "abcdefghij", 5, 0, 1);
2632     test("abcdefghij", 1, 1, "abcdefghij", 5, 1, -4);
2633     test("abcdefghij", 1, 1, "abcdefghij", 5, 2, -4);
2634     test("abcdefghij", 1, 1, "abcdefghij", 5, 4, -4);
2635     test("abcdefghij", 1, 1, "abcdefghij", 5, 5, -4);
2636     test("abcdefghij", 1, 1, "abcdefghij", 5, 6, -4);
2637     test("abcdefghij", 1, 1, "abcdefghij", 9, 0, 1);
2638     test("abcdefghij", 1, 1, "abcdefghij", 9, 1, -8);
2639     test("abcdefghij", 1, 1, "abcdefghij", 9, 2, -8);
2640     test("abcdefghij", 1, 1, "abcdefghij", 10, 0, 1);
2641     test("abcdefghij", 1, 1, "abcdefghij", 10, 1, 1);
2642     test("abcdefghij", 1, 1, "abcdefghij", 11, 0, 0);
2643     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 0, 0, 1);
2644     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 0, 1, 1);
2645     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 0, 10, 1);
2646     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 0, 19, 1);
2647     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 0, 20, 1);
2648     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 0, 21, 1);
2649     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1, 0, 1);
2650     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1, 1, 0);
2651 }
2652 
test25()2653 void test25()
2654 {
2655     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1, 9, -8);
2656     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1, 18, -17);
2657     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1, 19, -18);
2658     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1, 20, -18);
2659     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 10, 0, 1);
2660     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 10, 1, -9);
2661     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 10, 5, -9);
2662     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 10, 9, -9);
2663     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 10, 10, -9);
2664     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 10, 11, -9);
2665     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 19, 0, 1);
2666     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 19, 1, -18);
2667     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 19, 2, -18);
2668     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 20, 0, 1);
2669     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 20, 1, 1);
2670     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 21, 0, 0);
2671     test("abcdefghij", 1, 4, "", 0, 0, 4);
2672     test("abcdefghij", 1, 4, "", 0, 1, 4);
2673     test("abcdefghij", 1, 4, "", 1, 0, 0);
2674     test("abcdefghij", 1, 4, "abcde", 0, 0, 4);
2675     test("abcdefghij", 1, 4, "abcde", 0, 1, 1);
2676     test("abcdefghij", 1, 4, "abcde", 0, 2, 1);
2677     test("abcdefghij", 1, 4, "abcde", 0, 4, 1);
2678     test("abcdefghij", 1, 4, "abcde", 0, 5, 1);
2679     test("abcdefghij", 1, 4, "abcde", 0, 6, 1);
2680     test("abcdefghij", 1, 4, "abcde", 1, 0, 4);
2681     test("abcdefghij", 1, 4, "abcde", 1, 1, 3);
2682     test("abcdefghij", 1, 4, "abcde", 1, 2, 2);
2683     test("abcdefghij", 1, 4, "abcde", 1, 3, 1);
2684     test("abcdefghij", 1, 4, "abcde", 1, 4, 0);
2685     test("abcdefghij", 1, 4, "abcde", 1, 5, 0);
2686     test("abcdefghij", 1, 4, "abcde", 2, 0, 4);
2687     test("abcdefghij", 1, 4, "abcde", 2, 1, -1);
2688     test("abcdefghij", 1, 4, "abcde", 2, 2, -1);
2689     test("abcdefghij", 1, 4, "abcde", 2, 3, -1);
2690     test("abcdefghij", 1, 4, "abcde", 2, 4, -1);
2691     test("abcdefghij", 1, 4, "abcde", 4, 0, 4);
2692     test("abcdefghij", 1, 4, "abcde", 4, 1, -3);
2693     test("abcdefghij", 1, 4, "abcde", 4, 2, -3);
2694     test("abcdefghij", 1, 4, "abcde", 5, 0, 4);
2695     test("abcdefghij", 1, 4, "abcde", 5, 1, 4);
2696     test("abcdefghij", 1, 4, "abcde", 6, 0, 0);
2697     test("abcdefghij", 1, 4, "abcdefghij", 0, 0, 4);
2698     test("abcdefghij", 1, 4, "abcdefghij", 0, 1, 1);
2699     test("abcdefghij", 1, 4, "abcdefghij", 0, 5, 1);
2700     test("abcdefghij", 1, 4, "abcdefghij", 0, 9, 1);
2701     test("abcdefghij", 1, 4, "abcdefghij", 0, 10, 1);
2702     test("abcdefghij", 1, 4, "abcdefghij", 0, 11, 1);
2703     test("abcdefghij", 1, 4, "abcdefghij", 1, 0, 4);
2704     test("abcdefghij", 1, 4, "abcdefghij", 1, 1, 3);
2705     test("abcdefghij", 1, 4, "abcdefghij", 1, 4, 0);
2706     test("abcdefghij", 1, 4, "abcdefghij", 1, 8, -4);
2707     test("abcdefghij", 1, 4, "abcdefghij", 1, 9, -5);
2708     test("abcdefghij", 1, 4, "abcdefghij", 1, 10, -5);
2709     test("abcdefghij", 1, 4, "abcdefghij", 5, 0, 4);
2710     test("abcdefghij", 1, 4, "abcdefghij", 5, 1, -4);
2711     test("abcdefghij", 1, 4, "abcdefghij", 5, 2, -4);
2712     test("abcdefghij", 1, 4, "abcdefghij", 5, 4, -4);
2713     test("abcdefghij", 1, 4, "abcdefghij", 5, 5, -4);
2714     test("abcdefghij", 1, 4, "abcdefghij", 5, 6, -4);
2715     test("abcdefghij", 1, 4, "abcdefghij", 9, 0, 4);
2716     test("abcdefghij", 1, 4, "abcdefghij", 9, 1, -8);
2717     test("abcdefghij", 1, 4, "abcdefghij", 9, 2, -8);
2718     test("abcdefghij", 1, 4, "abcdefghij", 10, 0, 4);
2719     test("abcdefghij", 1, 4, "abcdefghij", 10, 1, 4);
2720     test("abcdefghij", 1, 4, "abcdefghij", 11, 0, 0);
2721     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 0, 0, 4);
2722     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 0, 1, 1);
2723     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 0, 10, 1);
2724     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 0, 19, 1);
2725     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 0, 20, 1);
2726     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 0, 21, 1);
2727     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1, 0, 4);
2728     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1, 1, 3);
2729     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1, 9, -5);
2730     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1, 18, -14);
2731     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1, 19, -15);
2732     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1, 20, -15);
2733     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 10, 0, 4);
2734     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 10, 1, -9);
2735     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 10, 5, -9);
2736     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 10, 9, -9);
2737     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 10, 10, -9);
2738     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 10, 11, -9);
2739     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 19, 0, 4);
2740     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 19, 1, -18);
2741     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 19, 2, -18);
2742     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 20, 0, 4);
2743     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 20, 1, 4);
2744     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 21, 0, 0);
2745     test("abcdefghij", 1, 8, "", 0, 0, 8);
2746     test("abcdefghij", 1, 8, "", 0, 1, 8);
2747     test("abcdefghij", 1, 8, "", 1, 0, 0);
2748     test("abcdefghij", 1, 8, "abcde", 0, 0, 8);
2749     test("abcdefghij", 1, 8, "abcde", 0, 1, 1);
2750     test("abcdefghij", 1, 8, "abcde", 0, 2, 1);
2751     test("abcdefghij", 1, 8, "abcde", 0, 4, 1);
2752     test("abcdefghij", 1, 8, "abcde", 0, 5, 1);
2753     test("abcdefghij", 1, 8, "abcde", 0, 6, 1);
2754     test("abcdefghij", 1, 8, "abcde", 1, 0, 8);
2755 }
2756 
test26()2757 void test26()
2758 {
2759     test("abcdefghij", 1, 8, "abcde", 1, 1, 7);
2760     test("abcdefghij", 1, 8, "abcde", 1, 2, 6);
2761     test("abcdefghij", 1, 8, "abcde", 1, 3, 5);
2762     test("abcdefghij", 1, 8, "abcde", 1, 4, 4);
2763     test("abcdefghij", 1, 8, "abcde", 1, 5, 4);
2764     test("abcdefghij", 1, 8, "abcde", 2, 0, 8);
2765     test("abcdefghij", 1, 8, "abcde", 2, 1, -1);
2766     test("abcdefghij", 1, 8, "abcde", 2, 2, -1);
2767     test("abcdefghij", 1, 8, "abcde", 2, 3, -1);
2768     test("abcdefghij", 1, 8, "abcde", 2, 4, -1);
2769     test("abcdefghij", 1, 8, "abcde", 4, 0, 8);
2770     test("abcdefghij", 1, 8, "abcde", 4, 1, -3);
2771     test("abcdefghij", 1, 8, "abcde", 4, 2, -3);
2772     test("abcdefghij", 1, 8, "abcde", 5, 0, 8);
2773     test("abcdefghij", 1, 8, "abcde", 5, 1, 8);
2774     test("abcdefghij", 1, 8, "abcde", 6, 0, 0);
2775     test("abcdefghij", 1, 8, "abcdefghij", 0, 0, 8);
2776     test("abcdefghij", 1, 8, "abcdefghij", 0, 1, 1);
2777     test("abcdefghij", 1, 8, "abcdefghij", 0, 5, 1);
2778     test("abcdefghij", 1, 8, "abcdefghij", 0, 9, 1);
2779     test("abcdefghij", 1, 8, "abcdefghij", 0, 10, 1);
2780     test("abcdefghij", 1, 8, "abcdefghij", 0, 11, 1);
2781     test("abcdefghij", 1, 8, "abcdefghij", 1, 0, 8);
2782     test("abcdefghij", 1, 8, "abcdefghij", 1, 1, 7);
2783     test("abcdefghij", 1, 8, "abcdefghij", 1, 4, 4);
2784     test("abcdefghij", 1, 8, "abcdefghij", 1, 8, 0);
2785     test("abcdefghij", 1, 8, "abcdefghij", 1, 9, -1);
2786     test("abcdefghij", 1, 8, "abcdefghij", 1, 10, -1);
2787     test("abcdefghij", 1, 8, "abcdefghij", 5, 0, 8);
2788     test("abcdefghij", 1, 8, "abcdefghij", 5, 1, -4);
2789     test("abcdefghij", 1, 8, "abcdefghij", 5, 2, -4);
2790     test("abcdefghij", 1, 8, "abcdefghij", 5, 4, -4);
2791     test("abcdefghij", 1, 8, "abcdefghij", 5, 5, -4);
2792     test("abcdefghij", 1, 8, "abcdefghij", 5, 6, -4);
2793     test("abcdefghij", 1, 8, "abcdefghij", 9, 0, 8);
2794     test("abcdefghij", 1, 8, "abcdefghij", 9, 1, -8);
2795     test("abcdefghij", 1, 8, "abcdefghij", 9, 2, -8);
2796     test("abcdefghij", 1, 8, "abcdefghij", 10, 0, 8);
2797     test("abcdefghij", 1, 8, "abcdefghij", 10, 1, 8);
2798     test("abcdefghij", 1, 8, "abcdefghij", 11, 0, 0);
2799     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 0, 0, 8);
2800     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 0, 1, 1);
2801     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 0, 10, 1);
2802     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 0, 19, 1);
2803     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 0, 20, 1);
2804     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 0, 21, 1);
2805     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1, 0, 8);
2806     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1, 1, 7);
2807     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1, 9, -1);
2808     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1, 18, -10);
2809     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1, 19, -11);
2810     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1, 20, -11);
2811     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 10, 0, 8);
2812     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 10, 1, -9);
2813     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 10, 5, -9);
2814     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 10, 9, -9);
2815     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 10, 10, -9);
2816     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 10, 11, -9);
2817     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 19, 0, 8);
2818     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 19, 1, -18);
2819     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 19, 2, -18);
2820     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 20, 0, 8);
2821     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 20, 1, 8);
2822     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 21, 0, 0);
2823     test("abcdefghij", 1, 9, "", 0, 0, 9);
2824     test("abcdefghij", 1, 9, "", 0, 1, 9);
2825     test("abcdefghij", 1, 9, "", 1, 0, 0);
2826     test("abcdefghij", 1, 9, "abcde", 0, 0, 9);
2827     test("abcdefghij", 1, 9, "abcde", 0, 1, 1);
2828     test("abcdefghij", 1, 9, "abcde", 0, 2, 1);
2829     test("abcdefghij", 1, 9, "abcde", 0, 4, 1);
2830     test("abcdefghij", 1, 9, "abcde", 0, 5, 1);
2831     test("abcdefghij", 1, 9, "abcde", 0, 6, 1);
2832     test("abcdefghij", 1, 9, "abcde", 1, 0, 9);
2833     test("abcdefghij", 1, 9, "abcde", 1, 1, 8);
2834     test("abcdefghij", 1, 9, "abcde", 1, 2, 7);
2835     test("abcdefghij", 1, 9, "abcde", 1, 3, 6);
2836     test("abcdefghij", 1, 9, "abcde", 1, 4, 5);
2837     test("abcdefghij", 1, 9, "abcde", 1, 5, 5);
2838     test("abcdefghij", 1, 9, "abcde", 2, 0, 9);
2839     test("abcdefghij", 1, 9, "abcde", 2, 1, -1);
2840     test("abcdefghij", 1, 9, "abcde", 2, 2, -1);
2841     test("abcdefghij", 1, 9, "abcde", 2, 3, -1);
2842     test("abcdefghij", 1, 9, "abcde", 2, 4, -1);
2843     test("abcdefghij", 1, 9, "abcde", 4, 0, 9);
2844     test("abcdefghij", 1, 9, "abcde", 4, 1, -3);
2845     test("abcdefghij", 1, 9, "abcde", 4, 2, -3);
2846     test("abcdefghij", 1, 9, "abcde", 5, 0, 9);
2847     test("abcdefghij", 1, 9, "abcde", 5, 1, 9);
2848     test("abcdefghij", 1, 9, "abcde", 6, 0, 0);
2849     test("abcdefghij", 1, 9, "abcdefghij", 0, 0, 9);
2850     test("abcdefghij", 1, 9, "abcdefghij", 0, 1, 1);
2851     test("abcdefghij", 1, 9, "abcdefghij", 0, 5, 1);
2852     test("abcdefghij", 1, 9, "abcdefghij", 0, 9, 1);
2853     test("abcdefghij", 1, 9, "abcdefghij", 0, 10, 1);
2854     test("abcdefghij", 1, 9, "abcdefghij", 0, 11, 1);
2855     test("abcdefghij", 1, 9, "abcdefghij", 1, 0, 9);
2856     test("abcdefghij", 1, 9, "abcdefghij", 1, 1, 8);
2857     test("abcdefghij", 1, 9, "abcdefghij", 1, 4, 5);
2858     test("abcdefghij", 1, 9, "abcdefghij", 1, 8, 1);
2859 }
2860 
test27()2861 void test27()
2862 {
2863     test("abcdefghij", 1, 9, "abcdefghij", 1, 9, 0);
2864     test("abcdefghij", 1, 9, "abcdefghij", 1, 10, 0);
2865     test("abcdefghij", 1, 9, "abcdefghij", 5, 0, 9);
2866     test("abcdefghij", 1, 9, "abcdefghij", 5, 1, -4);
2867     test("abcdefghij", 1, 9, "abcdefghij", 5, 2, -4);
2868     test("abcdefghij", 1, 9, "abcdefghij", 5, 4, -4);
2869     test("abcdefghij", 1, 9, "abcdefghij", 5, 5, -4);
2870     test("abcdefghij", 1, 9, "abcdefghij", 5, 6, -4);
2871     test("abcdefghij", 1, 9, "abcdefghij", 9, 0, 9);
2872     test("abcdefghij", 1, 9, "abcdefghij", 9, 1, -8);
2873     test("abcdefghij", 1, 9, "abcdefghij", 9, 2, -8);
2874     test("abcdefghij", 1, 9, "abcdefghij", 10, 0, 9);
2875     test("abcdefghij", 1, 9, "abcdefghij", 10, 1, 9);
2876     test("abcdefghij", 1, 9, "abcdefghij", 11, 0, 0);
2877     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 0, 0, 9);
2878     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 0, 1, 1);
2879     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 0, 10, 1);
2880     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 0, 19, 1);
2881     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 0, 20, 1);
2882     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 0, 21, 1);
2883     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1, 0, 9);
2884     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1, 1, 8);
2885     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1, 9, 0);
2886     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1, 18, -9);
2887     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1, 19, -10);
2888     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1, 20, -10);
2889     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 10, 0, 9);
2890     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 10, 1, -9);
2891     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 10, 5, -9);
2892     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 10, 9, -9);
2893     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 10, 10, -9);
2894     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 10, 11, -9);
2895     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 19, 0, 9);
2896     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 19, 1, -18);
2897     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 19, 2, -18);
2898     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 20, 0, 9);
2899     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 20, 1, 9);
2900     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 21, 0, 0);
2901     test("abcdefghij", 1, 10, "", 0, 0, 9);
2902     test("abcdefghij", 1, 10, "", 0, 1, 9);
2903     test("abcdefghij", 1, 10, "", 1, 0, 0);
2904     test("abcdefghij", 1, 10, "abcde", 0, 0, 9);
2905     test("abcdefghij", 1, 10, "abcde", 0, 1, 1);
2906     test("abcdefghij", 1, 10, "abcde", 0, 2, 1);
2907     test("abcdefghij", 1, 10, "abcde", 0, 4, 1);
2908     test("abcdefghij", 1, 10, "abcde", 0, 5, 1);
2909     test("abcdefghij", 1, 10, "abcde", 0, 6, 1);
2910     test("abcdefghij", 1, 10, "abcde", 1, 0, 9);
2911     test("abcdefghij", 1, 10, "abcde", 1, 1, 8);
2912     test("abcdefghij", 1, 10, "abcde", 1, 2, 7);
2913     test("abcdefghij", 1, 10, "abcde", 1, 3, 6);
2914     test("abcdefghij", 1, 10, "abcde", 1, 4, 5);
2915     test("abcdefghij", 1, 10, "abcde", 1, 5, 5);
2916     test("abcdefghij", 1, 10, "abcde", 2, 0, 9);
2917     test("abcdefghij", 1, 10, "abcde", 2, 1, -1);
2918     test("abcdefghij", 1, 10, "abcde", 2, 2, -1);
2919     test("abcdefghij", 1, 10, "abcde", 2, 3, -1);
2920     test("abcdefghij", 1, 10, "abcde", 2, 4, -1);
2921     test("abcdefghij", 1, 10, "abcde", 4, 0, 9);
2922     test("abcdefghij", 1, 10, "abcde", 4, 1, -3);
2923     test("abcdefghij", 1, 10, "abcde", 4, 2, -3);
2924     test("abcdefghij", 1, 10, "abcde", 5, 0, 9);
2925     test("abcdefghij", 1, 10, "abcde", 5, 1, 9);
2926     test("abcdefghij", 1, 10, "abcde", 6, 0, 0);
2927     test("abcdefghij", 1, 10, "abcdefghij", 0, 0, 9);
2928     test("abcdefghij", 1, 10, "abcdefghij", 0, 1, 1);
2929     test("abcdefghij", 1, 10, "abcdefghij", 0, 5, 1);
2930     test("abcdefghij", 1, 10, "abcdefghij", 0, 9, 1);
2931     test("abcdefghij", 1, 10, "abcdefghij", 0, 10, 1);
2932     test("abcdefghij", 1, 10, "abcdefghij", 0, 11, 1);
2933     test("abcdefghij", 1, 10, "abcdefghij", 1, 0, 9);
2934     test("abcdefghij", 1, 10, "abcdefghij", 1, 1, 8);
2935     test("abcdefghij", 1, 10, "abcdefghij", 1, 4, 5);
2936     test("abcdefghij", 1, 10, "abcdefghij", 1, 8, 1);
2937     test("abcdefghij", 1, 10, "abcdefghij", 1, 9, 0);
2938     test("abcdefghij", 1, 10, "abcdefghij", 1, 10, 0);
2939     test("abcdefghij", 1, 10, "abcdefghij", 5, 0, 9);
2940     test("abcdefghij", 1, 10, "abcdefghij", 5, 1, -4);
2941     test("abcdefghij", 1, 10, "abcdefghij", 5, 2, -4);
2942     test("abcdefghij", 1, 10, "abcdefghij", 5, 4, -4);
2943     test("abcdefghij", 1, 10, "abcdefghij", 5, 5, -4);
2944     test("abcdefghij", 1, 10, "abcdefghij", 5, 6, -4);
2945     test("abcdefghij", 1, 10, "abcdefghij", 9, 0, 9);
2946     test("abcdefghij", 1, 10, "abcdefghij", 9, 1, -8);
2947     test("abcdefghij", 1, 10, "abcdefghij", 9, 2, -8);
2948     test("abcdefghij", 1, 10, "abcdefghij", 10, 0, 9);
2949     test("abcdefghij", 1, 10, "abcdefghij", 10, 1, 9);
2950     test("abcdefghij", 1, 10, "abcdefghij", 11, 0, 0);
2951     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 0, 0, 9);
2952     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 0, 1, 1);
2953     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 0, 10, 1);
2954     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 0, 19, 1);
2955     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 0, 20, 1);
2956     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 0, 21, 1);
2957     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1, 0, 9);
2958     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1, 1, 8);
2959     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1, 9, 0);
2960     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1, 18, -9);
2961     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1, 19, -10);
2962     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1, 20, -10);
2963 }
2964 
test28()2965 void test28()
2966 {
2967     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 10, 0, 9);
2968     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 10, 1, -9);
2969     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 10, 5, -9);
2970     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 10, 9, -9);
2971     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 10, 10, -9);
2972     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 10, 11, -9);
2973     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 19, 0, 9);
2974     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 19, 1, -18);
2975     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 19, 2, -18);
2976     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 20, 0, 9);
2977     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 20, 1, 9);
2978     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 21, 0, 0);
2979     test("abcdefghij", 5, 0, "", 0, 0, 0);
2980     test("abcdefghij", 5, 0, "", 0, 1, 0);
2981     test("abcdefghij", 5, 0, "", 1, 0, 0);
2982     test("abcdefghij", 5, 0, "abcde", 0, 0, 0);
2983     test("abcdefghij", 5, 0, "abcde", 0, 1, -1);
2984     test("abcdefghij", 5, 0, "abcde", 0, 2, -2);
2985     test("abcdefghij", 5, 0, "abcde", 0, 4, -4);
2986     test("abcdefghij", 5, 0, "abcde", 0, 5, -5);
2987     test("abcdefghij", 5, 0, "abcde", 0, 6, -5);
2988     test("abcdefghij", 5, 0, "abcde", 1, 0, 0);
2989     test("abcdefghij", 5, 0, "abcde", 1, 1, -1);
2990     test("abcdefghij", 5, 0, "abcde", 1, 2, -2);
2991     test("abcdefghij", 5, 0, "abcde", 1, 3, -3);
2992     test("abcdefghij", 5, 0, "abcde", 1, 4, -4);
2993     test("abcdefghij", 5, 0, "abcde", 1, 5, -4);
2994     test("abcdefghij", 5, 0, "abcde", 2, 0, 0);
2995     test("abcdefghij", 5, 0, "abcde", 2, 1, -1);
2996     test("abcdefghij", 5, 0, "abcde", 2, 2, -2);
2997     test("abcdefghij", 5, 0, "abcde", 2, 3, -3);
2998     test("abcdefghij", 5, 0, "abcde", 2, 4, -3);
2999     test("abcdefghij", 5, 0, "abcde", 4, 0, 0);
3000     test("abcdefghij", 5, 0, "abcde", 4, 1, -1);
3001     test("abcdefghij", 5, 0, "abcde", 4, 2, -1);
3002     test("abcdefghij", 5, 0, "abcde", 5, 0, 0);
3003     test("abcdefghij", 5, 0, "abcde", 5, 1, 0);
3004     test("abcdefghij", 5, 0, "abcde", 6, 0, 0);
3005     test("abcdefghij", 5, 0, "abcdefghij", 0, 0, 0);
3006     test("abcdefghij", 5, 0, "abcdefghij", 0, 1, -1);
3007     test("abcdefghij", 5, 0, "abcdefghij", 0, 5, -5);
3008     test("abcdefghij", 5, 0, "abcdefghij", 0, 9, -9);
3009     test("abcdefghij", 5, 0, "abcdefghij", 0, 10, -10);
3010     test("abcdefghij", 5, 0, "abcdefghij", 0, 11, -10);
3011     test("abcdefghij", 5, 0, "abcdefghij", 1, 0, 0);
3012     test("abcdefghij", 5, 0, "abcdefghij", 1, 1, -1);
3013     test("abcdefghij", 5, 0, "abcdefghij", 1, 4, -4);
3014     test("abcdefghij", 5, 0, "abcdefghij", 1, 8, -8);
3015     test("abcdefghij", 5, 0, "abcdefghij", 1, 9, -9);
3016     test("abcdefghij", 5, 0, "abcdefghij", 1, 10, -9);
3017     test("abcdefghij", 5, 0, "abcdefghij", 5, 0, 0);
3018     test("abcdefghij", 5, 0, "abcdefghij", 5, 1, -1);
3019     test("abcdefghij", 5, 0, "abcdefghij", 5, 2, -2);
3020     test("abcdefghij", 5, 0, "abcdefghij", 5, 4, -4);
3021     test("abcdefghij", 5, 0, "abcdefghij", 5, 5, -5);
3022     test("abcdefghij", 5, 0, "abcdefghij", 5, 6, -5);
3023     test("abcdefghij", 5, 0, "abcdefghij", 9, 0, 0);
3024     test("abcdefghij", 5, 0, "abcdefghij", 9, 1, -1);
3025     test("abcdefghij", 5, 0, "abcdefghij", 9, 2, -1);
3026     test("abcdefghij", 5, 0, "abcdefghij", 10, 0, 0);
3027     test("abcdefghij", 5, 0, "abcdefghij", 10, 1, 0);
3028     test("abcdefghij", 5, 0, "abcdefghij", 11, 0, 0);
3029     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 0, 0, 0);
3030     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 0, 1, -1);
3031     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 0, 10, -10);
3032     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 0, 19, -19);
3033     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 0, 20, -20);
3034     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 0, 21, -20);
3035     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 1, 0, 0);
3036     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 1, 1, -1);
3037     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 1, 9, -9);
3038     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 1, 18, -18);
3039     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 1, 19, -19);
3040     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 1, 20, -19);
3041     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 10, 0, 0);
3042     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 10, 1, -1);
3043     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 10, 5, -5);
3044     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 10, 9, -9);
3045     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 10, 10, -10);
3046     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 10, 11, -10);
3047     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 19, 0, 0);
3048     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 19, 1, -1);
3049     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 19, 2, -1);
3050     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 20, 0, 0);
3051     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 20, 1, 0);
3052     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 21, 0, 0);
3053     test("abcdefghij", 5, 1, "", 0, 0, 1);
3054     test("abcdefghij", 5, 1, "", 0, 1, 1);
3055     test("abcdefghij", 5, 1, "", 1, 0, 0);
3056     test("abcdefghij", 5, 1, "abcde", 0, 0, 1);
3057     test("abcdefghij", 5, 1, "abcde", 0, 1, 5);
3058     test("abcdefghij", 5, 1, "abcde", 0, 2, 5);
3059     test("abcdefghij", 5, 1, "abcde", 0, 4, 5);
3060     test("abcdefghij", 5, 1, "abcde", 0, 5, 5);
3061     test("abcdefghij", 5, 1, "abcde", 0, 6, 5);
3062     test("abcdefghij", 5, 1, "abcde", 1, 0, 1);
3063     test("abcdefghij", 5, 1, "abcde", 1, 1, 4);
3064     test("abcdefghij", 5, 1, "abcde", 1, 2, 4);
3065     test("abcdefghij", 5, 1, "abcde", 1, 3, 4);
3066     test("abcdefghij", 5, 1, "abcde", 1, 4, 4);
3067 }
3068 
test29()3069 void test29()
3070 {
3071     test("abcdefghij", 5, 1, "abcde", 1, 5, 4);
3072     test("abcdefghij", 5, 1, "abcde", 2, 0, 1);
3073     test("abcdefghij", 5, 1, "abcde", 2, 1, 3);
3074     test("abcdefghij", 5, 1, "abcde", 2, 2, 3);
3075     test("abcdefghij", 5, 1, "abcde", 2, 3, 3);
3076     test("abcdefghij", 5, 1, "abcde", 2, 4, 3);
3077     test("abcdefghij", 5, 1, "abcde", 4, 0, 1);
3078     test("abcdefghij", 5, 1, "abcde", 4, 1, 1);
3079     test("abcdefghij", 5, 1, "abcde", 4, 2, 1);
3080     test("abcdefghij", 5, 1, "abcde", 5, 0, 1);
3081     test("abcdefghij", 5, 1, "abcde", 5, 1, 1);
3082     test("abcdefghij", 5, 1, "abcde", 6, 0, 0);
3083     test("abcdefghij", 5, 1, "abcdefghij", 0, 0, 1);
3084     test("abcdefghij", 5, 1, "abcdefghij", 0, 1, 5);
3085     test("abcdefghij", 5, 1, "abcdefghij", 0, 5, 5);
3086     test("abcdefghij", 5, 1, "abcdefghij", 0, 9, 5);
3087     test("abcdefghij", 5, 1, "abcdefghij", 0, 10, 5);
3088     test("abcdefghij", 5, 1, "abcdefghij", 0, 11, 5);
3089     test("abcdefghij", 5, 1, "abcdefghij", 1, 0, 1);
3090     test("abcdefghij", 5, 1, "abcdefghij", 1, 1, 4);
3091     test("abcdefghij", 5, 1, "abcdefghij", 1, 4, 4);
3092     test("abcdefghij", 5, 1, "abcdefghij", 1, 8, 4);
3093     test("abcdefghij", 5, 1, "abcdefghij", 1, 9, 4);
3094     test("abcdefghij", 5, 1, "abcdefghij", 1, 10, 4);
3095     test("abcdefghij", 5, 1, "abcdefghij", 5, 0, 1);
3096     test("abcdefghij", 5, 1, "abcdefghij", 5, 1, 0);
3097     test("abcdefghij", 5, 1, "abcdefghij", 5, 2, -1);
3098     test("abcdefghij", 5, 1, "abcdefghij", 5, 4, -3);
3099     test("abcdefghij", 5, 1, "abcdefghij", 5, 5, -4);
3100     test("abcdefghij", 5, 1, "abcdefghij", 5, 6, -4);
3101     test("abcdefghij", 5, 1, "abcdefghij", 9, 0, 1);
3102     test("abcdefghij", 5, 1, "abcdefghij", 9, 1, -4);
3103     test("abcdefghij", 5, 1, "abcdefghij", 9, 2, -4);
3104     test("abcdefghij", 5, 1, "abcdefghij", 10, 0, 1);
3105     test("abcdefghij", 5, 1, "abcdefghij", 10, 1, 1);
3106     test("abcdefghij", 5, 1, "abcdefghij", 11, 0, 0);
3107     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 0, 0, 1);
3108     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 0, 1, 5);
3109     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 0, 10, 5);
3110     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 0, 19, 5);
3111     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 0, 20, 5);
3112     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 0, 21, 5);
3113     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 1, 0, 1);
3114     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 1, 1, 4);
3115     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 1, 9, 4);
3116     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 1, 18, 4);
3117     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 1, 19, 4);
3118     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 1, 20, 4);
3119     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 10, 0, 1);
3120     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 10, 1, -5);
3121     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 10, 5, -5);
3122     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 10, 9, -5);
3123     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 10, 10, -5);
3124     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 10, 11, -5);
3125     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 19, 0, 1);
3126     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 19, 1, -14);
3127     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 19, 2, -14);
3128     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 20, 0, 1);
3129     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 20, 1, 1);
3130     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 21, 0, 0);
3131     test("abcdefghij", 5, 2, "", 0, 0, 2);
3132     test("abcdefghij", 5, 2, "", 0, 1, 2);
3133     test("abcdefghij", 5, 2, "", 1, 0, 0);
3134     test("abcdefghij", 5, 2, "abcde", 0, 0, 2);
3135     test("abcdefghij", 5, 2, "abcde", 0, 1, 5);
3136     test("abcdefghij", 5, 2, "abcde", 0, 2, 5);
3137     test("abcdefghij", 5, 2, "abcde", 0, 4, 5);
3138     test("abcdefghij", 5, 2, "abcde", 0, 5, 5);
3139     test("abcdefghij", 5, 2, "abcde", 0, 6, 5);
3140     test("abcdefghij", 5, 2, "abcde", 1, 0, 2);
3141     test("abcdefghij", 5, 2, "abcde", 1, 1, 4);
3142     test("abcdefghij", 5, 2, "abcde", 1, 2, 4);
3143     test("abcdefghij", 5, 2, "abcde", 1, 3, 4);
3144     test("abcdefghij", 5, 2, "abcde", 1, 4, 4);
3145     test("abcdefghij", 5, 2, "abcde", 1, 5, 4);
3146     test("abcdefghij", 5, 2, "abcde", 2, 0, 2);
3147     test("abcdefghij", 5, 2, "abcde", 2, 1, 3);
3148     test("abcdefghij", 5, 2, "abcde", 2, 2, 3);
3149     test("abcdefghij", 5, 2, "abcde", 2, 3, 3);
3150     test("abcdefghij", 5, 2, "abcde", 2, 4, 3);
3151     test("abcdefghij", 5, 2, "abcde", 4, 0, 2);
3152     test("abcdefghij", 5, 2, "abcde", 4, 1, 1);
3153     test("abcdefghij", 5, 2, "abcde", 4, 2, 1);
3154     test("abcdefghij", 5, 2, "abcde", 5, 0, 2);
3155     test("abcdefghij", 5, 2, "abcde", 5, 1, 2);
3156     test("abcdefghij", 5, 2, "abcde", 6, 0, 0);
3157     test("abcdefghij", 5, 2, "abcdefghij", 0, 0, 2);
3158     test("abcdefghij", 5, 2, "abcdefghij", 0, 1, 5);
3159     test("abcdefghij", 5, 2, "abcdefghij", 0, 5, 5);
3160     test("abcdefghij", 5, 2, "abcdefghij", 0, 9, 5);
3161     test("abcdefghij", 5, 2, "abcdefghij", 0, 10, 5);
3162     test("abcdefghij", 5, 2, "abcdefghij", 0, 11, 5);
3163     test("abcdefghij", 5, 2, "abcdefghij", 1, 0, 2);
3164     test("abcdefghij", 5, 2, "abcdefghij", 1, 1, 4);
3165     test("abcdefghij", 5, 2, "abcdefghij", 1, 4, 4);
3166     test("abcdefghij", 5, 2, "abcdefghij", 1, 8, 4);
3167     test("abcdefghij", 5, 2, "abcdefghij", 1, 9, 4);
3168     test("abcdefghij", 5, 2, "abcdefghij", 1, 10, 4);
3169     test("abcdefghij", 5, 2, "abcdefghij", 5, 0, 2);
3170     test("abcdefghij", 5, 2, "abcdefghij", 5, 1, 1);
3171 }
3172 
test30()3173 void test30()
3174 {
3175     test("abcdefghij", 5, 2, "abcdefghij", 5, 2, 0);
3176     test("abcdefghij", 5, 2, "abcdefghij", 5, 4, -2);
3177     test("abcdefghij", 5, 2, "abcdefghij", 5, 5, -3);
3178     test("abcdefghij", 5, 2, "abcdefghij", 5, 6, -3);
3179     test("abcdefghij", 5, 2, "abcdefghij", 9, 0, 2);
3180     test("abcdefghij", 5, 2, "abcdefghij", 9, 1, -4);
3181     test("abcdefghij", 5, 2, "abcdefghij", 9, 2, -4);
3182     test("abcdefghij", 5, 2, "abcdefghij", 10, 0, 2);
3183     test("abcdefghij", 5, 2, "abcdefghij", 10, 1, 2);
3184     test("abcdefghij", 5, 2, "abcdefghij", 11, 0, 0);
3185     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 0, 0, 2);
3186     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 0, 1, 5);
3187     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 0, 10, 5);
3188     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 0, 19, 5);
3189     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 0, 20, 5);
3190     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 0, 21, 5);
3191     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 1, 0, 2);
3192     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 1, 1, 4);
3193     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 1, 9, 4);
3194     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 1, 18, 4);
3195     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 1, 19, 4);
3196     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 1, 20, 4);
3197     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 10, 0, 2);
3198     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 10, 1, -5);
3199     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 10, 5, -5);
3200     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 10, 9, -5);
3201     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 10, 10, -5);
3202     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 10, 11, -5);
3203     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 19, 0, 2);
3204     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 19, 1, -14);
3205     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 19, 2, -14);
3206     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 20, 0, 2);
3207     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 20, 1, 2);
3208     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 21, 0, 0);
3209     test("abcdefghij", 5, 4, "", 0, 0, 4);
3210     test("abcdefghij", 5, 4, "", 0, 1, 4);
3211     test("abcdefghij", 5, 4, "", 1, 0, 0);
3212     test("abcdefghij", 5, 4, "abcde", 0, 0, 4);
3213     test("abcdefghij", 5, 4, "abcde", 0, 1, 5);
3214     test("abcdefghij", 5, 4, "abcde", 0, 2, 5);
3215     test("abcdefghij", 5, 4, "abcde", 0, 4, 5);
3216     test("abcdefghij", 5, 4, "abcde", 0, 5, 5);
3217     test("abcdefghij", 5, 4, "abcde", 0, 6, 5);
3218     test("abcdefghij", 5, 4, "abcde", 1, 0, 4);
3219     test("abcdefghij", 5, 4, "abcde", 1, 1, 4);
3220     test("abcdefghij", 5, 4, "abcde", 1, 2, 4);
3221     test("abcdefghij", 5, 4, "abcde", 1, 3, 4);
3222     test("abcdefghij", 5, 4, "abcde", 1, 4, 4);
3223     test("abcdefghij", 5, 4, "abcde", 1, 5, 4);
3224     test("abcdefghij", 5, 4, "abcde", 2, 0, 4);
3225     test("abcdefghij", 5, 4, "abcde", 2, 1, 3);
3226     test("abcdefghij", 5, 4, "abcde", 2, 2, 3);
3227     test("abcdefghij", 5, 4, "abcde", 2, 3, 3);
3228     test("abcdefghij", 5, 4, "abcde", 2, 4, 3);
3229     test("abcdefghij", 5, 4, "abcde", 4, 0, 4);
3230     test("abcdefghij", 5, 4, "abcde", 4, 1, 1);
3231     test("abcdefghij", 5, 4, "abcde", 4, 2, 1);
3232     test("abcdefghij", 5, 4, "abcde", 5, 0, 4);
3233     test("abcdefghij", 5, 4, "abcde", 5, 1, 4);
3234     test("abcdefghij", 5, 4, "abcde", 6, 0, 0);
3235     test("abcdefghij", 5, 4, "abcdefghij", 0, 0, 4);
3236     test("abcdefghij", 5, 4, "abcdefghij", 0, 1, 5);
3237     test("abcdefghij", 5, 4, "abcdefghij", 0, 5, 5);
3238     test("abcdefghij", 5, 4, "abcdefghij", 0, 9, 5);
3239     test("abcdefghij", 5, 4, "abcdefghij", 0, 10, 5);
3240     test("abcdefghij", 5, 4, "abcdefghij", 0, 11, 5);
3241     test("abcdefghij", 5, 4, "abcdefghij", 1, 0, 4);
3242     test("abcdefghij", 5, 4, "abcdefghij", 1, 1, 4);
3243     test("abcdefghij", 5, 4, "abcdefghij", 1, 4, 4);
3244     test("abcdefghij", 5, 4, "abcdefghij", 1, 8, 4);
3245     test("abcdefghij", 5, 4, "abcdefghij", 1, 9, 4);
3246     test("abcdefghij", 5, 4, "abcdefghij", 1, 10, 4);
3247     test("abcdefghij", 5, 4, "abcdefghij", 5, 0, 4);
3248     test("abcdefghij", 5, 4, "abcdefghij", 5, 1, 3);
3249     test("abcdefghij", 5, 4, "abcdefghij", 5, 2, 2);
3250     test("abcdefghij", 5, 4, "abcdefghij", 5, 4, 0);
3251     test("abcdefghij", 5, 4, "abcdefghij", 5, 5, -1);
3252     test("abcdefghij", 5, 4, "abcdefghij", 5, 6, -1);
3253     test("abcdefghij", 5, 4, "abcdefghij", 9, 0, 4);
3254     test("abcdefghij", 5, 4, "abcdefghij", 9, 1, -4);
3255     test("abcdefghij", 5, 4, "abcdefghij", 9, 2, -4);
3256     test("abcdefghij", 5, 4, "abcdefghij", 10, 0, 4);
3257     test("abcdefghij", 5, 4, "abcdefghij", 10, 1, 4);
3258     test("abcdefghij", 5, 4, "abcdefghij", 11, 0, 0);
3259     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 0, 0, 4);
3260     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 0, 1, 5);
3261     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 0, 10, 5);
3262     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 0, 19, 5);
3263     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 0, 20, 5);
3264     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 0, 21, 5);
3265     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 1, 0, 4);
3266     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 1, 1, 4);
3267     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 1, 9, 4);
3268     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 1, 18, 4);
3269     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 1, 19, 4);
3270     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 1, 20, 4);
3271     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 10, 0, 4);
3272     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 10, 1, -5);
3273     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 10, 5, -5);
3274     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 10, 9, -5);
3275 }
3276 
test31()3277 void test31()
3278 {
3279     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 10, 10, -5);
3280     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 10, 11, -5);
3281     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 19, 0, 4);
3282     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 19, 1, -14);
3283     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 19, 2, -14);
3284     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 20, 0, 4);
3285     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 20, 1, 4);
3286     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 21, 0, 0);
3287     test("abcdefghij", 5, 5, "", 0, 0, 5);
3288     test("abcdefghij", 5, 5, "", 0, 1, 5);
3289     test("abcdefghij", 5, 5, "", 1, 0, 0);
3290     test("abcdefghij", 5, 5, "abcde", 0, 0, 5);
3291     test("abcdefghij", 5, 5, "abcde", 0, 1, 5);
3292     test("abcdefghij", 5, 5, "abcde", 0, 2, 5);
3293     test("abcdefghij", 5, 5, "abcde", 0, 4, 5);
3294     test("abcdefghij", 5, 5, "abcde", 0, 5, 5);
3295     test("abcdefghij", 5, 5, "abcde", 0, 6, 5);
3296     test("abcdefghij", 5, 5, "abcde", 1, 0, 5);
3297     test("abcdefghij", 5, 5, "abcde", 1, 1, 4);
3298     test("abcdefghij", 5, 5, "abcde", 1, 2, 4);
3299     test("abcdefghij", 5, 5, "abcde", 1, 3, 4);
3300     test("abcdefghij", 5, 5, "abcde", 1, 4, 4);
3301     test("abcdefghij", 5, 5, "abcde", 1, 5, 4);
3302     test("abcdefghij", 5, 5, "abcde", 2, 0, 5);
3303     test("abcdefghij", 5, 5, "abcde", 2, 1, 3);
3304     test("abcdefghij", 5, 5, "abcde", 2, 2, 3);
3305     test("abcdefghij", 5, 5, "abcde", 2, 3, 3);
3306     test("abcdefghij", 5, 5, "abcde", 2, 4, 3);
3307     test("abcdefghij", 5, 5, "abcde", 4, 0, 5);
3308     test("abcdefghij", 5, 5, "abcde", 4, 1, 1);
3309     test("abcdefghij", 5, 5, "abcde", 4, 2, 1);
3310     test("abcdefghij", 5, 5, "abcde", 5, 0, 5);
3311     test("abcdefghij", 5, 5, "abcde", 5, 1, 5);
3312     test("abcdefghij", 5, 5, "abcde", 6, 0, 0);
3313     test("abcdefghij", 5, 5, "abcdefghij", 0, 0, 5);
3314     test("abcdefghij", 5, 5, "abcdefghij", 0, 1, 5);
3315     test("abcdefghij", 5, 5, "abcdefghij", 0, 5, 5);
3316     test("abcdefghij", 5, 5, "abcdefghij", 0, 9, 5);
3317     test("abcdefghij", 5, 5, "abcdefghij", 0, 10, 5);
3318     test("abcdefghij", 5, 5, "abcdefghij", 0, 11, 5);
3319     test("abcdefghij", 5, 5, "abcdefghij", 1, 0, 5);
3320     test("abcdefghij", 5, 5, "abcdefghij", 1, 1, 4);
3321     test("abcdefghij", 5, 5, "abcdefghij", 1, 4, 4);
3322     test("abcdefghij", 5, 5, "abcdefghij", 1, 8, 4);
3323     test("abcdefghij", 5, 5, "abcdefghij", 1, 9, 4);
3324     test("abcdefghij", 5, 5, "abcdefghij", 1, 10, 4);
3325     test("abcdefghij", 5, 5, "abcdefghij", 5, 0, 5);
3326     test("abcdefghij", 5, 5, "abcdefghij", 5, 1, 4);
3327     test("abcdefghij", 5, 5, "abcdefghij", 5, 2, 3);
3328     test("abcdefghij", 5, 5, "abcdefghij", 5, 4, 1);
3329     test("abcdefghij", 5, 5, "abcdefghij", 5, 5, 0);
3330     test("abcdefghij", 5, 5, "abcdefghij", 5, 6, 0);
3331     test("abcdefghij", 5, 5, "abcdefghij", 9, 0, 5);
3332     test("abcdefghij", 5, 5, "abcdefghij", 9, 1, -4);
3333     test("abcdefghij", 5, 5, "abcdefghij", 9, 2, -4);
3334     test("abcdefghij", 5, 5, "abcdefghij", 10, 0, 5);
3335     test("abcdefghij", 5, 5, "abcdefghij", 10, 1, 5);
3336     test("abcdefghij", 5, 5, "abcdefghij", 11, 0, 0);
3337     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 0, 0, 5);
3338     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 0, 1, 5);
3339     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 0, 10, 5);
3340     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 0, 19, 5);
3341     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 0, 20, 5);
3342     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 0, 21, 5);
3343     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 1, 0, 5);
3344     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 1, 1, 4);
3345     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 1, 9, 4);
3346     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 1, 18, 4);
3347     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 1, 19, 4);
3348     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 1, 20, 4);
3349     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 10, 0, 5);
3350     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 10, 1, -5);
3351     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 10, 5, -5);
3352     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 10, 9, -5);
3353     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 10, 10, -5);
3354     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 10, 11, -5);
3355     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 19, 0, 5);
3356     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 19, 1, -14);
3357     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 19, 2, -14);
3358     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 20, 0, 5);
3359     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 20, 1, 5);
3360     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 21, 0, 0);
3361     test("abcdefghij", 5, 6, "", 0, 0, 5);
3362     test("abcdefghij", 5, 6, "", 0, 1, 5);
3363     test("abcdefghij", 5, 6, "", 1, 0, 0);
3364     test("abcdefghij", 5, 6, "abcde", 0, 0, 5);
3365     test("abcdefghij", 5, 6, "abcde", 0, 1, 5);
3366     test("abcdefghij", 5, 6, "abcde", 0, 2, 5);
3367     test("abcdefghij", 5, 6, "abcde", 0, 4, 5);
3368     test("abcdefghij", 5, 6, "abcde", 0, 5, 5);
3369     test("abcdefghij", 5, 6, "abcde", 0, 6, 5);
3370     test("abcdefghij", 5, 6, "abcde", 1, 0, 5);
3371     test("abcdefghij", 5, 6, "abcde", 1, 1, 4);
3372     test("abcdefghij", 5, 6, "abcde", 1, 2, 4);
3373     test("abcdefghij", 5, 6, "abcde", 1, 3, 4);
3374     test("abcdefghij", 5, 6, "abcde", 1, 4, 4);
3375     test("abcdefghij", 5, 6, "abcde", 1, 5, 4);
3376     test("abcdefghij", 5, 6, "abcde", 2, 0, 5);
3377     test("abcdefghij", 5, 6, "abcde", 2, 1, 3);
3378     test("abcdefghij", 5, 6, "abcde", 2, 2, 3);
3379 }
3380 
test32()3381 void test32()
3382 {
3383     test("abcdefghij", 5, 6, "abcde", 2, 3, 3);
3384     test("abcdefghij", 5, 6, "abcde", 2, 4, 3);
3385     test("abcdefghij", 5, 6, "abcde", 4, 0, 5);
3386     test("abcdefghij", 5, 6, "abcde", 4, 1, 1);
3387     test("abcdefghij", 5, 6, "abcde", 4, 2, 1);
3388     test("abcdefghij", 5, 6, "abcde", 5, 0, 5);
3389     test("abcdefghij", 5, 6, "abcde", 5, 1, 5);
3390     test("abcdefghij", 5, 6, "abcde", 6, 0, 0);
3391     test("abcdefghij", 5, 6, "abcdefghij", 0, 0, 5);
3392     test("abcdefghij", 5, 6, "abcdefghij", 0, 1, 5);
3393     test("abcdefghij", 5, 6, "abcdefghij", 0, 5, 5);
3394     test("abcdefghij", 5, 6, "abcdefghij", 0, 9, 5);
3395     test("abcdefghij", 5, 6, "abcdefghij", 0, 10, 5);
3396     test("abcdefghij", 5, 6, "abcdefghij", 0, 11, 5);
3397     test("abcdefghij", 5, 6, "abcdefghij", 1, 0, 5);
3398     test("abcdefghij", 5, 6, "abcdefghij", 1, 1, 4);
3399     test("abcdefghij", 5, 6, "abcdefghij", 1, 4, 4);
3400     test("abcdefghij", 5, 6, "abcdefghij", 1, 8, 4);
3401     test("abcdefghij", 5, 6, "abcdefghij", 1, 9, 4);
3402     test("abcdefghij", 5, 6, "abcdefghij", 1, 10, 4);
3403     test("abcdefghij", 5, 6, "abcdefghij", 5, 0, 5);
3404     test("abcdefghij", 5, 6, "abcdefghij", 5, 1, 4);
3405     test("abcdefghij", 5, 6, "abcdefghij", 5, 2, 3);
3406     test("abcdefghij", 5, 6, "abcdefghij", 5, 4, 1);
3407     test("abcdefghij", 5, 6, "abcdefghij", 5, 5, 0);
3408     test("abcdefghij", 5, 6, "abcdefghij", 5, 6, 0);
3409     test("abcdefghij", 5, 6, "abcdefghij", 9, 0, 5);
3410     test("abcdefghij", 5, 6, "abcdefghij", 9, 1, -4);
3411     test("abcdefghij", 5, 6, "abcdefghij", 9, 2, -4);
3412     test("abcdefghij", 5, 6, "abcdefghij", 10, 0, 5);
3413     test("abcdefghij", 5, 6, "abcdefghij", 10, 1, 5);
3414     test("abcdefghij", 5, 6, "abcdefghij", 11, 0, 0);
3415     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 0, 0, 5);
3416     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 0, 1, 5);
3417     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 0, 10, 5);
3418     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 0, 19, 5);
3419     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 0, 20, 5);
3420     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 0, 21, 5);
3421     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 1, 0, 5);
3422     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 1, 1, 4);
3423     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 1, 9, 4);
3424     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 1, 18, 4);
3425     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 1, 19, 4);
3426     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 1, 20, 4);
3427     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 10, 0, 5);
3428     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 10, 1, -5);
3429     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 10, 5, -5);
3430     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 10, 9, -5);
3431     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 10, 10, -5);
3432     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 10, 11, -5);
3433     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 19, 0, 5);
3434     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 19, 1, -14);
3435     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 19, 2, -14);
3436     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 20, 0, 5);
3437     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 20, 1, 5);
3438     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 21, 0, 0);
3439     test("abcdefghij", 9, 0, "", 0, 0, 0);
3440     test("abcdefghij", 9, 0, "", 0, 1, 0);
3441     test("abcdefghij", 9, 0, "", 1, 0, 0);
3442     test("abcdefghij", 9, 0, "abcde", 0, 0, 0);
3443     test("abcdefghij", 9, 0, "abcde", 0, 1, -1);
3444     test("abcdefghij", 9, 0, "abcde", 0, 2, -2);
3445     test("abcdefghij", 9, 0, "abcde", 0, 4, -4);
3446     test("abcdefghij", 9, 0, "abcde", 0, 5, -5);
3447     test("abcdefghij", 9, 0, "abcde", 0, 6, -5);
3448     test("abcdefghij", 9, 0, "abcde", 1, 0, 0);
3449     test("abcdefghij", 9, 0, "abcde", 1, 1, -1);
3450     test("abcdefghij", 9, 0, "abcde", 1, 2, -2);
3451     test("abcdefghij", 9, 0, "abcde", 1, 3, -3);
3452     test("abcdefghij", 9, 0, "abcde", 1, 4, -4);
3453     test("abcdefghij", 9, 0, "abcde", 1, 5, -4);
3454     test("abcdefghij", 9, 0, "abcde", 2, 0, 0);
3455     test("abcdefghij", 9, 0, "abcde", 2, 1, -1);
3456     test("abcdefghij", 9, 0, "abcde", 2, 2, -2);
3457     test("abcdefghij", 9, 0, "abcde", 2, 3, -3);
3458     test("abcdefghij", 9, 0, "abcde", 2, 4, -3);
3459     test("abcdefghij", 9, 0, "abcde", 4, 0, 0);
3460     test("abcdefghij", 9, 0, "abcde", 4, 1, -1);
3461     test("abcdefghij", 9, 0, "abcde", 4, 2, -1);
3462     test("abcdefghij", 9, 0, "abcde", 5, 0, 0);
3463     test("abcdefghij", 9, 0, "abcde", 5, 1, 0);
3464     test("abcdefghij", 9, 0, "abcde", 6, 0, 0);
3465     test("abcdefghij", 9, 0, "abcdefghij", 0, 0, 0);
3466     test("abcdefghij", 9, 0, "abcdefghij", 0, 1, -1);
3467     test("abcdefghij", 9, 0, "abcdefghij", 0, 5, -5);
3468     test("abcdefghij", 9, 0, "abcdefghij", 0, 9, -9);
3469     test("abcdefghij", 9, 0, "abcdefghij", 0, 10, -10);
3470     test("abcdefghij", 9, 0, "abcdefghij", 0, 11, -10);
3471     test("abcdefghij", 9, 0, "abcdefghij", 1, 0, 0);
3472     test("abcdefghij", 9, 0, "abcdefghij", 1, 1, -1);
3473     test("abcdefghij", 9, 0, "abcdefghij", 1, 4, -4);
3474     test("abcdefghij", 9, 0, "abcdefghij", 1, 8, -8);
3475     test("abcdefghij", 9, 0, "abcdefghij", 1, 9, -9);
3476     test("abcdefghij", 9, 0, "abcdefghij", 1, 10, -9);
3477     test("abcdefghij", 9, 0, "abcdefghij", 5, 0, 0);
3478     test("abcdefghij", 9, 0, "abcdefghij", 5, 1, -1);
3479     test("abcdefghij", 9, 0, "abcdefghij", 5, 2, -2);
3480     test("abcdefghij", 9, 0, "abcdefghij", 5, 4, -4);
3481     test("abcdefghij", 9, 0, "abcdefghij", 5, 5, -5);
3482     test("abcdefghij", 9, 0, "abcdefghij", 5, 6, -5);
3483 }
3484 
test33()3485 void test33()
3486 {
3487     test("abcdefghij", 9, 0, "abcdefghij", 9, 0, 0);
3488     test("abcdefghij", 9, 0, "abcdefghij", 9, 1, -1);
3489     test("abcdefghij", 9, 0, "abcdefghij", 9, 2, -1);
3490     test("abcdefghij", 9, 0, "abcdefghij", 10, 0, 0);
3491     test("abcdefghij", 9, 0, "abcdefghij", 10, 1, 0);
3492     test("abcdefghij", 9, 0, "abcdefghij", 11, 0, 0);
3493     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 0, 0, 0);
3494     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 0, 1, -1);
3495     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 0, 10, -10);
3496     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 0, 19, -19);
3497     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 0, 20, -20);
3498     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 0, 21, -20);
3499     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 1, 0, 0);
3500     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 1, 1, -1);
3501     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 1, 9, -9);
3502     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 1, 18, -18);
3503     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 1, 19, -19);
3504     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 1, 20, -19);
3505     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 10, 0, 0);
3506     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 10, 1, -1);
3507     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 10, 5, -5);
3508     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 10, 9, -9);
3509     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 10, 10, -10);
3510     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 10, 11, -10);
3511     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 19, 0, 0);
3512     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 19, 1, -1);
3513     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 19, 2, -1);
3514     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 20, 0, 0);
3515     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 20, 1, 0);
3516     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 21, 0, 0);
3517     test("abcdefghij", 9, 1, "", 0, 0, 1);
3518     test("abcdefghij", 9, 1, "", 0, 1, 1);
3519     test("abcdefghij", 9, 1, "", 1, 0, 0);
3520     test("abcdefghij", 9, 1, "abcde", 0, 0, 1);
3521     test("abcdefghij", 9, 1, "abcde", 0, 1, 9);
3522     test("abcdefghij", 9, 1, "abcde", 0, 2, 9);
3523     test("abcdefghij", 9, 1, "abcde", 0, 4, 9);
3524     test("abcdefghij", 9, 1, "abcde", 0, 5, 9);
3525     test("abcdefghij", 9, 1, "abcde", 0, 6, 9);
3526     test("abcdefghij", 9, 1, "abcde", 1, 0, 1);
3527     test("abcdefghij", 9, 1, "abcde", 1, 1, 8);
3528     test("abcdefghij", 9, 1, "abcde", 1, 2, 8);
3529     test("abcdefghij", 9, 1, "abcde", 1, 3, 8);
3530     test("abcdefghij", 9, 1, "abcde", 1, 4, 8);
3531     test("abcdefghij", 9, 1, "abcde", 1, 5, 8);
3532     test("abcdefghij", 9, 1, "abcde", 2, 0, 1);
3533     test("abcdefghij", 9, 1, "abcde", 2, 1, 7);
3534     test("abcdefghij", 9, 1, "abcde", 2, 2, 7);
3535     test("abcdefghij", 9, 1, "abcde", 2, 3, 7);
3536     test("abcdefghij", 9, 1, "abcde", 2, 4, 7);
3537     test("abcdefghij", 9, 1, "abcde", 4, 0, 1);
3538     test("abcdefghij", 9, 1, "abcde", 4, 1, 5);
3539     test("abcdefghij", 9, 1, "abcde", 4, 2, 5);
3540     test("abcdefghij", 9, 1, "abcde", 5, 0, 1);
3541     test("abcdefghij", 9, 1, "abcde", 5, 1, 1);
3542     test("abcdefghij", 9, 1, "abcde", 6, 0, 0);
3543     test("abcdefghij", 9, 1, "abcdefghij", 0, 0, 1);
3544     test("abcdefghij", 9, 1, "abcdefghij", 0, 1, 9);
3545     test("abcdefghij", 9, 1, "abcdefghij", 0, 5, 9);
3546     test("abcdefghij", 9, 1, "abcdefghij", 0, 9, 9);
3547     test("abcdefghij", 9, 1, "abcdefghij", 0, 10, 9);
3548     test("abcdefghij", 9, 1, "abcdefghij", 0, 11, 9);
3549     test("abcdefghij", 9, 1, "abcdefghij", 1, 0, 1);
3550     test("abcdefghij", 9, 1, "abcdefghij", 1, 1, 8);
3551     test("abcdefghij", 9, 1, "abcdefghij", 1, 4, 8);
3552     test("abcdefghij", 9, 1, "abcdefghij", 1, 8, 8);
3553     test("abcdefghij", 9, 1, "abcdefghij", 1, 9, 8);
3554     test("abcdefghij", 9, 1, "abcdefghij", 1, 10, 8);
3555     test("abcdefghij", 9, 1, "abcdefghij", 5, 0, 1);
3556     test("abcdefghij", 9, 1, "abcdefghij", 5, 1, 4);
3557     test("abcdefghij", 9, 1, "abcdefghij", 5, 2, 4);
3558     test("abcdefghij", 9, 1, "abcdefghij", 5, 4, 4);
3559     test("abcdefghij", 9, 1, "abcdefghij", 5, 5, 4);
3560     test("abcdefghij", 9, 1, "abcdefghij", 5, 6, 4);
3561     test("abcdefghij", 9, 1, "abcdefghij", 9, 0, 1);
3562     test("abcdefghij", 9, 1, "abcdefghij", 9, 1, 0);
3563     test("abcdefghij", 9, 1, "abcdefghij", 9, 2, 0);
3564     test("abcdefghij", 9, 1, "abcdefghij", 10, 0, 1);
3565     test("abcdefghij", 9, 1, "abcdefghij", 10, 1, 1);
3566     test("abcdefghij", 9, 1, "abcdefghij", 11, 0, 0);
3567     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 0, 0, 1);
3568     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 0, 1, 9);
3569     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 0, 10, 9);
3570     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 0, 19, 9);
3571     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 0, 20, 9);
3572     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 0, 21, 9);
3573     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 1, 0, 1);
3574     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 1, 1, 8);
3575     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 1, 9, 8);
3576     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 1, 18, 8);
3577     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 1, 19, 8);
3578     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 1, 20, 8);
3579     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 10, 0, 1);
3580     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 10, 1, -1);
3581     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 10, 5, -1);
3582     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 10, 9, -1);
3583     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 10, 10, -1);
3584     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 10, 11, -1);
3585     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 19, 0, 1);
3586     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 19, 1, -10);
3587 }
3588 
test34()3589 void test34()
3590 {
3591     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 19, 2, -10);
3592     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 20, 0, 1);
3593     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 20, 1, 1);
3594     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 21, 0, 0);
3595     test("abcdefghij", 9, 2, "", 0, 0, 1);
3596     test("abcdefghij", 9, 2, "", 0, 1, 1);
3597     test("abcdefghij", 9, 2, "", 1, 0, 0);
3598     test("abcdefghij", 9, 2, "abcde", 0, 0, 1);
3599     test("abcdefghij", 9, 2, "abcde", 0, 1, 9);
3600     test("abcdefghij", 9, 2, "abcde", 0, 2, 9);
3601     test("abcdefghij", 9, 2, "abcde", 0, 4, 9);
3602     test("abcdefghij", 9, 2, "abcde", 0, 5, 9);
3603     test("abcdefghij", 9, 2, "abcde", 0, 6, 9);
3604     test("abcdefghij", 9, 2, "abcde", 1, 0, 1);
3605     test("abcdefghij", 9, 2, "abcde", 1, 1, 8);
3606     test("abcdefghij", 9, 2, "abcde", 1, 2, 8);
3607     test("abcdefghij", 9, 2, "abcde", 1, 3, 8);
3608     test("abcdefghij", 9, 2, "abcde", 1, 4, 8);
3609     test("abcdefghij", 9, 2, "abcde", 1, 5, 8);
3610     test("abcdefghij", 9, 2, "abcde", 2, 0, 1);
3611     test("abcdefghij", 9, 2, "abcde", 2, 1, 7);
3612     test("abcdefghij", 9, 2, "abcde", 2, 2, 7);
3613     test("abcdefghij", 9, 2, "abcde", 2, 3, 7);
3614     test("abcdefghij", 9, 2, "abcde", 2, 4, 7);
3615     test("abcdefghij", 9, 2, "abcde", 4, 0, 1);
3616     test("abcdefghij", 9, 2, "abcde", 4, 1, 5);
3617     test("abcdefghij", 9, 2, "abcde", 4, 2, 5);
3618     test("abcdefghij", 9, 2, "abcde", 5, 0, 1);
3619     test("abcdefghij", 9, 2, "abcde", 5, 1, 1);
3620     test("abcdefghij", 9, 2, "abcde", 6, 0, 0);
3621     test("abcdefghij", 9, 2, "abcdefghij", 0, 0, 1);
3622     test("abcdefghij", 9, 2, "abcdefghij", 0, 1, 9);
3623     test("abcdefghij", 9, 2, "abcdefghij", 0, 5, 9);
3624     test("abcdefghij", 9, 2, "abcdefghij", 0, 9, 9);
3625     test("abcdefghij", 9, 2, "abcdefghij", 0, 10, 9);
3626     test("abcdefghij", 9, 2, "abcdefghij", 0, 11, 9);
3627     test("abcdefghij", 9, 2, "abcdefghij", 1, 0, 1);
3628     test("abcdefghij", 9, 2, "abcdefghij", 1, 1, 8);
3629     test("abcdefghij", 9, 2, "abcdefghij", 1, 4, 8);
3630     test("abcdefghij", 9, 2, "abcdefghij", 1, 8, 8);
3631     test("abcdefghij", 9, 2, "abcdefghij", 1, 9, 8);
3632     test("abcdefghij", 9, 2, "abcdefghij", 1, 10, 8);
3633     test("abcdefghij", 9, 2, "abcdefghij", 5, 0, 1);
3634     test("abcdefghij", 9, 2, "abcdefghij", 5, 1, 4);
3635     test("abcdefghij", 9, 2, "abcdefghij", 5, 2, 4);
3636     test("abcdefghij", 9, 2, "abcdefghij", 5, 4, 4);
3637     test("abcdefghij", 9, 2, "abcdefghij", 5, 5, 4);
3638     test("abcdefghij", 9, 2, "abcdefghij", 5, 6, 4);
3639     test("abcdefghij", 9, 2, "abcdefghij", 9, 0, 1);
3640     test("abcdefghij", 9, 2, "abcdefghij", 9, 1, 0);
3641     test("abcdefghij", 9, 2, "abcdefghij", 9, 2, 0);
3642     test("abcdefghij", 9, 2, "abcdefghij", 10, 0, 1);
3643     test("abcdefghij", 9, 2, "abcdefghij", 10, 1, 1);
3644     test("abcdefghij", 9, 2, "abcdefghij", 11, 0, 0);
3645     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 0, 0, 1);
3646     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 0, 1, 9);
3647     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 0, 10, 9);
3648     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 0, 19, 9);
3649     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 0, 20, 9);
3650     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 0, 21, 9);
3651     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 1, 0, 1);
3652     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 1, 1, 8);
3653     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 1, 9, 8);
3654     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 1, 18, 8);
3655     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 1, 19, 8);
3656     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 1, 20, 8);
3657     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 10, 0, 1);
3658     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 10, 1, -1);
3659     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 10, 5, -1);
3660     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 10, 9, -1);
3661     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 10, 10, -1);
3662     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 10, 11, -1);
3663     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 19, 0, 1);
3664     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 19, 1, -10);
3665     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 19, 2, -10);
3666     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 20, 0, 1);
3667     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 20, 1, 1);
3668     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 21, 0, 0);
3669     test("abcdefghij", 10, 0, "", 0, 0, 0);
3670     test("abcdefghij", 10, 0, "", 0, 1, 0);
3671     test("abcdefghij", 10, 0, "", 1, 0, 0);
3672     test("abcdefghij", 10, 0, "abcde", 0, 0, 0);
3673     test("abcdefghij", 10, 0, "abcde", 0, 1, -1);
3674     test("abcdefghij", 10, 0, "abcde", 0, 2, -2);
3675     test("abcdefghij", 10, 0, "abcde", 0, 4, -4);
3676     test("abcdefghij", 10, 0, "abcde", 0, 5, -5);
3677     test("abcdefghij", 10, 0, "abcde", 0, 6, -5);
3678     test("abcdefghij", 10, 0, "abcde", 1, 0, 0);
3679     test("abcdefghij", 10, 0, "abcde", 1, 1, -1);
3680     test("abcdefghij", 10, 0, "abcde", 1, 2, -2);
3681     test("abcdefghij", 10, 0, "abcde", 1, 3, -3);
3682     test("abcdefghij", 10, 0, "abcde", 1, 4, -4);
3683     test("abcdefghij", 10, 0, "abcde", 1, 5, -4);
3684     test("abcdefghij", 10, 0, "abcde", 2, 0, 0);
3685     test("abcdefghij", 10, 0, "abcde", 2, 1, -1);
3686     test("abcdefghij", 10, 0, "abcde", 2, 2, -2);
3687     test("abcdefghij", 10, 0, "abcde", 2, 3, -3);
3688     test("abcdefghij", 10, 0, "abcde", 2, 4, -3);
3689     test("abcdefghij", 10, 0, "abcde", 4, 0, 0);
3690     test("abcdefghij", 10, 0, "abcde", 4, 1, -1);
3691 }
3692 
test35()3693 void test35()
3694 {
3695     test("abcdefghij", 10, 0, "abcde", 4, 2, -1);
3696     test("abcdefghij", 10, 0, "abcde", 5, 0, 0);
3697     test("abcdefghij", 10, 0, "abcde", 5, 1, 0);
3698     test("abcdefghij", 10, 0, "abcde", 6, 0, 0);
3699     test("abcdefghij", 10, 0, "abcdefghij", 0, 0, 0);
3700     test("abcdefghij", 10, 0, "abcdefghij", 0, 1, -1);
3701     test("abcdefghij", 10, 0, "abcdefghij", 0, 5, -5);
3702     test("abcdefghij", 10, 0, "abcdefghij", 0, 9, -9);
3703     test("abcdefghij", 10, 0, "abcdefghij", 0, 10, -10);
3704     test("abcdefghij", 10, 0, "abcdefghij", 0, 11, -10);
3705     test("abcdefghij", 10, 0, "abcdefghij", 1, 0, 0);
3706     test("abcdefghij", 10, 0, "abcdefghij", 1, 1, -1);
3707     test("abcdefghij", 10, 0, "abcdefghij", 1, 4, -4);
3708     test("abcdefghij", 10, 0, "abcdefghij", 1, 8, -8);
3709     test("abcdefghij", 10, 0, "abcdefghij", 1, 9, -9);
3710     test("abcdefghij", 10, 0, "abcdefghij", 1, 10, -9);
3711     test("abcdefghij", 10, 0, "abcdefghij", 5, 0, 0);
3712     test("abcdefghij", 10, 0, "abcdefghij", 5, 1, -1);
3713     test("abcdefghij", 10, 0, "abcdefghij", 5, 2, -2);
3714     test("abcdefghij", 10, 0, "abcdefghij", 5, 4, -4);
3715     test("abcdefghij", 10, 0, "abcdefghij", 5, 5, -5);
3716     test("abcdefghij", 10, 0, "abcdefghij", 5, 6, -5);
3717     test("abcdefghij", 10, 0, "abcdefghij", 9, 0, 0);
3718     test("abcdefghij", 10, 0, "abcdefghij", 9, 1, -1);
3719     test("abcdefghij", 10, 0, "abcdefghij", 9, 2, -1);
3720     test("abcdefghij", 10, 0, "abcdefghij", 10, 0, 0);
3721     test("abcdefghij", 10, 0, "abcdefghij", 10, 1, 0);
3722     test("abcdefghij", 10, 0, "abcdefghij", 11, 0, 0);
3723     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 0, 0, 0);
3724     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 0, 1, -1);
3725     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 0, 10, -10);
3726     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 0, 19, -19);
3727     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 0, 20, -20);
3728     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 0, 21, -20);
3729     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 1, 0, 0);
3730     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 1, 1, -1);
3731     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 1, 9, -9);
3732     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 1, 18, -18);
3733     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 1, 19, -19);
3734     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 1, 20, -19);
3735     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 10, 0, 0);
3736     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 10, 1, -1);
3737     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 10, 5, -5);
3738     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 10, 9, -9);
3739     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 10, 10, -10);
3740     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 10, 11, -10);
3741     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 19, 0, 0);
3742     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 19, 1, -1);
3743     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 19, 2, -1);
3744     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 20, 0, 0);
3745     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 20, 1, 0);
3746     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 21, 0, 0);
3747     test("abcdefghij", 10, 1, "", 0, 0, 0);
3748     test("abcdefghij", 10, 1, "", 0, 1, 0);
3749     test("abcdefghij", 10, 1, "", 1, 0, 0);
3750     test("abcdefghij", 10, 1, "abcde", 0, 0, 0);
3751     test("abcdefghij", 10, 1, "abcde", 0, 1, -1);
3752     test("abcdefghij", 10, 1, "abcde", 0, 2, -2);
3753     test("abcdefghij", 10, 1, "abcde", 0, 4, -4);
3754     test("abcdefghij", 10, 1, "abcde", 0, 5, -5);
3755     test("abcdefghij", 10, 1, "abcde", 0, 6, -5);
3756     test("abcdefghij", 10, 1, "abcde", 1, 0, 0);
3757     test("abcdefghij", 10, 1, "abcde", 1, 1, -1);
3758     test("abcdefghij", 10, 1, "abcde", 1, 2, -2);
3759     test("abcdefghij", 10, 1, "abcde", 1, 3, -3);
3760     test("abcdefghij", 10, 1, "abcde", 1, 4, -4);
3761     test("abcdefghij", 10, 1, "abcde", 1, 5, -4);
3762     test("abcdefghij", 10, 1, "abcde", 2, 0, 0);
3763     test("abcdefghij", 10, 1, "abcde", 2, 1, -1);
3764     test("abcdefghij", 10, 1, "abcde", 2, 2, -2);
3765     test("abcdefghij", 10, 1, "abcde", 2, 3, -3);
3766     test("abcdefghij", 10, 1, "abcde", 2, 4, -3);
3767     test("abcdefghij", 10, 1, "abcde", 4, 0, 0);
3768     test("abcdefghij", 10, 1, "abcde", 4, 1, -1);
3769     test("abcdefghij", 10, 1, "abcde", 4, 2, -1);
3770     test("abcdefghij", 10, 1, "abcde", 5, 0, 0);
3771     test("abcdefghij", 10, 1, "abcde", 5, 1, 0);
3772     test("abcdefghij", 10, 1, "abcde", 6, 0, 0);
3773     test("abcdefghij", 10, 1, "abcdefghij", 0, 0, 0);
3774     test("abcdefghij", 10, 1, "abcdefghij", 0, 1, -1);
3775     test("abcdefghij", 10, 1, "abcdefghij", 0, 5, -5);
3776     test("abcdefghij", 10, 1, "abcdefghij", 0, 9, -9);
3777     test("abcdefghij", 10, 1, "abcdefghij", 0, 10, -10);
3778     test("abcdefghij", 10, 1, "abcdefghij", 0, 11, -10);
3779     test("abcdefghij", 10, 1, "abcdefghij", 1, 0, 0);
3780     test("abcdefghij", 10, 1, "abcdefghij", 1, 1, -1);
3781     test("abcdefghij", 10, 1, "abcdefghij", 1, 4, -4);
3782     test("abcdefghij", 10, 1, "abcdefghij", 1, 8, -8);
3783     test("abcdefghij", 10, 1, "abcdefghij", 1, 9, -9);
3784     test("abcdefghij", 10, 1, "abcdefghij", 1, 10, -9);
3785     test("abcdefghij", 10, 1, "abcdefghij", 5, 0, 0);
3786     test("abcdefghij", 10, 1, "abcdefghij", 5, 1, -1);
3787     test("abcdefghij", 10, 1, "abcdefghij", 5, 2, -2);
3788     test("abcdefghij", 10, 1, "abcdefghij", 5, 4, -4);
3789     test("abcdefghij", 10, 1, "abcdefghij", 5, 5, -5);
3790     test("abcdefghij", 10, 1, "abcdefghij", 5, 6, -5);
3791     test("abcdefghij", 10, 1, "abcdefghij", 9, 0, 0);
3792     test("abcdefghij", 10, 1, "abcdefghij", 9, 1, -1);
3793     test("abcdefghij", 10, 1, "abcdefghij", 9, 2, -1);
3794     test("abcdefghij", 10, 1, "abcdefghij", 10, 0, 0);
3795 }
3796 
test36()3797 void test36()
3798 {
3799     test("abcdefghij", 10, 1, "abcdefghij", 10, 1, 0);
3800     test("abcdefghij", 10, 1, "abcdefghij", 11, 0, 0);
3801     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 0, 0, 0);
3802     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 0, 1, -1);
3803     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 0, 10, -10);
3804     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 0, 19, -19);
3805     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 0, 20, -20);
3806     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 0, 21, -20);
3807     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 1, 0, 0);
3808     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 1, 1, -1);
3809     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 1, 9, -9);
3810     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 1, 18, -18);
3811     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 1, 19, -19);
3812     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 1, 20, -19);
3813     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 10, 0, 0);
3814     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 10, 1, -1);
3815     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 10, 5, -5);
3816     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 10, 9, -9);
3817     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 10, 10, -10);
3818     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 10, 11, -10);
3819     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 19, 0, 0);
3820     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 19, 1, -1);
3821     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 19, 2, -1);
3822     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 20, 0, 0);
3823     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 20, 1, 0);
3824     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 21, 0, 0);
3825     test("abcdefghij", 11, 0, "", 0, 0, 0);
3826     test("abcdefghij", 11, 0, "", 0, 1, 0);
3827     test("abcdefghij", 11, 0, "", 1, 0, 0);
3828     test("abcdefghij", 11, 0, "abcde", 0, 0, 0);
3829     test("abcdefghij", 11, 0, "abcde", 0, 1, 0);
3830     test("abcdefghij", 11, 0, "abcde", 0, 2, 0);
3831     test("abcdefghij", 11, 0, "abcde", 0, 4, 0);
3832     test("abcdefghij", 11, 0, "abcde", 0, 5, 0);
3833     test("abcdefghij", 11, 0, "abcde", 0, 6, 0);
3834     test("abcdefghij", 11, 0, "abcde", 1, 0, 0);
3835     test("abcdefghij", 11, 0, "abcde", 1, 1, 0);
3836     test("abcdefghij", 11, 0, "abcde", 1, 2, 0);
3837     test("abcdefghij", 11, 0, "abcde", 1, 3, 0);
3838     test("abcdefghij", 11, 0, "abcde", 1, 4, 0);
3839     test("abcdefghij", 11, 0, "abcde", 1, 5, 0);
3840     test("abcdefghij", 11, 0, "abcde", 2, 0, 0);
3841     test("abcdefghij", 11, 0, "abcde", 2, 1, 0);
3842     test("abcdefghij", 11, 0, "abcde", 2, 2, 0);
3843     test("abcdefghij", 11, 0, "abcde", 2, 3, 0);
3844     test("abcdefghij", 11, 0, "abcde", 2, 4, 0);
3845     test("abcdefghij", 11, 0, "abcde", 4, 0, 0);
3846     test("abcdefghij", 11, 0, "abcde", 4, 1, 0);
3847     test("abcdefghij", 11, 0, "abcde", 4, 2, 0);
3848     test("abcdefghij", 11, 0, "abcde", 5, 0, 0);
3849     test("abcdefghij", 11, 0, "abcde", 5, 1, 0);
3850     test("abcdefghij", 11, 0, "abcde", 6, 0, 0);
3851     test("abcdefghij", 11, 0, "abcdefghij", 0, 0, 0);
3852     test("abcdefghij", 11, 0, "abcdefghij", 0, 1, 0);
3853     test("abcdefghij", 11, 0, "abcdefghij", 0, 5, 0);
3854     test("abcdefghij", 11, 0, "abcdefghij", 0, 9, 0);
3855     test("abcdefghij", 11, 0, "abcdefghij", 0, 10, 0);
3856     test("abcdefghij", 11, 0, "abcdefghij", 0, 11, 0);
3857     test("abcdefghij", 11, 0, "abcdefghij", 1, 0, 0);
3858     test("abcdefghij", 11, 0, "abcdefghij", 1, 1, 0);
3859     test("abcdefghij", 11, 0, "abcdefghij", 1, 4, 0);
3860     test("abcdefghij", 11, 0, "abcdefghij", 1, 8, 0);
3861     test("abcdefghij", 11, 0, "abcdefghij", 1, 9, 0);
3862     test("abcdefghij", 11, 0, "abcdefghij", 1, 10, 0);
3863     test("abcdefghij", 11, 0, "abcdefghij", 5, 0, 0);
3864     test("abcdefghij", 11, 0, "abcdefghij", 5, 1, 0);
3865     test("abcdefghij", 11, 0, "abcdefghij", 5, 2, 0);
3866     test("abcdefghij", 11, 0, "abcdefghij", 5, 4, 0);
3867     test("abcdefghij", 11, 0, "abcdefghij", 5, 5, 0);
3868     test("abcdefghij", 11, 0, "abcdefghij", 5, 6, 0);
3869     test("abcdefghij", 11, 0, "abcdefghij", 9, 0, 0);
3870     test("abcdefghij", 11, 0, "abcdefghij", 9, 1, 0);
3871     test("abcdefghij", 11, 0, "abcdefghij", 9, 2, 0);
3872     test("abcdefghij", 11, 0, "abcdefghij", 10, 0, 0);
3873     test("abcdefghij", 11, 0, "abcdefghij", 10, 1, 0);
3874     test("abcdefghij", 11, 0, "abcdefghij", 11, 0, 0);
3875     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0, 0, 0);
3876     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0, 1, 0);
3877     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0, 10, 0);
3878     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0, 19, 0);
3879     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0, 20, 0);
3880     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0, 21, 0);
3881     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 1, 0, 0);
3882     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 1, 1, 0);
3883     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 1, 9, 0);
3884     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 1, 18, 0);
3885     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 1, 19, 0);
3886     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 1, 20, 0);
3887     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 10, 0, 0);
3888     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 10, 1, 0);
3889     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 10, 5, 0);
3890     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 10, 9, 0);
3891     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 10, 10, 0);
3892     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 10, 11, 0);
3893     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 19, 0, 0);
3894     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 19, 1, 0);
3895     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 19, 2, 0);
3896     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 20, 0, 0);
3897     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 20, 1, 0);
3898     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 21, 0, 0);
3899 }
3900 
test37()3901 void test37()
3902 {
3903     test("abcdefghijklmnopqrst", 0, 0, "", 0, 0, 0);
3904     test("abcdefghijklmnopqrst", 0, 0, "", 0, 1, 0);
3905     test("abcdefghijklmnopqrst", 0, 0, "", 1, 0, 0);
3906     test("abcdefghijklmnopqrst", 0, 0, "abcde", 0, 0, 0);
3907     test("abcdefghijklmnopqrst", 0, 0, "abcde", 0, 1, -1);
3908     test("abcdefghijklmnopqrst", 0, 0, "abcde", 0, 2, -2);
3909     test("abcdefghijklmnopqrst", 0, 0, "abcde", 0, 4, -4);
3910     test("abcdefghijklmnopqrst", 0, 0, "abcde", 0, 5, -5);
3911     test("abcdefghijklmnopqrst", 0, 0, "abcde", 0, 6, -5);
3912     test("abcdefghijklmnopqrst", 0, 0, "abcde", 1, 0, 0);
3913     test("abcdefghijklmnopqrst", 0, 0, "abcde", 1, 1, -1);
3914     test("abcdefghijklmnopqrst", 0, 0, "abcde", 1, 2, -2);
3915     test("abcdefghijklmnopqrst", 0, 0, "abcde", 1, 3, -3);
3916     test("abcdefghijklmnopqrst", 0, 0, "abcde", 1, 4, -4);
3917     test("abcdefghijklmnopqrst", 0, 0, "abcde", 1, 5, -4);
3918     test("abcdefghijklmnopqrst", 0, 0, "abcde", 2, 0, 0);
3919     test("abcdefghijklmnopqrst", 0, 0, "abcde", 2, 1, -1);
3920     test("abcdefghijklmnopqrst", 0, 0, "abcde", 2, 2, -2);
3921     test("abcdefghijklmnopqrst", 0, 0, "abcde", 2, 3, -3);
3922     test("abcdefghijklmnopqrst", 0, 0, "abcde", 2, 4, -3);
3923     test("abcdefghijklmnopqrst", 0, 0, "abcde", 4, 0, 0);
3924     test("abcdefghijklmnopqrst", 0, 0, "abcde", 4, 1, -1);
3925     test("abcdefghijklmnopqrst", 0, 0, "abcde", 4, 2, -1);
3926     test("abcdefghijklmnopqrst", 0, 0, "abcde", 5, 0, 0);
3927     test("abcdefghijklmnopqrst", 0, 0, "abcde", 5, 1, 0);
3928     test("abcdefghijklmnopqrst", 0, 0, "abcde", 6, 0, 0);
3929     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 0, 0, 0);
3930     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 0, 1, -1);
3931     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 0, 5, -5);
3932     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 0, 9, -9);
3933     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 0, 10, -10);
3934     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 0, 11, -10);
3935     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 1, 0, 0);
3936     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 1, 1, -1);
3937     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 1, 4, -4);
3938     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 1, 8, -8);
3939     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 1, 9, -9);
3940     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 1, 10, -9);
3941     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 5, 0, 0);
3942     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 5, 1, -1);
3943     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 5, 2, -2);
3944     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 5, 4, -4);
3945     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 5, 5, -5);
3946     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 5, 6, -5);
3947     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 9, 0, 0);
3948     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 9, 1, -1);
3949     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 9, 2, -1);
3950     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 10, 0, 0);
3951     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 10, 1, 0);
3952     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 11, 0, 0);
3953     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 0, 0, 0);
3954     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 0, 1, -1);
3955     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 0, 10, -10);
3956     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 0, 19, -19);
3957     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 0, 20, -20);
3958     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 0, 21, -20);
3959     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 1, 0, 0);
3960     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 1, 1, -1);
3961     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 1, 9, -9);
3962     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 1, 18, -18);
3963     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 1, 19, -19);
3964     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 1, 20, -19);
3965     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 10, 0, 0);
3966     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 10, 1, -1);
3967     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 10, 5, -5);
3968     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 10, 9, -9);
3969     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 10, 10, -10);
3970     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 10, 11, -10);
3971     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 19, 0, 0);
3972     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 19, 1, -1);
3973     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 19, 2, -1);
3974     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 20, 0, 0);
3975     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 20, 1, 0);
3976     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 21, 0, 0);
3977     test("abcdefghijklmnopqrst", 0, 1, "", 0, 0, 1);
3978     test("abcdefghijklmnopqrst", 0, 1, "", 0, 1, 1);
3979     test("abcdefghijklmnopqrst", 0, 1, "", 1, 0, 0);
3980     test("abcdefghijklmnopqrst", 0, 1, "abcde", 0, 0, 1);
3981     test("abcdefghijklmnopqrst", 0, 1, "abcde", 0, 1, 0);
3982     test("abcdefghijklmnopqrst", 0, 1, "abcde", 0, 2, -1);
3983     test("abcdefghijklmnopqrst", 0, 1, "abcde", 0, 4, -3);
3984     test("abcdefghijklmnopqrst", 0, 1, "abcde", 0, 5, -4);
3985     test("abcdefghijklmnopqrst", 0, 1, "abcde", 0, 6, -4);
3986     test("abcdefghijklmnopqrst", 0, 1, "abcde", 1, 0, 1);
3987     test("abcdefghijklmnopqrst", 0, 1, "abcde", 1, 1, -1);
3988     test("abcdefghijklmnopqrst", 0, 1, "abcde", 1, 2, -1);
3989     test("abcdefghijklmnopqrst", 0, 1, "abcde", 1, 3, -1);
3990     test("abcdefghijklmnopqrst", 0, 1, "abcde", 1, 4, -1);
3991     test("abcdefghijklmnopqrst", 0, 1, "abcde", 1, 5, -1);
3992     test("abcdefghijklmnopqrst", 0, 1, "abcde", 2, 0, 1);
3993     test("abcdefghijklmnopqrst", 0, 1, "abcde", 2, 1, -2);
3994     test("abcdefghijklmnopqrst", 0, 1, "abcde", 2, 2, -2);
3995     test("abcdefghijklmnopqrst", 0, 1, "abcde", 2, 3, -2);
3996     test("abcdefghijklmnopqrst", 0, 1, "abcde", 2, 4, -2);
3997     test("abcdefghijklmnopqrst", 0, 1, "abcde", 4, 0, 1);
3998     test("abcdefghijklmnopqrst", 0, 1, "abcde", 4, 1, -4);
3999     test("abcdefghijklmnopqrst", 0, 1, "abcde", 4, 2, -4);
4000     test("abcdefghijklmnopqrst", 0, 1, "abcde", 5, 0, 1);
4001     test("abcdefghijklmnopqrst", 0, 1, "abcde", 5, 1, 1);
4002     test("abcdefghijklmnopqrst", 0, 1, "abcde", 6, 0, 0);
4003 }
4004 
test38()4005 void test38()
4006 {
4007     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 0, 0, 1);
4008     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 0, 1, 0);
4009     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 0, 5, -4);
4010     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 0, 9, -8);
4011     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 0, 10, -9);
4012     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 0, 11, -9);
4013     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 1, 0, 1);
4014     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 1, 1, -1);
4015     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 1, 4, -1);
4016     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 1, 8, -1);
4017     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 1, 9, -1);
4018     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 1, 10, -1);
4019     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 5, 0, 1);
4020     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 5, 1, -5);
4021     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 5, 2, -5);
4022     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 5, 4, -5);
4023     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 5, 5, -5);
4024     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 5, 6, -5);
4025     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 9, 0, 1);
4026     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 9, 1, -9);
4027     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 9, 2, -9);
4028     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 10, 0, 1);
4029     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 10, 1, 1);
4030     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 11, 0, 0);
4031     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 0, 0, 1);
4032     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 0, 1, 0);
4033     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 0, 10, -9);
4034     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 0, 19, -18);
4035     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 0, 20, -19);
4036     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 0, 21, -19);
4037     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 1, 0, 1);
4038     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 1, 1, -1);
4039     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 1, 9, -1);
4040     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 1, 18, -1);
4041     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 1, 19, -1);
4042     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 1, 20, -1);
4043     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 10, 0, 1);
4044     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 10, 1, -10);
4045     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 10, 5, -10);
4046     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 10, 9, -10);
4047     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 10, 10, -10);
4048     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 10, 11, -10);
4049     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 19, 0, 1);
4050     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 19, 1, -19);
4051     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 19, 2, -19);
4052     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 20, 0, 1);
4053     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 20, 1, 1);
4054     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 21, 0, 0);
4055     test("abcdefghijklmnopqrst", 0, 10, "", 0, 0, 10);
4056     test("abcdefghijklmnopqrst", 0, 10, "", 0, 1, 10);
4057     test("abcdefghijklmnopqrst", 0, 10, "", 1, 0, 0);
4058     test("abcdefghijklmnopqrst", 0, 10, "abcde", 0, 0, 10);
4059     test("abcdefghijklmnopqrst", 0, 10, "abcde", 0, 1, 9);
4060     test("abcdefghijklmnopqrst", 0, 10, "abcde", 0, 2, 8);
4061     test("abcdefghijklmnopqrst", 0, 10, "abcde", 0, 4, 6);
4062     test("abcdefghijklmnopqrst", 0, 10, "abcde", 0, 5, 5);
4063     test("abcdefghijklmnopqrst", 0, 10, "abcde", 0, 6, 5);
4064     test("abcdefghijklmnopqrst", 0, 10, "abcde", 1, 0, 10);
4065     test("abcdefghijklmnopqrst", 0, 10, "abcde", 1, 1, -1);
4066     test("abcdefghijklmnopqrst", 0, 10, "abcde", 1, 2, -1);
4067     test("abcdefghijklmnopqrst", 0, 10, "abcde", 1, 3, -1);
4068     test("abcdefghijklmnopqrst", 0, 10, "abcde", 1, 4, -1);
4069     test("abcdefghijklmnopqrst", 0, 10, "abcde", 1, 5, -1);
4070     test("abcdefghijklmnopqrst", 0, 10, "abcde", 2, 0, 10);
4071     test("abcdefghijklmnopqrst", 0, 10, "abcde", 2, 1, -2);
4072     test("abcdefghijklmnopqrst", 0, 10, "abcde", 2, 2, -2);
4073     test("abcdefghijklmnopqrst", 0, 10, "abcde", 2, 3, -2);
4074     test("abcdefghijklmnopqrst", 0, 10, "abcde", 2, 4, -2);
4075     test("abcdefghijklmnopqrst", 0, 10, "abcde", 4, 0, 10);
4076     test("abcdefghijklmnopqrst", 0, 10, "abcde", 4, 1, -4);
4077     test("abcdefghijklmnopqrst", 0, 10, "abcde", 4, 2, -4);
4078     test("abcdefghijklmnopqrst", 0, 10, "abcde", 5, 0, 10);
4079     test("abcdefghijklmnopqrst", 0, 10, "abcde", 5, 1, 10);
4080     test("abcdefghijklmnopqrst", 0, 10, "abcde", 6, 0, 0);
4081     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 0, 0, 10);
4082     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 0, 1, 9);
4083     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 0, 5, 5);
4084     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 0, 9, 1);
4085     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 0, 10, 0);
4086     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 0, 11, 0);
4087     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 1, 0, 10);
4088     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 1, 1, -1);
4089     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 1, 4, -1);
4090     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 1, 8, -1);
4091     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 1, 9, -1);
4092     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 1, 10, -1);
4093     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 5, 0, 10);
4094     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 5, 1, -5);
4095     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 5, 2, -5);
4096     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 5, 4, -5);
4097     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 5, 5, -5);
4098     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 5, 6, -5);
4099     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 9, 0, 10);
4100     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 9, 1, -9);
4101     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 9, 2, -9);
4102     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 10, 0, 10);
4103     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 10, 1, 10);
4104     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 11, 0, 0);
4105     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 0, 0, 10);
4106     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 0, 1, 9);
4107 }
4108 
test39()4109 void test39()
4110 {
4111     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 0, 10, 0);
4112     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 0, 19, -9);
4113     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 0, 20, -10);
4114     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 0, 21, -10);
4115     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 1, 0, 10);
4116     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 1, 1, -1);
4117     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 1, 9, -1);
4118     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 1, 18, -1);
4119     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 1, 19, -1);
4120     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 1, 20, -1);
4121     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 10, 0, 10);
4122     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 10, 1, -10);
4123     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 10, 5, -10);
4124     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 10, 9, -10);
4125     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 10, 10, -10);
4126     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 10, 11, -10);
4127     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 19, 0, 10);
4128     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 19, 1, -19);
4129     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 19, 2, -19);
4130     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 20, 0, 10);
4131     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 20, 1, 10);
4132     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 21, 0, 0);
4133     test("abcdefghijklmnopqrst", 0, 19, "", 0, 0, 19);
4134     test("abcdefghijklmnopqrst", 0, 19, "", 0, 1, 19);
4135     test("abcdefghijklmnopqrst", 0, 19, "", 1, 0, 0);
4136     test("abcdefghijklmnopqrst", 0, 19, "abcde", 0, 0, 19);
4137     test("abcdefghijklmnopqrst", 0, 19, "abcde", 0, 1, 18);
4138     test("abcdefghijklmnopqrst", 0, 19, "abcde", 0, 2, 17);
4139     test("abcdefghijklmnopqrst", 0, 19, "abcde", 0, 4, 15);
4140     test("abcdefghijklmnopqrst", 0, 19, "abcde", 0, 5, 14);
4141     test("abcdefghijklmnopqrst", 0, 19, "abcde", 0, 6, 14);
4142     test("abcdefghijklmnopqrst", 0, 19, "abcde", 1, 0, 19);
4143     test("abcdefghijklmnopqrst", 0, 19, "abcde", 1, 1, -1);
4144     test("abcdefghijklmnopqrst", 0, 19, "abcde", 1, 2, -1);
4145     test("abcdefghijklmnopqrst", 0, 19, "abcde", 1, 3, -1);
4146     test("abcdefghijklmnopqrst", 0, 19, "abcde", 1, 4, -1);
4147     test("abcdefghijklmnopqrst", 0, 19, "abcde", 1, 5, -1);
4148     test("abcdefghijklmnopqrst", 0, 19, "abcde", 2, 0, 19);
4149     test("abcdefghijklmnopqrst", 0, 19, "abcde", 2, 1, -2);
4150     test("abcdefghijklmnopqrst", 0, 19, "abcde", 2, 2, -2);
4151     test("abcdefghijklmnopqrst", 0, 19, "abcde", 2, 3, -2);
4152     test("abcdefghijklmnopqrst", 0, 19, "abcde", 2, 4, -2);
4153     test("abcdefghijklmnopqrst", 0, 19, "abcde", 4, 0, 19);
4154     test("abcdefghijklmnopqrst", 0, 19, "abcde", 4, 1, -4);
4155     test("abcdefghijklmnopqrst", 0, 19, "abcde", 4, 2, -4);
4156     test("abcdefghijklmnopqrst", 0, 19, "abcde", 5, 0, 19);
4157     test("abcdefghijklmnopqrst", 0, 19, "abcde", 5, 1, 19);
4158     test("abcdefghijklmnopqrst", 0, 19, "abcde", 6, 0, 0);
4159     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 0, 0, 19);
4160     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 0, 1, 18);
4161     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 0, 5, 14);
4162     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 0, 9, 10);
4163     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 0, 10, 9);
4164     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 0, 11, 9);
4165     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 1, 0, 19);
4166     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 1, 1, -1);
4167     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 1, 4, -1);
4168     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 1, 8, -1);
4169     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 1, 9, -1);
4170     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 1, 10, -1);
4171     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 5, 0, 19);
4172     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 5, 1, -5);
4173     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 5, 2, -5);
4174     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 5, 4, -5);
4175     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 5, 5, -5);
4176     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 5, 6, -5);
4177     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 9, 0, 19);
4178     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 9, 1, -9);
4179     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 9, 2, -9);
4180     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 10, 0, 19);
4181     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 10, 1, 19);
4182     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 11, 0, 0);
4183     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 0, 0, 19);
4184     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 0, 1, 18);
4185     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 0, 10, 9);
4186     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 0, 19, 0);
4187     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 0, 20, -1);
4188     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 0, 21, -1);
4189     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 1, 0, 19);
4190     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 1, 1, -1);
4191     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 1, 9, -1);
4192     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 1, 18, -1);
4193     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 1, 19, -1);
4194     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 1, 20, -1);
4195     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 10, 0, 19);
4196     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 10, 1, -10);
4197     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 10, 5, -10);
4198     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 10, 9, -10);
4199     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 10, 10, -10);
4200     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 10, 11, -10);
4201     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 19, 0, 19);
4202     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 19, 1, -19);
4203     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 19, 2, -19);
4204     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 20, 0, 19);
4205     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 20, 1, 19);
4206     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 21, 0, 0);
4207     test("abcdefghijklmnopqrst", 0, 20, "", 0, 0, 20);
4208     test("abcdefghijklmnopqrst", 0, 20, "", 0, 1, 20);
4209     test("abcdefghijklmnopqrst", 0, 20, "", 1, 0, 0);
4210     test("abcdefghijklmnopqrst", 0, 20, "abcde", 0, 0, 20);
4211 }
4212 
test40()4213 void test40()
4214 {
4215     test("abcdefghijklmnopqrst", 0, 20, "abcde", 0, 1, 19);
4216     test("abcdefghijklmnopqrst", 0, 20, "abcde", 0, 2, 18);
4217     test("abcdefghijklmnopqrst", 0, 20, "abcde", 0, 4, 16);
4218     test("abcdefghijklmnopqrst", 0, 20, "abcde", 0, 5, 15);
4219     test("abcdefghijklmnopqrst", 0, 20, "abcde", 0, 6, 15);
4220     test("abcdefghijklmnopqrst", 0, 20, "abcde", 1, 0, 20);
4221     test("abcdefghijklmnopqrst", 0, 20, "abcde", 1, 1, -1);
4222     test("abcdefghijklmnopqrst", 0, 20, "abcde", 1, 2, -1);
4223     test("abcdefghijklmnopqrst", 0, 20, "abcde", 1, 3, -1);
4224     test("abcdefghijklmnopqrst", 0, 20, "abcde", 1, 4, -1);
4225     test("abcdefghijklmnopqrst", 0, 20, "abcde", 1, 5, -1);
4226     test("abcdefghijklmnopqrst", 0, 20, "abcde", 2, 0, 20);
4227     test("abcdefghijklmnopqrst", 0, 20, "abcde", 2, 1, -2);
4228     test("abcdefghijklmnopqrst", 0, 20, "abcde", 2, 2, -2);
4229     test("abcdefghijklmnopqrst", 0, 20, "abcde", 2, 3, -2);
4230     test("abcdefghijklmnopqrst", 0, 20, "abcde", 2, 4, -2);
4231     test("abcdefghijklmnopqrst", 0, 20, "abcde", 4, 0, 20);
4232     test("abcdefghijklmnopqrst", 0, 20, "abcde", 4, 1, -4);
4233     test("abcdefghijklmnopqrst", 0, 20, "abcde", 4, 2, -4);
4234     test("abcdefghijklmnopqrst", 0, 20, "abcde", 5, 0, 20);
4235     test("abcdefghijklmnopqrst", 0, 20, "abcde", 5, 1, 20);
4236     test("abcdefghijklmnopqrst", 0, 20, "abcde", 6, 0, 0);
4237     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 0, 0, 20);
4238     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 0, 1, 19);
4239     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 0, 5, 15);
4240     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 0, 9, 11);
4241     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 0, 10, 10);
4242     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 0, 11, 10);
4243     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 1, 0, 20);
4244     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 1, 1, -1);
4245     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 1, 4, -1);
4246     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 1, 8, -1);
4247     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 1, 9, -1);
4248     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 1, 10, -1);
4249     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 5, 0, 20);
4250     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 5, 1, -5);
4251     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 5, 2, -5);
4252     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 5, 4, -5);
4253     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 5, 5, -5);
4254     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 5, 6, -5);
4255     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 9, 0, 20);
4256     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 9, 1, -9);
4257     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 9, 2, -9);
4258     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 10, 0, 20);
4259     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 10, 1, 20);
4260     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 11, 0, 0);
4261     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 0, 0, 20);
4262     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 0, 1, 19);
4263     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 0, 10, 10);
4264     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 0, 19, 1);
4265     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 0, 20, 0);
4266     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 0, 21, 0);
4267     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 1, 0, 20);
4268     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 1, 1, -1);
4269     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 1, 9, -1);
4270     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 1, 18, -1);
4271     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 1, 19, -1);
4272     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 1, 20, -1);
4273     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 10, 0, 20);
4274     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 10, 1, -10);
4275     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 10, 5, -10);
4276     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 10, 9, -10);
4277     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 10, 10, -10);
4278     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 10, 11, -10);
4279     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 19, 0, 20);
4280     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 19, 1, -19);
4281     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 19, 2, -19);
4282     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 20, 0, 20);
4283     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 20, 1, 20);
4284     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 21, 0, 0);
4285     test("abcdefghijklmnopqrst", 0, 21, "", 0, 0, 20);
4286     test("abcdefghijklmnopqrst", 0, 21, "", 0, 1, 20);
4287     test("abcdefghijklmnopqrst", 0, 21, "", 1, 0, 0);
4288     test("abcdefghijklmnopqrst", 0, 21, "abcde", 0, 0, 20);
4289     test("abcdefghijklmnopqrst", 0, 21, "abcde", 0, 1, 19);
4290     test("abcdefghijklmnopqrst", 0, 21, "abcde", 0, 2, 18);
4291     test("abcdefghijklmnopqrst", 0, 21, "abcde", 0, 4, 16);
4292     test("abcdefghijklmnopqrst", 0, 21, "abcde", 0, 5, 15);
4293     test("abcdefghijklmnopqrst", 0, 21, "abcde", 0, 6, 15);
4294     test("abcdefghijklmnopqrst", 0, 21, "abcde", 1, 0, 20);
4295     test("abcdefghijklmnopqrst", 0, 21, "abcde", 1, 1, -1);
4296     test("abcdefghijklmnopqrst", 0, 21, "abcde", 1, 2, -1);
4297     test("abcdefghijklmnopqrst", 0, 21, "abcde", 1, 3, -1);
4298     test("abcdefghijklmnopqrst", 0, 21, "abcde", 1, 4, -1);
4299     test("abcdefghijklmnopqrst", 0, 21, "abcde", 1, 5, -1);
4300     test("abcdefghijklmnopqrst", 0, 21, "abcde", 2, 0, 20);
4301     test("abcdefghijklmnopqrst", 0, 21, "abcde", 2, 1, -2);
4302     test("abcdefghijklmnopqrst", 0, 21, "abcde", 2, 2, -2);
4303     test("abcdefghijklmnopqrst", 0, 21, "abcde", 2, 3, -2);
4304     test("abcdefghijklmnopqrst", 0, 21, "abcde", 2, 4, -2);
4305     test("abcdefghijklmnopqrst", 0, 21, "abcde", 4, 0, 20);
4306     test("abcdefghijklmnopqrst", 0, 21, "abcde", 4, 1, -4);
4307     test("abcdefghijklmnopqrst", 0, 21, "abcde", 4, 2, -4);
4308     test("abcdefghijklmnopqrst", 0, 21, "abcde", 5, 0, 20);
4309     test("abcdefghijklmnopqrst", 0, 21, "abcde", 5, 1, 20);
4310     test("abcdefghijklmnopqrst", 0, 21, "abcde", 6, 0, 0);
4311     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 0, 0, 20);
4312     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 0, 1, 19);
4313     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 0, 5, 15);
4314     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 0, 9, 11);
4315 }
4316 
test41()4317 void test41()
4318 {
4319     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 0, 10, 10);
4320     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 0, 11, 10);
4321     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 1, 0, 20);
4322     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 1, 1, -1);
4323     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 1, 4, -1);
4324     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 1, 8, -1);
4325     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 1, 9, -1);
4326     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 1, 10, -1);
4327     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 5, 0, 20);
4328     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 5, 1, -5);
4329     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 5, 2, -5);
4330     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 5, 4, -5);
4331     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 5, 5, -5);
4332     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 5, 6, -5);
4333     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 9, 0, 20);
4334     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 9, 1, -9);
4335     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 9, 2, -9);
4336     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 10, 0, 20);
4337     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 10, 1, 20);
4338     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 11, 0, 0);
4339     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 0, 0, 20);
4340     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 0, 1, 19);
4341     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 0, 10, 10);
4342     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 0, 19, 1);
4343     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 0, 20, 0);
4344     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 0, 21, 0);
4345     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 1, 0, 20);
4346     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 1, 1, -1);
4347     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 1, 9, -1);
4348     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 1, 18, -1);
4349     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 1, 19, -1);
4350     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 1, 20, -1);
4351     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 10, 0, 20);
4352     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 10, 1, -10);
4353     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 10, 5, -10);
4354     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 10, 9, -10);
4355     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 10, 10, -10);
4356     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 10, 11, -10);
4357     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 19, 0, 20);
4358     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 19, 1, -19);
4359     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 19, 2, -19);
4360     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 20, 0, 20);
4361     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 20, 1, 20);
4362     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 21, 0, 0);
4363     test("abcdefghijklmnopqrst", 1, 0, "", 0, 0, 0);
4364     test("abcdefghijklmnopqrst", 1, 0, "", 0, 1, 0);
4365     test("abcdefghijklmnopqrst", 1, 0, "", 1, 0, 0);
4366     test("abcdefghijklmnopqrst", 1, 0, "abcde", 0, 0, 0);
4367     test("abcdefghijklmnopqrst", 1, 0, "abcde", 0, 1, -1);
4368     test("abcdefghijklmnopqrst", 1, 0, "abcde", 0, 2, -2);
4369     test("abcdefghijklmnopqrst", 1, 0, "abcde", 0, 4, -4);
4370     test("abcdefghijklmnopqrst", 1, 0, "abcde", 0, 5, -5);
4371     test("abcdefghijklmnopqrst", 1, 0, "abcde", 0, 6, -5);
4372     test("abcdefghijklmnopqrst", 1, 0, "abcde", 1, 0, 0);
4373     test("abcdefghijklmnopqrst", 1, 0, "abcde", 1, 1, -1);
4374     test("abcdefghijklmnopqrst", 1, 0, "abcde", 1, 2, -2);
4375     test("abcdefghijklmnopqrst", 1, 0, "abcde", 1, 3, -3);
4376     test("abcdefghijklmnopqrst", 1, 0, "abcde", 1, 4, -4);
4377     test("abcdefghijklmnopqrst", 1, 0, "abcde", 1, 5, -4);
4378     test("abcdefghijklmnopqrst", 1, 0, "abcde", 2, 0, 0);
4379     test("abcdefghijklmnopqrst", 1, 0, "abcde", 2, 1, -1);
4380     test("abcdefghijklmnopqrst", 1, 0, "abcde", 2, 2, -2);
4381     test("abcdefghijklmnopqrst", 1, 0, "abcde", 2, 3, -3);
4382     test("abcdefghijklmnopqrst", 1, 0, "abcde", 2, 4, -3);
4383     test("abcdefghijklmnopqrst", 1, 0, "abcde", 4, 0, 0);
4384     test("abcdefghijklmnopqrst", 1, 0, "abcde", 4, 1, -1);
4385     test("abcdefghijklmnopqrst", 1, 0, "abcde", 4, 2, -1);
4386     test("abcdefghijklmnopqrst", 1, 0, "abcde", 5, 0, 0);
4387     test("abcdefghijklmnopqrst", 1, 0, "abcde", 5, 1, 0);
4388     test("abcdefghijklmnopqrst", 1, 0, "abcde", 6, 0, 0);
4389     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 0, 0, 0);
4390     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 0, 1, -1);
4391     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 0, 5, -5);
4392     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 0, 9, -9);
4393     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 0, 10, -10);
4394     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 0, 11, -10);
4395     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 1, 0, 0);
4396     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 1, 1, -1);
4397     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 1, 4, -4);
4398     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 1, 8, -8);
4399     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 1, 9, -9);
4400     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 1, 10, -9);
4401     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 5, 0, 0);
4402     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 5, 1, -1);
4403     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 5, 2, -2);
4404     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 5, 4, -4);
4405     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 5, 5, -5);
4406     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 5, 6, -5);
4407     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 9, 0, 0);
4408     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 9, 1, -1);
4409     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 9, 2, -1);
4410     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 10, 0, 0);
4411     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 10, 1, 0);
4412     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 11, 0, 0);
4413     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 0, 0, 0);
4414     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 0, 1, -1);
4415     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 0, 10, -10);
4416     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 0, 19, -19);
4417     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 0, 20, -20);
4418     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 0, 21, -20);
4419 }
4420 
test42()4421 void test42()
4422 {
4423     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 1, 0, 0);
4424     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 1, 1, -1);
4425     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 1, 9, -9);
4426     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 1, 18, -18);
4427     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 1, 19, -19);
4428     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 1, 20, -19);
4429     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 10, 0, 0);
4430     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 10, 1, -1);
4431     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 10, 5, -5);
4432     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 10, 9, -9);
4433     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 10, 10, -10);
4434     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 10, 11, -10);
4435     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 19, 0, 0);
4436     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 19, 1, -1);
4437     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 19, 2, -1);
4438     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 20, 0, 0);
4439     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 20, 1, 0);
4440     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 21, 0, 0);
4441     test("abcdefghijklmnopqrst", 1, 1, "", 0, 0, 1);
4442     test("abcdefghijklmnopqrst", 1, 1, "", 0, 1, 1);
4443     test("abcdefghijklmnopqrst", 1, 1, "", 1, 0, 0);
4444     test("abcdefghijklmnopqrst", 1, 1, "abcde", 0, 0, 1);
4445     test("abcdefghijklmnopqrst", 1, 1, "abcde", 0, 1, 1);
4446     test("abcdefghijklmnopqrst", 1, 1, "abcde", 0, 2, 1);
4447     test("abcdefghijklmnopqrst", 1, 1, "abcde", 0, 4, 1);
4448     test("abcdefghijklmnopqrst", 1, 1, "abcde", 0, 5, 1);
4449     test("abcdefghijklmnopqrst", 1, 1, "abcde", 0, 6, 1);
4450     test("abcdefghijklmnopqrst", 1, 1, "abcde", 1, 0, 1);
4451     test("abcdefghijklmnopqrst", 1, 1, "abcde", 1, 1, 0);
4452     test("abcdefghijklmnopqrst", 1, 1, "abcde", 1, 2, -1);
4453     test("abcdefghijklmnopqrst", 1, 1, "abcde", 1, 3, -2);
4454     test("abcdefghijklmnopqrst", 1, 1, "abcde", 1, 4, -3);
4455     test("abcdefghijklmnopqrst", 1, 1, "abcde", 1, 5, -3);
4456     test("abcdefghijklmnopqrst", 1, 1, "abcde", 2, 0, 1);
4457     test("abcdefghijklmnopqrst", 1, 1, "abcde", 2, 1, -1);
4458     test("abcdefghijklmnopqrst", 1, 1, "abcde", 2, 2, -1);
4459     test("abcdefghijklmnopqrst", 1, 1, "abcde", 2, 3, -1);
4460     test("abcdefghijklmnopqrst", 1, 1, "abcde", 2, 4, -1);
4461     test("abcdefghijklmnopqrst", 1, 1, "abcde", 4, 0, 1);
4462     test("abcdefghijklmnopqrst", 1, 1, "abcde", 4, 1, -3);
4463     test("abcdefghijklmnopqrst", 1, 1, "abcde", 4, 2, -3);
4464     test("abcdefghijklmnopqrst", 1, 1, "abcde", 5, 0, 1);
4465     test("abcdefghijklmnopqrst", 1, 1, "abcde", 5, 1, 1);
4466     test("abcdefghijklmnopqrst", 1, 1, "abcde", 6, 0, 0);
4467     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 0, 0, 1);
4468     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 0, 1, 1);
4469     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 0, 5, 1);
4470     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 0, 9, 1);
4471     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 0, 10, 1);
4472     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 0, 11, 1);
4473     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 1, 0, 1);
4474     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 1, 1, 0);
4475     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 1, 4, -3);
4476     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 1, 8, -7);
4477     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 1, 9, -8);
4478     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 1, 10, -8);
4479     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 5, 0, 1);
4480     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 5, 1, -4);
4481     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 5, 2, -4);
4482     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 5, 4, -4);
4483     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 5, 5, -4);
4484     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 5, 6, -4);
4485     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 9, 0, 1);
4486     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 9, 1, -8);
4487     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 9, 2, -8);
4488     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 10, 0, 1);
4489     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 10, 1, 1);
4490     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 11, 0, 0);
4491     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 0, 0, 1);
4492     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 0, 1, 1);
4493     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 0, 10, 1);
4494     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 0, 19, 1);
4495     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 0, 20, 1);
4496     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 0, 21, 1);
4497     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 1, 0, 1);
4498     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 1, 1, 0);
4499     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 1, 9, -8);
4500     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 1, 18, -17);
4501     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 1, 19, -18);
4502     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 1, 20, -18);
4503     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 10, 0, 1);
4504     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 10, 1, -9);
4505     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 10, 5, -9);
4506     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 10, 9, -9);
4507     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 10, 10, -9);
4508     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 10, 11, -9);
4509     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 19, 0, 1);
4510     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 19, 1, -18);
4511     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 19, 2, -18);
4512     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 20, 0, 1);
4513     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 20, 1, 1);
4514     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 21, 0, 0);
4515     test("abcdefghijklmnopqrst", 1, 9, "", 0, 0, 9);
4516     test("abcdefghijklmnopqrst", 1, 9, "", 0, 1, 9);
4517     test("abcdefghijklmnopqrst", 1, 9, "", 1, 0, 0);
4518     test("abcdefghijklmnopqrst", 1, 9, "abcde", 0, 0, 9);
4519     test("abcdefghijklmnopqrst", 1, 9, "abcde", 0, 1, 1);
4520     test("abcdefghijklmnopqrst", 1, 9, "abcde", 0, 2, 1);
4521     test("abcdefghijklmnopqrst", 1, 9, "abcde", 0, 4, 1);
4522     test("abcdefghijklmnopqrst", 1, 9, "abcde", 0, 5, 1);
4523 }
4524 
test43()4525 void test43()
4526 {
4527     test("abcdefghijklmnopqrst", 1, 9, "abcde", 0, 6, 1);
4528     test("abcdefghijklmnopqrst", 1, 9, "abcde", 1, 0, 9);
4529     test("abcdefghijklmnopqrst", 1, 9, "abcde", 1, 1, 8);
4530     test("abcdefghijklmnopqrst", 1, 9, "abcde", 1, 2, 7);
4531     test("abcdefghijklmnopqrst", 1, 9, "abcde", 1, 3, 6);
4532     test("abcdefghijklmnopqrst", 1, 9, "abcde", 1, 4, 5);
4533     test("abcdefghijklmnopqrst", 1, 9, "abcde", 1, 5, 5);
4534     test("abcdefghijklmnopqrst", 1, 9, "abcde", 2, 0, 9);
4535     test("abcdefghijklmnopqrst", 1, 9, "abcde", 2, 1, -1);
4536     test("abcdefghijklmnopqrst", 1, 9, "abcde", 2, 2, -1);
4537     test("abcdefghijklmnopqrst", 1, 9, "abcde", 2, 3, -1);
4538     test("abcdefghijklmnopqrst", 1, 9, "abcde", 2, 4, -1);
4539     test("abcdefghijklmnopqrst", 1, 9, "abcde", 4, 0, 9);
4540     test("abcdefghijklmnopqrst", 1, 9, "abcde", 4, 1, -3);
4541     test("abcdefghijklmnopqrst", 1, 9, "abcde", 4, 2, -3);
4542     test("abcdefghijklmnopqrst", 1, 9, "abcde", 5, 0, 9);
4543     test("abcdefghijklmnopqrst", 1, 9, "abcde", 5, 1, 9);
4544     test("abcdefghijklmnopqrst", 1, 9, "abcde", 6, 0, 0);
4545     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 0, 0, 9);
4546     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 0, 1, 1);
4547     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 0, 5, 1);
4548     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 0, 9, 1);
4549     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 0, 10, 1);
4550     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 0, 11, 1);
4551     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 1, 0, 9);
4552     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 1, 1, 8);
4553     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 1, 4, 5);
4554     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 1, 8, 1);
4555     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 1, 9, 0);
4556     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 1, 10, 0);
4557     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 5, 0, 9);
4558     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 5, 1, -4);
4559     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 5, 2, -4);
4560     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 5, 4, -4);
4561     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 5, 5, -4);
4562     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 5, 6, -4);
4563     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 9, 0, 9);
4564     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 9, 1, -8);
4565     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 9, 2, -8);
4566     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 10, 0, 9);
4567     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 10, 1, 9);
4568     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 11, 0, 0);
4569     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 0, 0, 9);
4570     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 0, 1, 1);
4571     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 0, 10, 1);
4572     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 0, 19, 1);
4573     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 0, 20, 1);
4574     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 0, 21, 1);
4575     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 1, 0, 9);
4576     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 1, 1, 8);
4577     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 1, 9, 0);
4578     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 1, 18, -9);
4579     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 1, 19, -10);
4580     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 1, 20, -10);
4581     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 10, 0, 9);
4582     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 10, 1, -9);
4583     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 10, 5, -9);
4584     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 10, 9, -9);
4585     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 10, 10, -9);
4586     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 10, 11, -9);
4587     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 19, 0, 9);
4588     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 19, 1, -18);
4589     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 19, 2, -18);
4590     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 20, 0, 9);
4591     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 20, 1, 9);
4592     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 21, 0, 0);
4593     test("abcdefghijklmnopqrst", 1, 18, "", 0, 0, 18);
4594     test("abcdefghijklmnopqrst", 1, 18, "", 0, 1, 18);
4595     test("abcdefghijklmnopqrst", 1, 18, "", 1, 0, 0);
4596     test("abcdefghijklmnopqrst", 1, 18, "abcde", 0, 0, 18);
4597     test("abcdefghijklmnopqrst", 1, 18, "abcde", 0, 1, 1);
4598     test("abcdefghijklmnopqrst", 1, 18, "abcde", 0, 2, 1);
4599     test("abcdefghijklmnopqrst", 1, 18, "abcde", 0, 4, 1);
4600     test("abcdefghijklmnopqrst", 1, 18, "abcde", 0, 5, 1);
4601     test("abcdefghijklmnopqrst", 1, 18, "abcde", 0, 6, 1);
4602     test("abcdefghijklmnopqrst", 1, 18, "abcde", 1, 0, 18);
4603     test("abcdefghijklmnopqrst", 1, 18, "abcde", 1, 1, 17);
4604     test("abcdefghijklmnopqrst", 1, 18, "abcde", 1, 2, 16);
4605     test("abcdefghijklmnopqrst", 1, 18, "abcde", 1, 3, 15);
4606     test("abcdefghijklmnopqrst", 1, 18, "abcde", 1, 4, 14);
4607     test("abcdefghijklmnopqrst", 1, 18, "abcde", 1, 5, 14);
4608     test("abcdefghijklmnopqrst", 1, 18, "abcde", 2, 0, 18);
4609     test("abcdefghijklmnopqrst", 1, 18, "abcde", 2, 1, -1);
4610     test("abcdefghijklmnopqrst", 1, 18, "abcde", 2, 2, -1);
4611     test("abcdefghijklmnopqrst", 1, 18, "abcde", 2, 3, -1);
4612     test("abcdefghijklmnopqrst", 1, 18, "abcde", 2, 4, -1);
4613     test("abcdefghijklmnopqrst", 1, 18, "abcde", 4, 0, 18);
4614     test("abcdefghijklmnopqrst", 1, 18, "abcde", 4, 1, -3);
4615     test("abcdefghijklmnopqrst", 1, 18, "abcde", 4, 2, -3);
4616     test("abcdefghijklmnopqrst", 1, 18, "abcde", 5, 0, 18);
4617     test("abcdefghijklmnopqrst", 1, 18, "abcde", 5, 1, 18);
4618     test("abcdefghijklmnopqrst", 1, 18, "abcde", 6, 0, 0);
4619     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 0, 0, 18);
4620     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 0, 1, 1);
4621     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 0, 5, 1);
4622     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 0, 9, 1);
4623     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 0, 10, 1);
4624     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 0, 11, 1);
4625     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 1, 0, 18);
4626     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 1, 1, 17);
4627 }
4628 
test44()4629 void test44()
4630 {
4631     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 1, 4, 14);
4632     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 1, 8, 10);
4633     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 1, 9, 9);
4634     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 1, 10, 9);
4635     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 5, 0, 18);
4636     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 5, 1, -4);
4637     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 5, 2, -4);
4638     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 5, 4, -4);
4639     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 5, 5, -4);
4640     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 5, 6, -4);
4641     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 9, 0, 18);
4642     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 9, 1, -8);
4643     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 9, 2, -8);
4644     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 10, 0, 18);
4645     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 10, 1, 18);
4646     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 11, 0, 0);
4647     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 0, 0, 18);
4648     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 0, 1, 1);
4649     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 0, 10, 1);
4650     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 0, 19, 1);
4651     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 0, 20, 1);
4652     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 0, 21, 1);
4653     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 1, 0, 18);
4654     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 1, 1, 17);
4655     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 1, 9, 9);
4656     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 1, 18, 0);
4657     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 1, 19, -1);
4658     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 1, 20, -1);
4659     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 10, 0, 18);
4660     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 10, 1, -9);
4661     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 10, 5, -9);
4662     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 10, 9, -9);
4663     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 10, 10, -9);
4664     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 10, 11, -9);
4665     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 19, 0, 18);
4666     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 19, 1, -18);
4667     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 19, 2, -18);
4668     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 20, 0, 18);
4669     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 20, 1, 18);
4670     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 21, 0, 0);
4671     test("abcdefghijklmnopqrst", 1, 19, "", 0, 0, 19);
4672     test("abcdefghijklmnopqrst", 1, 19, "", 0, 1, 19);
4673     test("abcdefghijklmnopqrst", 1, 19, "", 1, 0, 0);
4674     test("abcdefghijklmnopqrst", 1, 19, "abcde", 0, 0, 19);
4675     test("abcdefghijklmnopqrst", 1, 19, "abcde", 0, 1, 1);
4676     test("abcdefghijklmnopqrst", 1, 19, "abcde", 0, 2, 1);
4677     test("abcdefghijklmnopqrst", 1, 19, "abcde", 0, 4, 1);
4678     test("abcdefghijklmnopqrst", 1, 19, "abcde", 0, 5, 1);
4679     test("abcdefghijklmnopqrst", 1, 19, "abcde", 0, 6, 1);
4680     test("abcdefghijklmnopqrst", 1, 19, "abcde", 1, 0, 19);
4681     test("abcdefghijklmnopqrst", 1, 19, "abcde", 1, 1, 18);
4682     test("abcdefghijklmnopqrst", 1, 19, "abcde", 1, 2, 17);
4683     test("abcdefghijklmnopqrst", 1, 19, "abcde", 1, 3, 16);
4684     test("abcdefghijklmnopqrst", 1, 19, "abcde", 1, 4, 15);
4685     test("abcdefghijklmnopqrst", 1, 19, "abcde", 1, 5, 15);
4686     test("abcdefghijklmnopqrst", 1, 19, "abcde", 2, 0, 19);
4687     test("abcdefghijklmnopqrst", 1, 19, "abcde", 2, 1, -1);
4688     test("abcdefghijklmnopqrst", 1, 19, "abcde", 2, 2, -1);
4689     test("abcdefghijklmnopqrst", 1, 19, "abcde", 2, 3, -1);
4690     test("abcdefghijklmnopqrst", 1, 19, "abcde", 2, 4, -1);
4691     test("abcdefghijklmnopqrst", 1, 19, "abcde", 4, 0, 19);
4692     test("abcdefghijklmnopqrst", 1, 19, "abcde", 4, 1, -3);
4693     test("abcdefghijklmnopqrst", 1, 19, "abcde", 4, 2, -3);
4694     test("abcdefghijklmnopqrst", 1, 19, "abcde", 5, 0, 19);
4695     test("abcdefghijklmnopqrst", 1, 19, "abcde", 5, 1, 19);
4696     test("abcdefghijklmnopqrst", 1, 19, "abcde", 6, 0, 0);
4697     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 0, 0, 19);
4698     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 0, 1, 1);
4699     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 0, 5, 1);
4700     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 0, 9, 1);
4701     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 0, 10, 1);
4702     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 0, 11, 1);
4703     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 1, 0, 19);
4704     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 1, 1, 18);
4705     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 1, 4, 15);
4706     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 1, 8, 11);
4707     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 1, 9, 10);
4708     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 1, 10, 10);
4709     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 5, 0, 19);
4710     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 5, 1, -4);
4711     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 5, 2, -4);
4712     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 5, 4, -4);
4713     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 5, 5, -4);
4714     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 5, 6, -4);
4715     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 9, 0, 19);
4716     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 9, 1, -8);
4717     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 9, 2, -8);
4718     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 10, 0, 19);
4719     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 10, 1, 19);
4720     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 11, 0, 0);
4721     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 0, 0, 19);
4722     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 0, 1, 1);
4723     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 0, 10, 1);
4724     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 0, 19, 1);
4725     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 0, 20, 1);
4726     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 0, 21, 1);
4727     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 1, 0, 19);
4728     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 1, 1, 18);
4729     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 1, 9, 10);
4730     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 1, 18, 1);
4731 }
4732 
test45()4733 void test45()
4734 {
4735     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 1, 19, 0);
4736     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 1, 20, 0);
4737     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 10, 0, 19);
4738     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 10, 1, -9);
4739     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 10, 5, -9);
4740     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 10, 9, -9);
4741     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 10, 10, -9);
4742     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 10, 11, -9);
4743     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 19, 0, 19);
4744     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 19, 1, -18);
4745     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 19, 2, -18);
4746     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 20, 0, 19);
4747     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 20, 1, 19);
4748     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 21, 0, 0);
4749     test("abcdefghijklmnopqrst", 1, 20, "", 0, 0, 19);
4750     test("abcdefghijklmnopqrst", 1, 20, "", 0, 1, 19);
4751     test("abcdefghijklmnopqrst", 1, 20, "", 1, 0, 0);
4752     test("abcdefghijklmnopqrst", 1, 20, "abcde", 0, 0, 19);
4753     test("abcdefghijklmnopqrst", 1, 20, "abcde", 0, 1, 1);
4754     test("abcdefghijklmnopqrst", 1, 20, "abcde", 0, 2, 1);
4755     test("abcdefghijklmnopqrst", 1, 20, "abcde", 0, 4, 1);
4756     test("abcdefghijklmnopqrst", 1, 20, "abcde", 0, 5, 1);
4757     test("abcdefghijklmnopqrst", 1, 20, "abcde", 0, 6, 1);
4758     test("abcdefghijklmnopqrst", 1, 20, "abcde", 1, 0, 19);
4759     test("abcdefghijklmnopqrst", 1, 20, "abcde", 1, 1, 18);
4760     test("abcdefghijklmnopqrst", 1, 20, "abcde", 1, 2, 17);
4761     test("abcdefghijklmnopqrst", 1, 20, "abcde", 1, 3, 16);
4762     test("abcdefghijklmnopqrst", 1, 20, "abcde", 1, 4, 15);
4763     test("abcdefghijklmnopqrst", 1, 20, "abcde", 1, 5, 15);
4764     test("abcdefghijklmnopqrst", 1, 20, "abcde", 2, 0, 19);
4765     test("abcdefghijklmnopqrst", 1, 20, "abcde", 2, 1, -1);
4766     test("abcdefghijklmnopqrst", 1, 20, "abcde", 2, 2, -1);
4767     test("abcdefghijklmnopqrst", 1, 20, "abcde", 2, 3, -1);
4768     test("abcdefghijklmnopqrst", 1, 20, "abcde", 2, 4, -1);
4769     test("abcdefghijklmnopqrst", 1, 20, "abcde", 4, 0, 19);
4770     test("abcdefghijklmnopqrst", 1, 20, "abcde", 4, 1, -3);
4771     test("abcdefghijklmnopqrst", 1, 20, "abcde", 4, 2, -3);
4772     test("abcdefghijklmnopqrst", 1, 20, "abcde", 5, 0, 19);
4773     test("abcdefghijklmnopqrst", 1, 20, "abcde", 5, 1, 19);
4774     test("abcdefghijklmnopqrst", 1, 20, "abcde", 6, 0, 0);
4775     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 0, 0, 19);
4776     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 0, 1, 1);
4777     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 0, 5, 1);
4778     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 0, 9, 1);
4779     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 0, 10, 1);
4780     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 0, 11, 1);
4781     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 1, 0, 19);
4782     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 1, 1, 18);
4783     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 1, 4, 15);
4784     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 1, 8, 11);
4785     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 1, 9, 10);
4786     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 1, 10, 10);
4787     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 5, 0, 19);
4788     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 5, 1, -4);
4789     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 5, 2, -4);
4790     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 5, 4, -4);
4791     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 5, 5, -4);
4792     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 5, 6, -4);
4793     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 9, 0, 19);
4794     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 9, 1, -8);
4795     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 9, 2, -8);
4796     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 10, 0, 19);
4797     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 10, 1, 19);
4798     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 11, 0, 0);
4799     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 0, 0, 19);
4800     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 0, 1, 1);
4801     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 0, 10, 1);
4802     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 0, 19, 1);
4803     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 0, 20, 1);
4804     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 0, 21, 1);
4805     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 1, 0, 19);
4806     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 1, 1, 18);
4807     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 1, 9, 10);
4808     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 1, 18, 1);
4809     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 1, 19, 0);
4810     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 1, 20, 0);
4811     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 10, 0, 19);
4812     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 10, 1, -9);
4813     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 10, 5, -9);
4814     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 10, 9, -9);
4815     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 10, 10, -9);
4816     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 10, 11, -9);
4817     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 19, 0, 19);
4818     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 19, 1, -18);
4819     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 19, 2, -18);
4820     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 20, 0, 19);
4821     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 20, 1, 19);
4822     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 21, 0, 0);
4823     test("abcdefghijklmnopqrst", 10, 0, "", 0, 0, 0);
4824     test("abcdefghijklmnopqrst", 10, 0, "", 0, 1, 0);
4825     test("abcdefghijklmnopqrst", 10, 0, "", 1, 0, 0);
4826     test("abcdefghijklmnopqrst", 10, 0, "abcde", 0, 0, 0);
4827     test("abcdefghijklmnopqrst", 10, 0, "abcde", 0, 1, -1);
4828     test("abcdefghijklmnopqrst", 10, 0, "abcde", 0, 2, -2);
4829     test("abcdefghijklmnopqrst", 10, 0, "abcde", 0, 4, -4);
4830     test("abcdefghijklmnopqrst", 10, 0, "abcde", 0, 5, -5);
4831     test("abcdefghijklmnopqrst", 10, 0, "abcde", 0, 6, -5);
4832     test("abcdefghijklmnopqrst", 10, 0, "abcde", 1, 0, 0);
4833     test("abcdefghijklmnopqrst", 10, 0, "abcde", 1, 1, -1);
4834     test("abcdefghijklmnopqrst", 10, 0, "abcde", 1, 2, -2);
4835 }
4836 
test46()4837 void test46()
4838 {
4839     test("abcdefghijklmnopqrst", 10, 0, "abcde", 1, 3, -3);
4840     test("abcdefghijklmnopqrst", 10, 0, "abcde", 1, 4, -4);
4841     test("abcdefghijklmnopqrst", 10, 0, "abcde", 1, 5, -4);
4842     test("abcdefghijklmnopqrst", 10, 0, "abcde", 2, 0, 0);
4843     test("abcdefghijklmnopqrst", 10, 0, "abcde", 2, 1, -1);
4844     test("abcdefghijklmnopqrst", 10, 0, "abcde", 2, 2, -2);
4845     test("abcdefghijklmnopqrst", 10, 0, "abcde", 2, 3, -3);
4846     test("abcdefghijklmnopqrst", 10, 0, "abcde", 2, 4, -3);
4847     test("abcdefghijklmnopqrst", 10, 0, "abcde", 4, 0, 0);
4848     test("abcdefghijklmnopqrst", 10, 0, "abcde", 4, 1, -1);
4849     test("abcdefghijklmnopqrst", 10, 0, "abcde", 4, 2, -1);
4850     test("abcdefghijklmnopqrst", 10, 0, "abcde", 5, 0, 0);
4851     test("abcdefghijklmnopqrst", 10, 0, "abcde", 5, 1, 0);
4852     test("abcdefghijklmnopqrst", 10, 0, "abcde", 6, 0, 0);
4853     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 0, 0, 0);
4854     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 0, 1, -1);
4855     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 0, 5, -5);
4856     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 0, 9, -9);
4857     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 0, 10, -10);
4858     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 0, 11, -10);
4859     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 1, 0, 0);
4860     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 1, 1, -1);
4861     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 1, 4, -4);
4862     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 1, 8, -8);
4863     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 1, 9, -9);
4864     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 1, 10, -9);
4865     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 5, 0, 0);
4866     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 5, 1, -1);
4867     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 5, 2, -2);
4868     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 5, 4, -4);
4869     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 5, 5, -5);
4870     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 5, 6, -5);
4871     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 9, 0, 0);
4872     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 9, 1, -1);
4873     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 9, 2, -1);
4874     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 10, 0, 0);
4875     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 10, 1, 0);
4876     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 11, 0, 0);
4877     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 0, 0, 0);
4878     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 0, 1, -1);
4879     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 0, 10, -10);
4880     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 0, 19, -19);
4881     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 0, 20, -20);
4882     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 0, 21, -20);
4883     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 1, 0, 0);
4884     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 1, 1, -1);
4885     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 1, 9, -9);
4886     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 1, 18, -18);
4887     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 1, 19, -19);
4888     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 1, 20, -19);
4889     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 10, 0, 0);
4890     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 10, 1, -1);
4891     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 10, 5, -5);
4892     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 10, 9, -9);
4893     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 10, 10, -10);
4894     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 10, 11, -10);
4895     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 19, 0, 0);
4896     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 19, 1, -1);
4897     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 19, 2, -1);
4898     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 20, 0, 0);
4899     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 20, 1, 0);
4900     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 21, 0, 0);
4901     test("abcdefghijklmnopqrst", 10, 1, "", 0, 0, 1);
4902     test("abcdefghijklmnopqrst", 10, 1, "", 0, 1, 1);
4903     test("abcdefghijklmnopqrst", 10, 1, "", 1, 0, 0);
4904     test("abcdefghijklmnopqrst", 10, 1, "abcde", 0, 0, 1);
4905     test("abcdefghijklmnopqrst", 10, 1, "abcde", 0, 1, 10);
4906     test("abcdefghijklmnopqrst", 10, 1, "abcde", 0, 2, 10);
4907     test("abcdefghijklmnopqrst", 10, 1, "abcde", 0, 4, 10);
4908     test("abcdefghijklmnopqrst", 10, 1, "abcde", 0, 5, 10);
4909     test("abcdefghijklmnopqrst", 10, 1, "abcde", 0, 6, 10);
4910     test("abcdefghijklmnopqrst", 10, 1, "abcde", 1, 0, 1);
4911     test("abcdefghijklmnopqrst", 10, 1, "abcde", 1, 1, 9);
4912     test("abcdefghijklmnopqrst", 10, 1, "abcde", 1, 2, 9);
4913     test("abcdefghijklmnopqrst", 10, 1, "abcde", 1, 3, 9);
4914     test("abcdefghijklmnopqrst", 10, 1, "abcde", 1, 4, 9);
4915     test("abcdefghijklmnopqrst", 10, 1, "abcde", 1, 5, 9);
4916     test("abcdefghijklmnopqrst", 10, 1, "abcde", 2, 0, 1);
4917     test("abcdefghijklmnopqrst", 10, 1, "abcde", 2, 1, 8);
4918     test("abcdefghijklmnopqrst", 10, 1, "abcde", 2, 2, 8);
4919     test("abcdefghijklmnopqrst", 10, 1, "abcde", 2, 3, 8);
4920     test("abcdefghijklmnopqrst", 10, 1, "abcde", 2, 4, 8);
4921     test("abcdefghijklmnopqrst", 10, 1, "abcde", 4, 0, 1);
4922     test("abcdefghijklmnopqrst", 10, 1, "abcde", 4, 1, 6);
4923     test("abcdefghijklmnopqrst", 10, 1, "abcde", 4, 2, 6);
4924     test("abcdefghijklmnopqrst", 10, 1, "abcde", 5, 0, 1);
4925     test("abcdefghijklmnopqrst", 10, 1, "abcde", 5, 1, 1);
4926     test("abcdefghijklmnopqrst", 10, 1, "abcde", 6, 0, 0);
4927     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 0, 0, 1);
4928     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 0, 1, 10);
4929     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 0, 5, 10);
4930     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 0, 9, 10);
4931     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 0, 10, 10);
4932     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 0, 11, 10);
4933     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 1, 0, 1);
4934     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 1, 1, 9);
4935     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 1, 4, 9);
4936     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 1, 8, 9);
4937     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 1, 9, 9);
4938     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 1, 10, 9);
4939 }
4940 
test47()4941 void test47()
4942 {
4943     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 5, 0, 1);
4944     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 5, 1, 5);
4945     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 5, 2, 5);
4946     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 5, 4, 5);
4947     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 5, 5, 5);
4948     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 5, 6, 5);
4949     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 9, 0, 1);
4950     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 9, 1, 1);
4951     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 9, 2, 1);
4952     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 10, 0, 1);
4953     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 10, 1, 1);
4954     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 11, 0, 0);
4955     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 0, 0, 1);
4956     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 0, 1, 10);
4957     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 0, 10, 10);
4958     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 0, 19, 10);
4959     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 0, 20, 10);
4960     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 0, 21, 10);
4961     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 1, 0, 1);
4962     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 1, 1, 9);
4963     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 1, 9, 9);
4964     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 1, 18, 9);
4965     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 1, 19, 9);
4966     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 1, 20, 9);
4967     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 10, 0, 1);
4968     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 10, 1, 0);
4969     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 10, 5, -4);
4970     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 10, 9, -8);
4971     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 10, 10, -9);
4972     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 10, 11, -9);
4973     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 19, 0, 1);
4974     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 19, 1, -9);
4975     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 19, 2, -9);
4976     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 20, 0, 1);
4977     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 20, 1, 1);
4978     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 21, 0, 0);
4979     test("abcdefghijklmnopqrst", 10, 5, "", 0, 0, 5);
4980     test("abcdefghijklmnopqrst", 10, 5, "", 0, 1, 5);
4981     test("abcdefghijklmnopqrst", 10, 5, "", 1, 0, 0);
4982     test("abcdefghijklmnopqrst", 10, 5, "abcde", 0, 0, 5);
4983     test("abcdefghijklmnopqrst", 10, 5, "abcde", 0, 1, 10);
4984     test("abcdefghijklmnopqrst", 10, 5, "abcde", 0, 2, 10);
4985     test("abcdefghijklmnopqrst", 10, 5, "abcde", 0, 4, 10);
4986     test("abcdefghijklmnopqrst", 10, 5, "abcde", 0, 5, 10);
4987     test("abcdefghijklmnopqrst", 10, 5, "abcde", 0, 6, 10);
4988     test("abcdefghijklmnopqrst", 10, 5, "abcde", 1, 0, 5);
4989     test("abcdefghijklmnopqrst", 10, 5, "abcde", 1, 1, 9);
4990     test("abcdefghijklmnopqrst", 10, 5, "abcde", 1, 2, 9);
4991     test("abcdefghijklmnopqrst", 10, 5, "abcde", 1, 3, 9);
4992     test("abcdefghijklmnopqrst", 10, 5, "abcde", 1, 4, 9);
4993     test("abcdefghijklmnopqrst", 10, 5, "abcde", 1, 5, 9);
4994     test("abcdefghijklmnopqrst", 10, 5, "abcde", 2, 0, 5);
4995     test("abcdefghijklmnopqrst", 10, 5, "abcde", 2, 1, 8);
4996     test("abcdefghijklmnopqrst", 10, 5, "abcde", 2, 2, 8);
4997     test("abcdefghijklmnopqrst", 10, 5, "abcde", 2, 3, 8);
4998     test("abcdefghijklmnopqrst", 10, 5, "abcde", 2, 4, 8);
4999     test("abcdefghijklmnopqrst", 10, 5, "abcde", 4, 0, 5);
5000     test("abcdefghijklmnopqrst", 10, 5, "abcde", 4, 1, 6);
5001     test("abcdefghijklmnopqrst", 10, 5, "abcde", 4, 2, 6);
5002     test("abcdefghijklmnopqrst", 10, 5, "abcde", 5, 0, 5);
5003     test("abcdefghijklmnopqrst", 10, 5, "abcde", 5, 1, 5);
5004     test("abcdefghijklmnopqrst", 10, 5, "abcde", 6, 0, 0);
5005     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 0, 0, 5);
5006     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 0, 1, 10);
5007     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 0, 5, 10);
5008     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 0, 9, 10);
5009     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 0, 10, 10);
5010     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 0, 11, 10);
5011     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 1, 0, 5);
5012     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 1, 1, 9);
5013     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 1, 4, 9);
5014     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 1, 8, 9);
5015     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 1, 9, 9);
5016     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 1, 10, 9);
5017     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 5, 0, 5);
5018     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 5, 1, 5);
5019     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 5, 2, 5);
5020     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 5, 4, 5);
5021     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 5, 5, 5);
5022     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 5, 6, 5);
5023     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 9, 0, 5);
5024     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 9, 1, 1);
5025     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 9, 2, 1);
5026     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 10, 0, 5);
5027     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 10, 1, 5);
5028     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 11, 0, 0);
5029     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 0, 0, 5);
5030     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 0, 1, 10);
5031     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 0, 10, 10);
5032     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 0, 19, 10);
5033     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 0, 20, 10);
5034     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 0, 21, 10);
5035     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 1, 0, 5);
5036     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 1, 1, 9);
5037     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 1, 9, 9);
5038     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 1, 18, 9);
5039     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 1, 19, 9);
5040     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 1, 20, 9);
5041     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 10, 0, 5);
5042     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 10, 1, 4);
5043 }
5044 
test48()5045 void test48()
5046 {
5047     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 10, 5, 0);
5048     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 10, 9, -4);
5049     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 10, 10, -5);
5050     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 10, 11, -5);
5051     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 19, 0, 5);
5052     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 19, 1, -9);
5053     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 19, 2, -9);
5054     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 20, 0, 5);
5055     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 20, 1, 5);
5056     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 21, 0, 0);
5057     test("abcdefghijklmnopqrst", 10, 9, "", 0, 0, 9);
5058     test("abcdefghijklmnopqrst", 10, 9, "", 0, 1, 9);
5059     test("abcdefghijklmnopqrst", 10, 9, "", 1, 0, 0);
5060     test("abcdefghijklmnopqrst", 10, 9, "abcde", 0, 0, 9);
5061     test("abcdefghijklmnopqrst", 10, 9, "abcde", 0, 1, 10);
5062     test("abcdefghijklmnopqrst", 10, 9, "abcde", 0, 2, 10);
5063     test("abcdefghijklmnopqrst", 10, 9, "abcde", 0, 4, 10);
5064     test("abcdefghijklmnopqrst", 10, 9, "abcde", 0, 5, 10);
5065     test("abcdefghijklmnopqrst", 10, 9, "abcde", 0, 6, 10);
5066     test("abcdefghijklmnopqrst", 10, 9, "abcde", 1, 0, 9);
5067     test("abcdefghijklmnopqrst", 10, 9, "abcde", 1, 1, 9);
5068     test("abcdefghijklmnopqrst", 10, 9, "abcde", 1, 2, 9);
5069     test("abcdefghijklmnopqrst", 10, 9, "abcde", 1, 3, 9);
5070     test("abcdefghijklmnopqrst", 10, 9, "abcde", 1, 4, 9);
5071     test("abcdefghijklmnopqrst", 10, 9, "abcde", 1, 5, 9);
5072     test("abcdefghijklmnopqrst", 10, 9, "abcde", 2, 0, 9);
5073     test("abcdefghijklmnopqrst", 10, 9, "abcde", 2, 1, 8);
5074     test("abcdefghijklmnopqrst", 10, 9, "abcde", 2, 2, 8);
5075     test("abcdefghijklmnopqrst", 10, 9, "abcde", 2, 3, 8);
5076     test("abcdefghijklmnopqrst", 10, 9, "abcde", 2, 4, 8);
5077     test("abcdefghijklmnopqrst", 10, 9, "abcde", 4, 0, 9);
5078     test("abcdefghijklmnopqrst", 10, 9, "abcde", 4, 1, 6);
5079     test("abcdefghijklmnopqrst", 10, 9, "abcde", 4, 2, 6);
5080     test("abcdefghijklmnopqrst", 10, 9, "abcde", 5, 0, 9);
5081     test("abcdefghijklmnopqrst", 10, 9, "abcde", 5, 1, 9);
5082     test("abcdefghijklmnopqrst", 10, 9, "abcde", 6, 0, 0);
5083     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 0, 0, 9);
5084     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 0, 1, 10);
5085     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 0, 5, 10);
5086     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 0, 9, 10);
5087     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 0, 10, 10);
5088     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 0, 11, 10);
5089     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 1, 0, 9);
5090     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 1, 1, 9);
5091     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 1, 4, 9);
5092     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 1, 8, 9);
5093     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 1, 9, 9);
5094     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 1, 10, 9);
5095     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 5, 0, 9);
5096     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 5, 1, 5);
5097     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 5, 2, 5);
5098     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 5, 4, 5);
5099     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 5, 5, 5);
5100     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 5, 6, 5);
5101     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 9, 0, 9);
5102     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 9, 1, 1);
5103     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 9, 2, 1);
5104     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 10, 0, 9);
5105     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 10, 1, 9);
5106     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 11, 0, 0);
5107     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 0, 0, 9);
5108     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 0, 1, 10);
5109     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 0, 10, 10);
5110     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 0, 19, 10);
5111     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 0, 20, 10);
5112     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 0, 21, 10);
5113     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 1, 0, 9);
5114     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 1, 1, 9);
5115     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 1, 9, 9);
5116     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 1, 18, 9);
5117     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 1, 19, 9);
5118     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 1, 20, 9);
5119     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 10, 0, 9);
5120     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 10, 1, 8);
5121     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 10, 5, 4);
5122     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 10, 9, 0);
5123     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 10, 10, -1);
5124     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 10, 11, -1);
5125     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 19, 0, 9);
5126     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 19, 1, -9);
5127     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 19, 2, -9);
5128     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 20, 0, 9);
5129     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 20, 1, 9);
5130     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 21, 0, 0);
5131     test("abcdefghijklmnopqrst", 10, 10, "", 0, 0, 10);
5132     test("abcdefghijklmnopqrst", 10, 10, "", 0, 1, 10);
5133     test("abcdefghijklmnopqrst", 10, 10, "", 1, 0, 0);
5134     test("abcdefghijklmnopqrst", 10, 10, "abcde", 0, 0, 10);
5135     test("abcdefghijklmnopqrst", 10, 10, "abcde", 0, 1, 10);
5136     test("abcdefghijklmnopqrst", 10, 10, "abcde", 0, 2, 10);
5137     test("abcdefghijklmnopqrst", 10, 10, "abcde", 0, 4, 10);
5138     test("abcdefghijklmnopqrst", 10, 10, "abcde", 0, 5, 10);
5139     test("abcdefghijklmnopqrst", 10, 10, "abcde", 0, 6, 10);
5140     test("abcdefghijklmnopqrst", 10, 10, "abcde", 1, 0, 10);
5141     test("abcdefghijklmnopqrst", 10, 10, "abcde", 1, 1, 9);
5142     test("abcdefghijklmnopqrst", 10, 10, "abcde", 1, 2, 9);
5143     test("abcdefghijklmnopqrst", 10, 10, "abcde", 1, 3, 9);
5144     test("abcdefghijklmnopqrst", 10, 10, "abcde", 1, 4, 9);
5145     test("abcdefghijklmnopqrst", 10, 10, "abcde", 1, 5, 9);
5146     test("abcdefghijklmnopqrst", 10, 10, "abcde", 2, 0, 10);
5147 }
5148 
test49()5149 void test49()
5150 {
5151     test("abcdefghijklmnopqrst", 10, 10, "abcde", 2, 1, 8);
5152     test("abcdefghijklmnopqrst", 10, 10, "abcde", 2, 2, 8);
5153     test("abcdefghijklmnopqrst", 10, 10, "abcde", 2, 3, 8);
5154     test("abcdefghijklmnopqrst", 10, 10, "abcde", 2, 4, 8);
5155     test("abcdefghijklmnopqrst", 10, 10, "abcde", 4, 0, 10);
5156     test("abcdefghijklmnopqrst", 10, 10, "abcde", 4, 1, 6);
5157     test("abcdefghijklmnopqrst", 10, 10, "abcde", 4, 2, 6);
5158     test("abcdefghijklmnopqrst", 10, 10, "abcde", 5, 0, 10);
5159     test("abcdefghijklmnopqrst", 10, 10, "abcde", 5, 1, 10);
5160     test("abcdefghijklmnopqrst", 10, 10, "abcde", 6, 0, 0);
5161     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 0, 0, 10);
5162     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 0, 1, 10);
5163     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 0, 5, 10);
5164     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 0, 9, 10);
5165     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 0, 10, 10);
5166     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 0, 11, 10);
5167     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 1, 0, 10);
5168     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 1, 1, 9);
5169     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 1, 4, 9);
5170     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 1, 8, 9);
5171     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 1, 9, 9);
5172     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 1, 10, 9);
5173     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 5, 0, 10);
5174     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 5, 1, 5);
5175     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 5, 2, 5);
5176     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 5, 4, 5);
5177     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 5, 5, 5);
5178     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 5, 6, 5);
5179     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 9, 0, 10);
5180     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 9, 1, 1);
5181     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 9, 2, 1);
5182     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 10, 0, 10);
5183     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 10, 1, 10);
5184     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 11, 0, 0);
5185     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 0, 0, 10);
5186     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 0, 1, 10);
5187     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 0, 10, 10);
5188     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 0, 19, 10);
5189     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 0, 20, 10);
5190     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 0, 21, 10);
5191     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 1, 0, 10);
5192     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 1, 1, 9);
5193     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 1, 9, 9);
5194     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 1, 18, 9);
5195     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 1, 19, 9);
5196     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 1, 20, 9);
5197     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 10, 0, 10);
5198     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 10, 1, 9);
5199     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 10, 5, 5);
5200     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 10, 9, 1);
5201     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 10, 10, 0);
5202     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 10, 11, 0);
5203     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 19, 0, 10);
5204     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 19, 1, -9);
5205     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 19, 2, -9);
5206     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 20, 0, 10);
5207     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 20, 1, 10);
5208     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 21, 0, 0);
5209     test("abcdefghijklmnopqrst", 10, 11, "", 0, 0, 10);
5210     test("abcdefghijklmnopqrst", 10, 11, "", 0, 1, 10);
5211     test("abcdefghijklmnopqrst", 10, 11, "", 1, 0, 0);
5212     test("abcdefghijklmnopqrst", 10, 11, "abcde", 0, 0, 10);
5213     test("abcdefghijklmnopqrst", 10, 11, "abcde", 0, 1, 10);
5214     test("abcdefghijklmnopqrst", 10, 11, "abcde", 0, 2, 10);
5215     test("abcdefghijklmnopqrst", 10, 11, "abcde", 0, 4, 10);
5216     test("abcdefghijklmnopqrst", 10, 11, "abcde", 0, 5, 10);
5217     test("abcdefghijklmnopqrst", 10, 11, "abcde", 0, 6, 10);
5218     test("abcdefghijklmnopqrst", 10, 11, "abcde", 1, 0, 10);
5219     test("abcdefghijklmnopqrst", 10, 11, "abcde", 1, 1, 9);
5220     test("abcdefghijklmnopqrst", 10, 11, "abcde", 1, 2, 9);
5221     test("abcdefghijklmnopqrst", 10, 11, "abcde", 1, 3, 9);
5222     test("abcdefghijklmnopqrst", 10, 11, "abcde", 1, 4, 9);
5223     test("abcdefghijklmnopqrst", 10, 11, "abcde", 1, 5, 9);
5224     test("abcdefghijklmnopqrst", 10, 11, "abcde", 2, 0, 10);
5225     test("abcdefghijklmnopqrst", 10, 11, "abcde", 2, 1, 8);
5226     test("abcdefghijklmnopqrst", 10, 11, "abcde", 2, 2, 8);
5227     test("abcdefghijklmnopqrst", 10, 11, "abcde", 2, 3, 8);
5228     test("abcdefghijklmnopqrst", 10, 11, "abcde", 2, 4, 8);
5229     test("abcdefghijklmnopqrst", 10, 11, "abcde", 4, 0, 10);
5230     test("abcdefghijklmnopqrst", 10, 11, "abcde", 4, 1, 6);
5231     test("abcdefghijklmnopqrst", 10, 11, "abcde", 4, 2, 6);
5232     test("abcdefghijklmnopqrst", 10, 11, "abcde", 5, 0, 10);
5233     test("abcdefghijklmnopqrst", 10, 11, "abcde", 5, 1, 10);
5234     test("abcdefghijklmnopqrst", 10, 11, "abcde", 6, 0, 0);
5235     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 0, 0, 10);
5236     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 0, 1, 10);
5237     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 0, 5, 10);
5238     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 0, 9, 10);
5239     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 0, 10, 10);
5240     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 0, 11, 10);
5241     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 1, 0, 10);
5242     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 1, 1, 9);
5243     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 1, 4, 9);
5244     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 1, 8, 9);
5245     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 1, 9, 9);
5246     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 1, 10, 9);
5247     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 5, 0, 10);
5248     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 5, 1, 5);
5249     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 5, 2, 5);
5250     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 5, 4, 5);
5251 }
5252 
test50()5253 void test50()
5254 {
5255     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 5, 5, 5);
5256     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 5, 6, 5);
5257     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 9, 0, 10);
5258     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 9, 1, 1);
5259     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 9, 2, 1);
5260     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 10, 0, 10);
5261     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 10, 1, 10);
5262     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 11, 0, 0);
5263     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 0, 0, 10);
5264     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 0, 1, 10);
5265     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 0, 10, 10);
5266     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 0, 19, 10);
5267     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 0, 20, 10);
5268     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 0, 21, 10);
5269     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 1, 0, 10);
5270     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 1, 1, 9);
5271     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 1, 9, 9);
5272     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 1, 18, 9);
5273     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 1, 19, 9);
5274     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 1, 20, 9);
5275     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 10, 0, 10);
5276     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 10, 1, 9);
5277     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 10, 5, 5);
5278     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 10, 9, 1);
5279     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 10, 10, 0);
5280     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 10, 11, 0);
5281     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 19, 0, 10);
5282     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 19, 1, -9);
5283     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 19, 2, -9);
5284     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 20, 0, 10);
5285     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 20, 1, 10);
5286     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 21, 0, 0);
5287     test("abcdefghijklmnopqrst", 19, 0, "", 0, 0, 0);
5288     test("abcdefghijklmnopqrst", 19, 0, "", 0, 1, 0);
5289     test("abcdefghijklmnopqrst", 19, 0, "", 1, 0, 0);
5290     test("abcdefghijklmnopqrst", 19, 0, "abcde", 0, 0, 0);
5291     test("abcdefghijklmnopqrst", 19, 0, "abcde", 0, 1, -1);
5292     test("abcdefghijklmnopqrst", 19, 0, "abcde", 0, 2, -2);
5293     test("abcdefghijklmnopqrst", 19, 0, "abcde", 0, 4, -4);
5294     test("abcdefghijklmnopqrst", 19, 0, "abcde", 0, 5, -5);
5295     test("abcdefghijklmnopqrst", 19, 0, "abcde", 0, 6, -5);
5296     test("abcdefghijklmnopqrst", 19, 0, "abcde", 1, 0, 0);
5297     test("abcdefghijklmnopqrst", 19, 0, "abcde", 1, 1, -1);
5298     test("abcdefghijklmnopqrst", 19, 0, "abcde", 1, 2, -2);
5299     test("abcdefghijklmnopqrst", 19, 0, "abcde", 1, 3, -3);
5300     test("abcdefghijklmnopqrst", 19, 0, "abcde", 1, 4, -4);
5301     test("abcdefghijklmnopqrst", 19, 0, "abcde", 1, 5, -4);
5302     test("abcdefghijklmnopqrst", 19, 0, "abcde", 2, 0, 0);
5303     test("abcdefghijklmnopqrst", 19, 0, "abcde", 2, 1, -1);
5304     test("abcdefghijklmnopqrst", 19, 0, "abcde", 2, 2, -2);
5305     test("abcdefghijklmnopqrst", 19, 0, "abcde", 2, 3, -3);
5306     test("abcdefghijklmnopqrst", 19, 0, "abcde", 2, 4, -3);
5307     test("abcdefghijklmnopqrst", 19, 0, "abcde", 4, 0, 0);
5308     test("abcdefghijklmnopqrst", 19, 0, "abcde", 4, 1, -1);
5309     test("abcdefghijklmnopqrst", 19, 0, "abcde", 4, 2, -1);
5310     test("abcdefghijklmnopqrst", 19, 0, "abcde", 5, 0, 0);
5311     test("abcdefghijklmnopqrst", 19, 0, "abcde", 5, 1, 0);
5312     test("abcdefghijklmnopqrst", 19, 0, "abcde", 6, 0, 0);
5313     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 0, 0, 0);
5314     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 0, 1, -1);
5315     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 0, 5, -5);
5316     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 0, 9, -9);
5317     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 0, 10, -10);
5318     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 0, 11, -10);
5319     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 1, 0, 0);
5320     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 1, 1, -1);
5321     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 1, 4, -4);
5322     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 1, 8, -8);
5323     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 1, 9, -9);
5324     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 1, 10, -9);
5325     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 5, 0, 0);
5326     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 5, 1, -1);
5327     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 5, 2, -2);
5328     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 5, 4, -4);
5329     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 5, 5, -5);
5330     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 5, 6, -5);
5331     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 9, 0, 0);
5332     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 9, 1, -1);
5333     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 9, 2, -1);
5334     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 10, 0, 0);
5335     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 10, 1, 0);
5336     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 11, 0, 0);
5337     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 0, 0, 0);
5338     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 0, 1, -1);
5339     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 0, 10, -10);
5340     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 0, 19, -19);
5341     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 0, 20, -20);
5342     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 0, 21, -20);
5343     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 1, 0, 0);
5344     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 1, 1, -1);
5345     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 1, 9, -9);
5346     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 1, 18, -18);
5347     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 1, 19, -19);
5348     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 1, 20, -19);
5349     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 10, 0, 0);
5350     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 10, 1, -1);
5351     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 10, 5, -5);
5352     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 10, 9, -9);
5353     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 10, 10, -10);
5354     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 10, 11, -10);
5355 }
5356 
test51()5357 void test51()
5358 {
5359     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 19, 0, 0);
5360     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 19, 1, -1);
5361     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 19, 2, -1);
5362     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 20, 0, 0);
5363     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 20, 1, 0);
5364     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 21, 0, 0);
5365     test("abcdefghijklmnopqrst", 19, 1, "", 0, 0, 1);
5366     test("abcdefghijklmnopqrst", 19, 1, "", 0, 1, 1);
5367     test("abcdefghijklmnopqrst", 19, 1, "", 1, 0, 0);
5368     test("abcdefghijklmnopqrst", 19, 1, "abcde", 0, 0, 1);
5369     test("abcdefghijklmnopqrst", 19, 1, "abcde", 0, 1, 19);
5370     test("abcdefghijklmnopqrst", 19, 1, "abcde", 0, 2, 19);
5371     test("abcdefghijklmnopqrst", 19, 1, "abcde", 0, 4, 19);
5372     test("abcdefghijklmnopqrst", 19, 1, "abcde", 0, 5, 19);
5373     test("abcdefghijklmnopqrst", 19, 1, "abcde", 0, 6, 19);
5374     test("abcdefghijklmnopqrst", 19, 1, "abcde", 1, 0, 1);
5375     test("abcdefghijklmnopqrst", 19, 1, "abcde", 1, 1, 18);
5376     test("abcdefghijklmnopqrst", 19, 1, "abcde", 1, 2, 18);
5377     test("abcdefghijklmnopqrst", 19, 1, "abcde", 1, 3, 18);
5378     test("abcdefghijklmnopqrst", 19, 1, "abcde", 1, 4, 18);
5379     test("abcdefghijklmnopqrst", 19, 1, "abcde", 1, 5, 18);
5380     test("abcdefghijklmnopqrst", 19, 1, "abcde", 2, 0, 1);
5381     test("abcdefghijklmnopqrst", 19, 1, "abcde", 2, 1, 17);
5382     test("abcdefghijklmnopqrst", 19, 1, "abcde", 2, 2, 17);
5383     test("abcdefghijklmnopqrst", 19, 1, "abcde", 2, 3, 17);
5384     test("abcdefghijklmnopqrst", 19, 1, "abcde", 2, 4, 17);
5385     test("abcdefghijklmnopqrst", 19, 1, "abcde", 4, 0, 1);
5386     test("abcdefghijklmnopqrst", 19, 1, "abcde", 4, 1, 15);
5387     test("abcdefghijklmnopqrst", 19, 1, "abcde", 4, 2, 15);
5388     test("abcdefghijklmnopqrst", 19, 1, "abcde", 5, 0, 1);
5389     test("abcdefghijklmnopqrst", 19, 1, "abcde", 5, 1, 1);
5390     test("abcdefghijklmnopqrst", 19, 1, "abcde", 6, 0, 0);
5391     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 0, 0, 1);
5392     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 0, 1, 19);
5393     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 0, 5, 19);
5394     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 0, 9, 19);
5395     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 0, 10, 19);
5396     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 0, 11, 19);
5397     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 1, 0, 1);
5398     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 1, 1, 18);
5399     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 1, 4, 18);
5400     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 1, 8, 18);
5401     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 1, 9, 18);
5402     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 1, 10, 18);
5403     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 5, 0, 1);
5404     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 5, 1, 14);
5405     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 5, 2, 14);
5406     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 5, 4, 14);
5407     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 5, 5, 14);
5408     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 5, 6, 14);
5409     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 9, 0, 1);
5410     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 9, 1, 10);
5411     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 9, 2, 10);
5412     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 10, 0, 1);
5413     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 10, 1, 1);
5414     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 11, 0, 0);
5415     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 0, 0, 1);
5416     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 0, 1, 19);
5417     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 0, 10, 19);
5418     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 0, 19, 19);
5419     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 0, 20, 19);
5420     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 0, 21, 19);
5421     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 1, 0, 1);
5422     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 1, 1, 18);
5423     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 1, 9, 18);
5424     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 1, 18, 18);
5425     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 1, 19, 18);
5426     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 1, 20, 18);
5427     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 10, 0, 1);
5428     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 10, 1, 9);
5429     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 10, 5, 9);
5430     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 10, 9, 9);
5431     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 10, 10, 9);
5432     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 10, 11, 9);
5433     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 19, 0, 1);
5434     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 19, 1, 0);
5435     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 19, 2, 0);
5436     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 20, 0, 1);
5437     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 20, 1, 1);
5438     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 21, 0, 0);
5439     test("abcdefghijklmnopqrst", 19, 2, "", 0, 0, 1);
5440     test("abcdefghijklmnopqrst", 19, 2, "", 0, 1, 1);
5441     test("abcdefghijklmnopqrst", 19, 2, "", 1, 0, 0);
5442     test("abcdefghijklmnopqrst", 19, 2, "abcde", 0, 0, 1);
5443     test("abcdefghijklmnopqrst", 19, 2, "abcde", 0, 1, 19);
5444     test("abcdefghijklmnopqrst", 19, 2, "abcde", 0, 2, 19);
5445     test("abcdefghijklmnopqrst", 19, 2, "abcde", 0, 4, 19);
5446     test("abcdefghijklmnopqrst", 19, 2, "abcde", 0, 5, 19);
5447     test("abcdefghijklmnopqrst", 19, 2, "abcde", 0, 6, 19);
5448     test("abcdefghijklmnopqrst", 19, 2, "abcde", 1, 0, 1);
5449     test("abcdefghijklmnopqrst", 19, 2, "abcde", 1, 1, 18);
5450     test("abcdefghijklmnopqrst", 19, 2, "abcde", 1, 2, 18);
5451     test("abcdefghijklmnopqrst", 19, 2, "abcde", 1, 3, 18);
5452     test("abcdefghijklmnopqrst", 19, 2, "abcde", 1, 4, 18);
5453     test("abcdefghijklmnopqrst", 19, 2, "abcde", 1, 5, 18);
5454     test("abcdefghijklmnopqrst", 19, 2, "abcde", 2, 0, 1);
5455     test("abcdefghijklmnopqrst", 19, 2, "abcde", 2, 1, 17);
5456     test("abcdefghijklmnopqrst", 19, 2, "abcde", 2, 2, 17);
5457     test("abcdefghijklmnopqrst", 19, 2, "abcde", 2, 3, 17);
5458     test("abcdefghijklmnopqrst", 19, 2, "abcde", 2, 4, 17);
5459 }
5460 
test52()5461 void test52()
5462 {
5463     test("abcdefghijklmnopqrst", 19, 2, "abcde", 4, 0, 1);
5464     test("abcdefghijklmnopqrst", 19, 2, "abcde", 4, 1, 15);
5465     test("abcdefghijklmnopqrst", 19, 2, "abcde", 4, 2, 15);
5466     test("abcdefghijklmnopqrst", 19, 2, "abcde", 5, 0, 1);
5467     test("abcdefghijklmnopqrst", 19, 2, "abcde", 5, 1, 1);
5468     test("abcdefghijklmnopqrst", 19, 2, "abcde", 6, 0, 0);
5469     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 0, 0, 1);
5470     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 0, 1, 19);
5471     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 0, 5, 19);
5472     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 0, 9, 19);
5473     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 0, 10, 19);
5474     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 0, 11, 19);
5475     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 1, 0, 1);
5476     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 1, 1, 18);
5477     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 1, 4, 18);
5478     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 1, 8, 18);
5479     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 1, 9, 18);
5480     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 1, 10, 18);
5481     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 5, 0, 1);
5482     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 5, 1, 14);
5483     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 5, 2, 14);
5484     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 5, 4, 14);
5485     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 5, 5, 14);
5486     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 5, 6, 14);
5487     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 9, 0, 1);
5488     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 9, 1, 10);
5489     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 9, 2, 10);
5490     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 10, 0, 1);
5491     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 10, 1, 1);
5492     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 11, 0, 0);
5493     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 0, 0, 1);
5494     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 0, 1, 19);
5495     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 0, 10, 19);
5496     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 0, 19, 19);
5497     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 0, 20, 19);
5498     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 0, 21, 19);
5499     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 1, 0, 1);
5500     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 1, 1, 18);
5501     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 1, 9, 18);
5502     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 1, 18, 18);
5503     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 1, 19, 18);
5504     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 1, 20, 18);
5505     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 10, 0, 1);
5506     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 10, 1, 9);
5507     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 10, 5, 9);
5508     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 10, 9, 9);
5509     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 10, 10, 9);
5510     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 10, 11, 9);
5511     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 19, 0, 1);
5512     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 19, 1, 0);
5513     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 19, 2, 0);
5514     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 20, 0, 1);
5515     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 20, 1, 1);
5516     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 21, 0, 0);
5517     test("abcdefghijklmnopqrst", 20, 0, "", 0, 0, 0);
5518     test("abcdefghijklmnopqrst", 20, 0, "", 0, 1, 0);
5519     test("abcdefghijklmnopqrst", 20, 0, "", 1, 0, 0);
5520     test("abcdefghijklmnopqrst", 20, 0, "abcde", 0, 0, 0);
5521     test("abcdefghijklmnopqrst", 20, 0, "abcde", 0, 1, -1);
5522     test("abcdefghijklmnopqrst", 20, 0, "abcde", 0, 2, -2);
5523     test("abcdefghijklmnopqrst", 20, 0, "abcde", 0, 4, -4);
5524     test("abcdefghijklmnopqrst", 20, 0, "abcde", 0, 5, -5);
5525     test("abcdefghijklmnopqrst", 20, 0, "abcde", 0, 6, -5);
5526     test("abcdefghijklmnopqrst", 20, 0, "abcde", 1, 0, 0);
5527     test("abcdefghijklmnopqrst", 20, 0, "abcde", 1, 1, -1);
5528     test("abcdefghijklmnopqrst", 20, 0, "abcde", 1, 2, -2);
5529     test("abcdefghijklmnopqrst", 20, 0, "abcde", 1, 3, -3);
5530     test("abcdefghijklmnopqrst", 20, 0, "abcde", 1, 4, -4);
5531     test("abcdefghijklmnopqrst", 20, 0, "abcde", 1, 5, -4);
5532     test("abcdefghijklmnopqrst", 20, 0, "abcde", 2, 0, 0);
5533     test("abcdefghijklmnopqrst", 20, 0, "abcde", 2, 1, -1);
5534     test("abcdefghijklmnopqrst", 20, 0, "abcde", 2, 2, -2);
5535     test("abcdefghijklmnopqrst", 20, 0, "abcde", 2, 3, -3);
5536     test("abcdefghijklmnopqrst", 20, 0, "abcde", 2, 4, -3);
5537     test("abcdefghijklmnopqrst", 20, 0, "abcde", 4, 0, 0);
5538     test("abcdefghijklmnopqrst", 20, 0, "abcde", 4, 1, -1);
5539     test("abcdefghijklmnopqrst", 20, 0, "abcde", 4, 2, -1);
5540     test("abcdefghijklmnopqrst", 20, 0, "abcde", 5, 0, 0);
5541     test("abcdefghijklmnopqrst", 20, 0, "abcde", 5, 1, 0);
5542     test("abcdefghijklmnopqrst", 20, 0, "abcde", 6, 0, 0);
5543     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 0, 0, 0);
5544     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 0, 1, -1);
5545     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 0, 5, -5);
5546     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 0, 9, -9);
5547     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 0, 10, -10);
5548     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 0, 11, -10);
5549     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 1, 0, 0);
5550     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 1, 1, -1);
5551     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 1, 4, -4);
5552     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 1, 8, -8);
5553     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 1, 9, -9);
5554     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 1, 10, -9);
5555     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 5, 0, 0);
5556     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 5, 1, -1);
5557     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 5, 2, -2);
5558     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 5, 4, -4);
5559     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 5, 5, -5);
5560     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 5, 6, -5);
5561     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 9, 0, 0);
5562     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 9, 1, -1);
5563 }
5564 
test53()5565 void test53()
5566 {
5567     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 9, 2, -1);
5568     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 10, 0, 0);
5569     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 10, 1, 0);
5570     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 11, 0, 0);
5571     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 0, 0, 0);
5572     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 0, 1, -1);
5573     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 0, 10, -10);
5574     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 0, 19, -19);
5575     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 0, 20, -20);
5576     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 0, 21, -20);
5577     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 1, 0, 0);
5578     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 1, 1, -1);
5579     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 1, 9, -9);
5580     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 1, 18, -18);
5581     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 1, 19, -19);
5582     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 1, 20, -19);
5583     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 10, 0, 0);
5584     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 10, 1, -1);
5585     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 10, 5, -5);
5586     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 10, 9, -9);
5587     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 10, 10, -10);
5588     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 10, 11, -10);
5589     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 19, 0, 0);
5590     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 19, 1, -1);
5591     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 19, 2, -1);
5592     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 20, 0, 0);
5593     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 20, 1, 0);
5594     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 21, 0, 0);
5595     test("abcdefghijklmnopqrst", 20, 1, "", 0, 0, 0);
5596     test("abcdefghijklmnopqrst", 20, 1, "", 0, 1, 0);
5597     test("abcdefghijklmnopqrst", 20, 1, "", 1, 0, 0);
5598     test("abcdefghijklmnopqrst", 20, 1, "abcde", 0, 0, 0);
5599     test("abcdefghijklmnopqrst", 20, 1, "abcde", 0, 1, -1);
5600     test("abcdefghijklmnopqrst", 20, 1, "abcde", 0, 2, -2);
5601     test("abcdefghijklmnopqrst", 20, 1, "abcde", 0, 4, -4);
5602     test("abcdefghijklmnopqrst", 20, 1, "abcde", 0, 5, -5);
5603     test("abcdefghijklmnopqrst", 20, 1, "abcde", 0, 6, -5);
5604     test("abcdefghijklmnopqrst", 20, 1, "abcde", 1, 0, 0);
5605     test("abcdefghijklmnopqrst", 20, 1, "abcde", 1, 1, -1);
5606     test("abcdefghijklmnopqrst", 20, 1, "abcde", 1, 2, -2);
5607     test("abcdefghijklmnopqrst", 20, 1, "abcde", 1, 3, -3);
5608     test("abcdefghijklmnopqrst", 20, 1, "abcde", 1, 4, -4);
5609     test("abcdefghijklmnopqrst", 20, 1, "abcde", 1, 5, -4);
5610     test("abcdefghijklmnopqrst", 20, 1, "abcde", 2, 0, 0);
5611     test("abcdefghijklmnopqrst", 20, 1, "abcde", 2, 1, -1);
5612     test("abcdefghijklmnopqrst", 20, 1, "abcde", 2, 2, -2);
5613     test("abcdefghijklmnopqrst", 20, 1, "abcde", 2, 3, -3);
5614     test("abcdefghijklmnopqrst", 20, 1, "abcde", 2, 4, -3);
5615     test("abcdefghijklmnopqrst", 20, 1, "abcde", 4, 0, 0);
5616     test("abcdefghijklmnopqrst", 20, 1, "abcde", 4, 1, -1);
5617     test("abcdefghijklmnopqrst", 20, 1, "abcde", 4, 2, -1);
5618     test("abcdefghijklmnopqrst", 20, 1, "abcde", 5, 0, 0);
5619     test("abcdefghijklmnopqrst", 20, 1, "abcde", 5, 1, 0);
5620     test("abcdefghijklmnopqrst", 20, 1, "abcde", 6, 0, 0);
5621     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 0, 0, 0);
5622     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 0, 1, -1);
5623     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 0, 5, -5);
5624     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 0, 9, -9);
5625     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 0, 10, -10);
5626     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 0, 11, -10);
5627     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 1, 0, 0);
5628     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 1, 1, -1);
5629     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 1, 4, -4);
5630     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 1, 8, -8);
5631     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 1, 9, -9);
5632     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 1, 10, -9);
5633     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 5, 0, 0);
5634     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 5, 1, -1);
5635     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 5, 2, -2);
5636     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 5, 4, -4);
5637     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 5, 5, -5);
5638     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 5, 6, -5);
5639     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 9, 0, 0);
5640     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 9, 1, -1);
5641     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 9, 2, -1);
5642     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 10, 0, 0);
5643     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 10, 1, 0);
5644     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 11, 0, 0);
5645     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 0, 0, 0);
5646     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 0, 1, -1);
5647     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 0, 10, -10);
5648     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 0, 19, -19);
5649     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 0, 20, -20);
5650     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 0, 21, -20);
5651     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 1, 0, 0);
5652     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 1, 1, -1);
5653     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 1, 9, -9);
5654     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 1, 18, -18);
5655     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 1, 19, -19);
5656     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 1, 20, -19);
5657     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 10, 0, 0);
5658     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 10, 1, -1);
5659     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 10, 5, -5);
5660     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 10, 9, -9);
5661     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 10, 10, -10);
5662     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 10, 11, -10);
5663     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 19, 0, 0);
5664     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 19, 1, -1);
5665     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 19, 2, -1);
5666     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 20, 0, 0);
5667 }
5668 
test54()5669 void test54()
5670 {
5671     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 20, 1, 0);
5672     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 21, 0, 0);
5673     test("abcdefghijklmnopqrst", 21, 0, "", 0, 0, 0);
5674     test("abcdefghijklmnopqrst", 21, 0, "", 0, 1, 0);
5675     test("abcdefghijklmnopqrst", 21, 0, "", 1, 0, 0);
5676     test("abcdefghijklmnopqrst", 21, 0, "abcde", 0, 0, 0);
5677     test("abcdefghijklmnopqrst", 21, 0, "abcde", 0, 1, 0);
5678     test("abcdefghijklmnopqrst", 21, 0, "abcde", 0, 2, 0);
5679     test("abcdefghijklmnopqrst", 21, 0, "abcde", 0, 4, 0);
5680     test("abcdefghijklmnopqrst", 21, 0, "abcde", 0, 5, 0);
5681     test("abcdefghijklmnopqrst", 21, 0, "abcde", 0, 6, 0);
5682     test("abcdefghijklmnopqrst", 21, 0, "abcde", 1, 0, 0);
5683     test("abcdefghijklmnopqrst", 21, 0, "abcde", 1, 1, 0);
5684     test("abcdefghijklmnopqrst", 21, 0, "abcde", 1, 2, 0);
5685     test("abcdefghijklmnopqrst", 21, 0, "abcde", 1, 3, 0);
5686     test("abcdefghijklmnopqrst", 21, 0, "abcde", 1, 4, 0);
5687     test("abcdefghijklmnopqrst", 21, 0, "abcde", 1, 5, 0);
5688     test("abcdefghijklmnopqrst", 21, 0, "abcde", 2, 0, 0);
5689     test("abcdefghijklmnopqrst", 21, 0, "abcde", 2, 1, 0);
5690     test("abcdefghijklmnopqrst", 21, 0, "abcde", 2, 2, 0);
5691     test("abcdefghijklmnopqrst", 21, 0, "abcde", 2, 3, 0);
5692     test("abcdefghijklmnopqrst", 21, 0, "abcde", 2, 4, 0);
5693     test("abcdefghijklmnopqrst", 21, 0, "abcde", 4, 0, 0);
5694     test("abcdefghijklmnopqrst", 21, 0, "abcde", 4, 1, 0);
5695     test("abcdefghijklmnopqrst", 21, 0, "abcde", 4, 2, 0);
5696     test("abcdefghijklmnopqrst", 21, 0, "abcde", 5, 0, 0);
5697     test("abcdefghijklmnopqrst", 21, 0, "abcde", 5, 1, 0);
5698     test("abcdefghijklmnopqrst", 21, 0, "abcde", 6, 0, 0);
5699     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 0, 0, 0);
5700     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 0, 1, 0);
5701     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 0, 5, 0);
5702     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 0, 9, 0);
5703     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 0, 10, 0);
5704     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 0, 11, 0);
5705     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 1, 0, 0);
5706     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 1, 1, 0);
5707     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 1, 4, 0);
5708     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 1, 8, 0);
5709     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 1, 9, 0);
5710     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 1, 10, 0);
5711     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 5, 0, 0);
5712     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 5, 1, 0);
5713     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 5, 2, 0);
5714     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 5, 4, 0);
5715     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 5, 5, 0);
5716     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 5, 6, 0);
5717     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 9, 0, 0);
5718     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 9, 1, 0);
5719     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 9, 2, 0);
5720     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 10, 0, 0);
5721     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 10, 1, 0);
5722     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 11, 0, 0);
5723     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 0, 0, 0);
5724     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 0, 1, 0);
5725     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 0, 10, 0);
5726     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 0, 19, 0);
5727     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 0, 20, 0);
5728     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 0, 21, 0);
5729     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 1, 0, 0);
5730     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 1, 1, 0);
5731     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 1, 9, 0);
5732     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 1, 18, 0);
5733     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 1, 19, 0);
5734     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 1, 20, 0);
5735     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 10, 0, 0);
5736     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 10, 1, 0);
5737     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 10, 5, 0);
5738     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 10, 9, 0);
5739     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 10, 10, 0);
5740     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 10, 11, 0);
5741     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 19, 0, 0);
5742     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 19, 1, 0);
5743     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 19, 2, 0);
5744     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 20, 0, 0);
5745     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 20, 1, 0);
5746     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 21, 0, 0);
5747 }
5748 
5749 
main(int,char **)5750 int main(int, char**) {
5751     test0();
5752     test1();
5753     test2();
5754     test3();
5755     test4();
5756     test5();
5757     test6();
5758     test7();
5759     test8();
5760     test9();
5761     test10();
5762     test11();
5763     test12();
5764     test13();
5765     test14();
5766     test15();
5767     test16();
5768     test17();
5769     test18();
5770     test19();
5771     test20();
5772     test21();
5773     test22();
5774     test23();
5775     test24();
5776     test25();
5777     test26();
5778     test27();
5779     test28();
5780     test29();
5781     test30();
5782     test31();
5783     test32();
5784     test33();
5785     test34();
5786     test35();
5787     test36();
5788     test37();
5789     test38();
5790     test39();
5791     test40();
5792     test41();
5793     test42();
5794     test43();
5795     test44();
5796     test45();
5797     test46();
5798     test47();
5799     test48();
5800     test49();
5801     test50();
5802     test51();
5803     test52();
5804     test53();
5805     test54();
5806 
5807 
5808     {
5809     test("abcde", 5, 1, "", 0, 0, 0);
5810     test("abcde", 2, 4, "", 0, 0, 3);
5811     test("abcde", 2, 4, "abcde", 3, 4, -2);
5812     test("ABCde", 2, 4, "abcde", 2, 4, -1);
5813     }
5814 
5815     {
5816     test(L"abcde", 5, 1, L"", 0, 0, 0);
5817     test(L"abcde", 2, 4, L"", 0, 0, 3);
5818     test(L"abcde", 2, 4, L"abcde", 3, 4, -2);
5819     test(L"ABCde", 2, 4, L"abcde", 2, 4, -1);
5820     }
5821 
5822 #if TEST_STD_VER >= 11
5823     {
5824     test(u"abcde", 5, 1, u"", 0, 0, 0);
5825     test(u"abcde", 2, 4, u"", 0, 0, 3);
5826     test(u"abcde", 2, 4, u"abcde", 3, 4, -2);
5827     test(u"ABCde", 2, 4, u"abcde", 2, 4, -1);
5828     }
5829 
5830     {
5831     test(U"abcde", 5, 1, U"", 0, 0, 0);
5832     test(U"abcde", 2, 4, U"", 0, 0, 3);
5833     test(U"abcde", 2, 4, U"abcde", 3, 4, -2);
5834     test(U"ABCde", 2, 4, U"abcde", 2, 4, -1);
5835     }
5836 #endif
5837 
5838 #if TEST_STD_VER > 11
5839     {
5840     typedef std::basic_string_view<char, constexpr_char_traits<char>> SV;
5841     constexpr SV  sv1 { "abcde", 5 };
5842     static_assert ( sv1.compare(5, 1, "", 0, 0) == 0, "" );
5843     static_assert ( sv1.compare(2, 4, "", 0, 0) > 0, "" );
5844     static_assert ( sv1.compare(2, 4, "abcde", 3, 4) < 0, "" );
5845     }
5846 #endif
5847 
5848   return 0;
5849 }
5850