1 //===----------------------------------------------------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 
11 // <string_view>
12 
13 // constexpr int compare(size_type pos1, size_type n1, basic_string_view str,
14 //             size_type pos2, size_type n2) const;
15 
16 #include <experimental/string_view>
17 #include <cassert>
18 
19 #include "constexpr_char_traits.hpp"
20 
sign(int x)21 int sign ( int x ) { return x > 0 ? 1 : ( x < 0 ? -1 : 0 ); }
22 
23 template<typename CharT>
test1(std::experimental::basic_string_view<CharT> sv1,size_t pos1,size_t n1,std::experimental::basic_string_view<CharT> sv2,size_t pos2,size_t n2,int expected)24 void test1 ( std::experimental::basic_string_view<CharT> sv1, size_t pos1, size_t n1,
25              std::experimental::basic_string_view<CharT> sv2, size_t pos2, size_t n2,
26              int expected ) {
27 
28     try
29     {
30         assert ( sign( sv1.compare(pos1, n1, sv2, pos2, n2)) == sign(expected));
31         assert(pos1 <= sv1.size());
32         assert(pos2 <= sv2.size());
33     }
34     catch (const std::out_of_range&) { assert(pos1 > sv1.size() || pos2 > sv2.size()); }
35 }
36 
37 
38 template<typename CharT>
test(const CharT * s1,size_t pos1,size_t n1,const CharT * s2,size_t pos2,size_t n2,int expected)39 void test ( const CharT *s1, size_t pos1, size_t n1,
40             const CharT *s2, size_t pos2, size_t n2,
41             int expected ) {
42     typedef std::experimental::basic_string_view<CharT> string_view_t;
43 
44     string_view_t sv1 ( s1 );
45     string_view_t sv2 ( s2 );
46     test1(sv1, pos1, n1, sv2, pos2, n2, expected);
47 }
48 
test0()49 void test0()
50 {
51     test("", 0, 0, "", 0, 0, 0);
52     test("", 0, 0, "", 0, 1, 0);
53     test("", 0, 0, "", 1, 0, 0);
54     test("", 0, 0, "abcde", 0, 0, 0);
55     test("", 0, 0, "abcde", 0, 1, -1);
56     test("", 0, 0, "abcde", 0, 2, -2);
57     test("", 0, 0, "abcde", 0, 4, -4);
58     test("", 0, 0, "abcde", 0, 5, -5);
59     test("", 0, 0, "abcde", 0, 6, -5);
60     test("", 0, 0, "abcde", 1, 0, 0);
61     test("", 0, 0, "abcde", 1, 1, -1);
62     test("", 0, 0, "abcde", 1, 2, -2);
63     test("", 0, 0, "abcde", 1, 3, -3);
64     test("", 0, 0, "abcde", 1, 4, -4);
65     test("", 0, 0, "abcde", 1, 5, -4);
66     test("", 0, 0, "abcde", 2, 0, 0);
67     test("", 0, 0, "abcde", 2, 1, -1);
68     test("", 0, 0, "abcde", 2, 2, -2);
69     test("", 0, 0, "abcde", 2, 3, -3);
70     test("", 0, 0, "abcde", 2, 4, -3);
71     test("", 0, 0, "abcde", 4, 0, 0);
72     test("", 0, 0, "abcde", 4, 1, -1);
73     test("", 0, 0, "abcde", 4, 2, -1);
74     test("", 0, 0, "abcde", 5, 0, 0);
75     test("", 0, 0, "abcde", 5, 1, 0);
76     test("", 0, 0, "abcde", 6, 0, 0);
77     test("", 0, 0, "abcdefghij", 0, 0, 0);
78     test("", 0, 0, "abcdefghij", 0, 1, -1);
79     test("", 0, 0, "abcdefghij", 0, 5, -5);
80     test("", 0, 0, "abcdefghij", 0, 9, -9);
81     test("", 0, 0, "abcdefghij", 0, 10, -10);
82     test("", 0, 0, "abcdefghij", 0, 11, -10);
83     test("", 0, 0, "abcdefghij", 1, 0, 0);
84     test("", 0, 0, "abcdefghij", 1, 1, -1);
85     test("", 0, 0, "abcdefghij", 1, 4, -4);
86     test("", 0, 0, "abcdefghij", 1, 8, -8);
87     test("", 0, 0, "abcdefghij", 1, 9, -9);
88     test("", 0, 0, "abcdefghij", 1, 10, -9);
89     test("", 0, 0, "abcdefghij", 5, 0, 0);
90     test("", 0, 0, "abcdefghij", 5, 1, -1);
91     test("", 0, 0, "abcdefghij", 5, 2, -2);
92     test("", 0, 0, "abcdefghij", 5, 4, -4);
93     test("", 0, 0, "abcdefghij", 5, 5, -5);
94     test("", 0, 0, "abcdefghij", 5, 6, -5);
95     test("", 0, 0, "abcdefghij", 9, 0, 0);
96     test("", 0, 0, "abcdefghij", 9, 1, -1);
97     test("", 0, 0, "abcdefghij", 9, 2, -1);
98     test("", 0, 0, "abcdefghij", 10, 0, 0);
99     test("", 0, 0, "abcdefghij", 10, 1, 0);
100     test("", 0, 0, "abcdefghij", 11, 0, 0);
101     test("", 0, 0, "abcdefghijklmnopqrst", 0, 0, 0);
102     test("", 0, 0, "abcdefghijklmnopqrst", 0, 1, -1);
103     test("", 0, 0, "abcdefghijklmnopqrst", 0, 10, -10);
104     test("", 0, 0, "abcdefghijklmnopqrst", 0, 19, -19);
105     test("", 0, 0, "abcdefghijklmnopqrst", 0, 20, -20);
106     test("", 0, 0, "abcdefghijklmnopqrst", 0, 21, -20);
107     test("", 0, 0, "abcdefghijklmnopqrst", 1, 0, 0);
108     test("", 0, 0, "abcdefghijklmnopqrst", 1, 1, -1);
109     test("", 0, 0, "abcdefghijklmnopqrst", 1, 9, -9);
110     test("", 0, 0, "abcdefghijklmnopqrst", 1, 18, -18);
111     test("", 0, 0, "abcdefghijklmnopqrst", 1, 19, -19);
112     test("", 0, 0, "abcdefghijklmnopqrst", 1, 20, -19);
113     test("", 0, 0, "abcdefghijklmnopqrst", 10, 0, 0);
114     test("", 0, 0, "abcdefghijklmnopqrst", 10, 1, -1);
115     test("", 0, 0, "abcdefghijklmnopqrst", 10, 5, -5);
116     test("", 0, 0, "abcdefghijklmnopqrst", 10, 9, -9);
117     test("", 0, 0, "abcdefghijklmnopqrst", 10, 10, -10);
118     test("", 0, 0, "abcdefghijklmnopqrst", 10, 11, -10);
119     test("", 0, 0, "abcdefghijklmnopqrst", 19, 0, 0);
120     test("", 0, 0, "abcdefghijklmnopqrst", 19, 1, -1);
121     test("", 0, 0, "abcdefghijklmnopqrst", 19, 2, -1);
122     test("", 0, 0, "abcdefghijklmnopqrst", 20, 0, 0);
123     test("", 0, 0, "abcdefghijklmnopqrst", 20, 1, 0);
124     test("", 0, 0, "abcdefghijklmnopqrst", 21, 0, 0);
125     test("", 0, 1, "", 0, 0, 0);
126     test("", 0, 1, "", 0, 1, 0);
127     test("", 0, 1, "", 1, 0, 0);
128     test("", 0, 1, "abcde", 0, 0, 0);
129     test("", 0, 1, "abcde", 0, 1, -1);
130     test("", 0, 1, "abcde", 0, 2, -2);
131     test("", 0, 1, "abcde", 0, 4, -4);
132     test("", 0, 1, "abcde", 0, 5, -5);
133     test("", 0, 1, "abcde", 0, 6, -5);
134     test("", 0, 1, "abcde", 1, 0, 0);
135     test("", 0, 1, "abcde", 1, 1, -1);
136     test("", 0, 1, "abcde", 1, 2, -2);
137     test("", 0, 1, "abcde", 1, 3, -3);
138     test("", 0, 1, "abcde", 1, 4, -4);
139     test("", 0, 1, "abcde", 1, 5, -4);
140     test("", 0, 1, "abcde", 2, 0, 0);
141     test("", 0, 1, "abcde", 2, 1, -1);
142     test("", 0, 1, "abcde", 2, 2, -2);
143     test("", 0, 1, "abcde", 2, 3, -3);
144     test("", 0, 1, "abcde", 2, 4, -3);
145     test("", 0, 1, "abcde", 4, 0, 0);
146     test("", 0, 1, "abcde", 4, 1, -1);
147     test("", 0, 1, "abcde", 4, 2, -1);
148     test("", 0, 1, "abcde", 5, 0, 0);
149     test("", 0, 1, "abcde", 5, 1, 0);
150     test("", 0, 1, "abcde", 6, 0, 0);
151 }
152 
test1()153 void test1()
154 {
155     test("", 0, 1, "abcdefghij", 0, 0, 0);
156     test("", 0, 1, "abcdefghij", 0, 1, -1);
157     test("", 0, 1, "abcdefghij", 0, 5, -5);
158     test("", 0, 1, "abcdefghij", 0, 9, -9);
159     test("", 0, 1, "abcdefghij", 0, 10, -10);
160     test("", 0, 1, "abcdefghij", 0, 11, -10);
161     test("", 0, 1, "abcdefghij", 1, 0, 0);
162     test("", 0, 1, "abcdefghij", 1, 1, -1);
163     test("", 0, 1, "abcdefghij", 1, 4, -4);
164     test("", 0, 1, "abcdefghij", 1, 8, -8);
165     test("", 0, 1, "abcdefghij", 1, 9, -9);
166     test("", 0, 1, "abcdefghij", 1, 10, -9);
167     test("", 0, 1, "abcdefghij", 5, 0, 0);
168     test("", 0, 1, "abcdefghij", 5, 1, -1);
169     test("", 0, 1, "abcdefghij", 5, 2, -2);
170     test("", 0, 1, "abcdefghij", 5, 4, -4);
171     test("", 0, 1, "abcdefghij", 5, 5, -5);
172     test("", 0, 1, "abcdefghij", 5, 6, -5);
173     test("", 0, 1, "abcdefghij", 9, 0, 0);
174     test("", 0, 1, "abcdefghij", 9, 1, -1);
175     test("", 0, 1, "abcdefghij", 9, 2, -1);
176     test("", 0, 1, "abcdefghij", 10, 0, 0);
177     test("", 0, 1, "abcdefghij", 10, 1, 0);
178     test("", 0, 1, "abcdefghij", 11, 0, 0);
179     test("", 0, 1, "abcdefghijklmnopqrst", 0, 0, 0);
180     test("", 0, 1, "abcdefghijklmnopqrst", 0, 1, -1);
181     test("", 0, 1, "abcdefghijklmnopqrst", 0, 10, -10);
182     test("", 0, 1, "abcdefghijklmnopqrst", 0, 19, -19);
183     test("", 0, 1, "abcdefghijklmnopqrst", 0, 20, -20);
184     test("", 0, 1, "abcdefghijklmnopqrst", 0, 21, -20);
185     test("", 0, 1, "abcdefghijklmnopqrst", 1, 0, 0);
186     test("", 0, 1, "abcdefghijklmnopqrst", 1, 1, -1);
187     test("", 0, 1, "abcdefghijklmnopqrst", 1, 9, -9);
188     test("", 0, 1, "abcdefghijklmnopqrst", 1, 18, -18);
189     test("", 0, 1, "abcdefghijklmnopqrst", 1, 19, -19);
190     test("", 0, 1, "abcdefghijklmnopqrst", 1, 20, -19);
191     test("", 0, 1, "abcdefghijklmnopqrst", 10, 0, 0);
192     test("", 0, 1, "abcdefghijklmnopqrst", 10, 1, -1);
193     test("", 0, 1, "abcdefghijklmnopqrst", 10, 5, -5);
194     test("", 0, 1, "abcdefghijklmnopqrst", 10, 9, -9);
195     test("", 0, 1, "abcdefghijklmnopqrst", 10, 10, -10);
196     test("", 0, 1, "abcdefghijklmnopqrst", 10, 11, -10);
197     test("", 0, 1, "abcdefghijklmnopqrst", 19, 0, 0);
198     test("", 0, 1, "abcdefghijklmnopqrst", 19, 1, -1);
199     test("", 0, 1, "abcdefghijklmnopqrst", 19, 2, -1);
200     test("", 0, 1, "abcdefghijklmnopqrst", 20, 0, 0);
201     test("", 0, 1, "abcdefghijklmnopqrst", 20, 1, 0);
202     test("", 0, 1, "abcdefghijklmnopqrst", 21, 0, 0);
203     test("", 1, 0, "", 0, 0, 0);
204     test("", 1, 0, "", 0, 1, 0);
205     test("", 1, 0, "", 1, 0, 0);
206     test("", 1, 0, "abcde", 0, 0, 0);
207     test("", 1, 0, "abcde", 0, 1, 0);
208     test("", 1, 0, "abcde", 0, 2, 0);
209     test("", 1, 0, "abcde", 0, 4, 0);
210     test("", 1, 0, "abcde", 0, 5, 0);
211     test("", 1, 0, "abcde", 0, 6, 0);
212     test("", 1, 0, "abcde", 1, 0, 0);
213     test("", 1, 0, "abcde", 1, 1, 0);
214     test("", 1, 0, "abcde", 1, 2, 0);
215     test("", 1, 0, "abcde", 1, 3, 0);
216     test("", 1, 0, "abcde", 1, 4, 0);
217     test("", 1, 0, "abcde", 1, 5, 0);
218     test("", 1, 0, "abcde", 2, 0, 0);
219     test("", 1, 0, "abcde", 2, 1, 0);
220     test("", 1, 0, "abcde", 2, 2, 0);
221     test("", 1, 0, "abcde", 2, 3, 0);
222     test("", 1, 0, "abcde", 2, 4, 0);
223     test("", 1, 0, "abcde", 4, 0, 0);
224     test("", 1, 0, "abcde", 4, 1, 0);
225     test("", 1, 0, "abcde", 4, 2, 0);
226     test("", 1, 0, "abcde", 5, 0, 0);
227     test("", 1, 0, "abcde", 5, 1, 0);
228     test("", 1, 0, "abcde", 6, 0, 0);
229     test("", 1, 0, "abcdefghij", 0, 0, 0);
230     test("", 1, 0, "abcdefghij", 0, 1, 0);
231     test("", 1, 0, "abcdefghij", 0, 5, 0);
232     test("", 1, 0, "abcdefghij", 0, 9, 0);
233     test("", 1, 0, "abcdefghij", 0, 10, 0);
234     test("", 1, 0, "abcdefghij", 0, 11, 0);
235     test("", 1, 0, "abcdefghij", 1, 0, 0);
236     test("", 1, 0, "abcdefghij", 1, 1, 0);
237     test("", 1, 0, "abcdefghij", 1, 4, 0);
238     test("", 1, 0, "abcdefghij", 1, 8, 0);
239     test("", 1, 0, "abcdefghij", 1, 9, 0);
240     test("", 1, 0, "abcdefghij", 1, 10, 0);
241     test("", 1, 0, "abcdefghij", 5, 0, 0);
242     test("", 1, 0, "abcdefghij", 5, 1, 0);
243     test("", 1, 0, "abcdefghij", 5, 2, 0);
244     test("", 1, 0, "abcdefghij", 5, 4, 0);
245     test("", 1, 0, "abcdefghij", 5, 5, 0);
246     test("", 1, 0, "abcdefghij", 5, 6, 0);
247     test("", 1, 0, "abcdefghij", 9, 0, 0);
248     test("", 1, 0, "abcdefghij", 9, 1, 0);
249     test("", 1, 0, "abcdefghij", 9, 2, 0);
250     test("", 1, 0, "abcdefghij", 10, 0, 0);
251     test("", 1, 0, "abcdefghij", 10, 1, 0);
252     test("", 1, 0, "abcdefghij", 11, 0, 0);
253     test("", 1, 0, "abcdefghijklmnopqrst", 0, 0, 0);
254     test("", 1, 0, "abcdefghijklmnopqrst", 0, 1, 0);
255 }
256 
test2()257 void test2()
258 {
259     test("", 1, 0, "abcdefghijklmnopqrst", 0, 10, 0);
260     test("", 1, 0, "abcdefghijklmnopqrst", 0, 19, 0);
261     test("", 1, 0, "abcdefghijklmnopqrst", 0, 20, 0);
262     test("", 1, 0, "abcdefghijklmnopqrst", 0, 21, 0);
263     test("", 1, 0, "abcdefghijklmnopqrst", 1, 0, 0);
264     test("", 1, 0, "abcdefghijklmnopqrst", 1, 1, 0);
265     test("", 1, 0, "abcdefghijklmnopqrst", 1, 9, 0);
266     test("", 1, 0, "abcdefghijklmnopqrst", 1, 18, 0);
267     test("", 1, 0, "abcdefghijklmnopqrst", 1, 19, 0);
268     test("", 1, 0, "abcdefghijklmnopqrst", 1, 20, 0);
269     test("", 1, 0, "abcdefghijklmnopqrst", 10, 0, 0);
270     test("", 1, 0, "abcdefghijklmnopqrst", 10, 1, 0);
271     test("", 1, 0, "abcdefghijklmnopqrst", 10, 5, 0);
272     test("", 1, 0, "abcdefghijklmnopqrst", 10, 9, 0);
273     test("", 1, 0, "abcdefghijklmnopqrst", 10, 10, 0);
274     test("", 1, 0, "abcdefghijklmnopqrst", 10, 11, 0);
275     test("", 1, 0, "abcdefghijklmnopqrst", 19, 0, 0);
276     test("", 1, 0, "abcdefghijklmnopqrst", 19, 1, 0);
277     test("", 1, 0, "abcdefghijklmnopqrst", 19, 2, 0);
278     test("", 1, 0, "abcdefghijklmnopqrst", 20, 0, 0);
279     test("", 1, 0, "abcdefghijklmnopqrst", 20, 1, 0);
280     test("", 1, 0, "abcdefghijklmnopqrst", 21, 0, 0);
281     test("abcde", 0, 0, "", 0, 0, 0);
282     test("abcde", 0, 0, "", 0, 1, 0);
283     test("abcde", 0, 0, "", 1, 0, 0);
284     test("abcde", 0, 0, "abcde", 0, 0, 0);
285     test("abcde", 0, 0, "abcde", 0, 1, -1);
286     test("abcde", 0, 0, "abcde", 0, 2, -2);
287     test("abcde", 0, 0, "abcde", 0, 4, -4);
288     test("abcde", 0, 0, "abcde", 0, 5, -5);
289     test("abcde", 0, 0, "abcde", 0, 6, -5);
290     test("abcde", 0, 0, "abcde", 1, 0, 0);
291     test("abcde", 0, 0, "abcde", 1, 1, -1);
292     test("abcde", 0, 0, "abcde", 1, 2, -2);
293     test("abcde", 0, 0, "abcde", 1, 3, -3);
294     test("abcde", 0, 0, "abcde", 1, 4, -4);
295     test("abcde", 0, 0, "abcde", 1, 5, -4);
296     test("abcde", 0, 0, "abcde", 2, 0, 0);
297     test("abcde", 0, 0, "abcde", 2, 1, -1);
298     test("abcde", 0, 0, "abcde", 2, 2, -2);
299     test("abcde", 0, 0, "abcde", 2, 3, -3);
300     test("abcde", 0, 0, "abcde", 2, 4, -3);
301     test("abcde", 0, 0, "abcde", 4, 0, 0);
302     test("abcde", 0, 0, "abcde", 4, 1, -1);
303     test("abcde", 0, 0, "abcde", 4, 2, -1);
304     test("abcde", 0, 0, "abcde", 5, 0, 0);
305     test("abcde", 0, 0, "abcde", 5, 1, 0);
306     test("abcde", 0, 0, "abcde", 6, 0, 0);
307     test("abcde", 0, 0, "abcdefghij", 0, 0, 0);
308     test("abcde", 0, 0, "abcdefghij", 0, 1, -1);
309     test("abcde", 0, 0, "abcdefghij", 0, 5, -5);
310     test("abcde", 0, 0, "abcdefghij", 0, 9, -9);
311     test("abcde", 0, 0, "abcdefghij", 0, 10, -10);
312     test("abcde", 0, 0, "abcdefghij", 0, 11, -10);
313     test("abcde", 0, 0, "abcdefghij", 1, 0, 0);
314     test("abcde", 0, 0, "abcdefghij", 1, 1, -1);
315     test("abcde", 0, 0, "abcdefghij", 1, 4, -4);
316     test("abcde", 0, 0, "abcdefghij", 1, 8, -8);
317     test("abcde", 0, 0, "abcdefghij", 1, 9, -9);
318     test("abcde", 0, 0, "abcdefghij", 1, 10, -9);
319     test("abcde", 0, 0, "abcdefghij", 5, 0, 0);
320     test("abcde", 0, 0, "abcdefghij", 5, 1, -1);
321     test("abcde", 0, 0, "abcdefghij", 5, 2, -2);
322     test("abcde", 0, 0, "abcdefghij", 5, 4, -4);
323     test("abcde", 0, 0, "abcdefghij", 5, 5, -5);
324     test("abcde", 0, 0, "abcdefghij", 5, 6, -5);
325     test("abcde", 0, 0, "abcdefghij", 9, 0, 0);
326     test("abcde", 0, 0, "abcdefghij", 9, 1, -1);
327     test("abcde", 0, 0, "abcdefghij", 9, 2, -1);
328     test("abcde", 0, 0, "abcdefghij", 10, 0, 0);
329     test("abcde", 0, 0, "abcdefghij", 10, 1, 0);
330     test("abcde", 0, 0, "abcdefghij", 11, 0, 0);
331     test("abcde", 0, 0, "abcdefghijklmnopqrst", 0, 0, 0);
332     test("abcde", 0, 0, "abcdefghijklmnopqrst", 0, 1, -1);
333     test("abcde", 0, 0, "abcdefghijklmnopqrst", 0, 10, -10);
334     test("abcde", 0, 0, "abcdefghijklmnopqrst", 0, 19, -19);
335     test("abcde", 0, 0, "abcdefghijklmnopqrst", 0, 20, -20);
336     test("abcde", 0, 0, "abcdefghijklmnopqrst", 0, 21, -20);
337     test("abcde", 0, 0, "abcdefghijklmnopqrst", 1, 0, 0);
338     test("abcde", 0, 0, "abcdefghijklmnopqrst", 1, 1, -1);
339     test("abcde", 0, 0, "abcdefghijklmnopqrst", 1, 9, -9);
340     test("abcde", 0, 0, "abcdefghijklmnopqrst", 1, 18, -18);
341     test("abcde", 0, 0, "abcdefghijklmnopqrst", 1, 19, -19);
342     test("abcde", 0, 0, "abcdefghijklmnopqrst", 1, 20, -19);
343     test("abcde", 0, 0, "abcdefghijklmnopqrst", 10, 0, 0);
344     test("abcde", 0, 0, "abcdefghijklmnopqrst", 10, 1, -1);
345     test("abcde", 0, 0, "abcdefghijklmnopqrst", 10, 5, -5);
346     test("abcde", 0, 0, "abcdefghijklmnopqrst", 10, 9, -9);
347     test("abcde", 0, 0, "abcdefghijklmnopqrst", 10, 10, -10);
348     test("abcde", 0, 0, "abcdefghijklmnopqrst", 10, 11, -10);
349     test("abcde", 0, 0, "abcdefghijklmnopqrst", 19, 0, 0);
350     test("abcde", 0, 0, "abcdefghijklmnopqrst", 19, 1, -1);
351     test("abcde", 0, 0, "abcdefghijklmnopqrst", 19, 2, -1);
352     test("abcde", 0, 0, "abcdefghijklmnopqrst", 20, 0, 0);
353     test("abcde", 0, 0, "abcdefghijklmnopqrst", 20, 1, 0);
354     test("abcde", 0, 0, "abcdefghijklmnopqrst", 21, 0, 0);
355     test("abcde", 0, 1, "", 0, 0, 1);
356     test("abcde", 0, 1, "", 0, 1, 1);
357     test("abcde", 0, 1, "", 1, 0, 0);
358     test("abcde", 0, 1, "abcde", 0, 0, 1);
359 }
360 
test3()361 void test3()
362 {
363     test("abcde", 0, 1, "abcde", 0, 1, 0);
364     test("abcde", 0, 1, "abcde", 0, 2, -1);
365     test("abcde", 0, 1, "abcde", 0, 4, -3);
366     test("abcde", 0, 1, "abcde", 0, 5, -4);
367     test("abcde", 0, 1, "abcde", 0, 6, -4);
368     test("abcde", 0, 1, "abcde", 1, 0, 1);
369     test("abcde", 0, 1, "abcde", 1, 1, -1);
370     test("abcde", 0, 1, "abcde", 1, 2, -1);
371     test("abcde", 0, 1, "abcde", 1, 3, -1);
372     test("abcde", 0, 1, "abcde", 1, 4, -1);
373     test("abcde", 0, 1, "abcde", 1, 5, -1);
374     test("abcde", 0, 1, "abcde", 2, 0, 1);
375     test("abcde", 0, 1, "abcde", 2, 1, -2);
376     test("abcde", 0, 1, "abcde", 2, 2, -2);
377     test("abcde", 0, 1, "abcde", 2, 3, -2);
378     test("abcde", 0, 1, "abcde", 2, 4, -2);
379     test("abcde", 0, 1, "abcde", 4, 0, 1);
380     test("abcde", 0, 1, "abcde", 4, 1, -4);
381     test("abcde", 0, 1, "abcde", 4, 2, -4);
382     test("abcde", 0, 1, "abcde", 5, 0, 1);
383     test("abcde", 0, 1, "abcde", 5, 1, 1);
384     test("abcde", 0, 1, "abcde", 6, 0, 0);
385     test("abcde", 0, 1, "abcdefghij", 0, 0, 1);
386     test("abcde", 0, 1, "abcdefghij", 0, 1, 0);
387     test("abcde", 0, 1, "abcdefghij", 0, 5, -4);
388     test("abcde", 0, 1, "abcdefghij", 0, 9, -8);
389     test("abcde", 0, 1, "abcdefghij", 0, 10, -9);
390     test("abcde", 0, 1, "abcdefghij", 0, 11, -9);
391     test("abcde", 0, 1, "abcdefghij", 1, 0, 1);
392     test("abcde", 0, 1, "abcdefghij", 1, 1, -1);
393     test("abcde", 0, 1, "abcdefghij", 1, 4, -1);
394     test("abcde", 0, 1, "abcdefghij", 1, 8, -1);
395     test("abcde", 0, 1, "abcdefghij", 1, 9, -1);
396     test("abcde", 0, 1, "abcdefghij", 1, 10, -1);
397     test("abcde", 0, 1, "abcdefghij", 5, 0, 1);
398     test("abcde", 0, 1, "abcdefghij", 5, 1, -5);
399     test("abcde", 0, 1, "abcdefghij", 5, 2, -5);
400     test("abcde", 0, 1, "abcdefghij", 5, 4, -5);
401     test("abcde", 0, 1, "abcdefghij", 5, 5, -5);
402     test("abcde", 0, 1, "abcdefghij", 5, 6, -5);
403     test("abcde", 0, 1, "abcdefghij", 9, 0, 1);
404     test("abcde", 0, 1, "abcdefghij", 9, 1, -9);
405     test("abcde", 0, 1, "abcdefghij", 9, 2, -9);
406     test("abcde", 0, 1, "abcdefghij", 10, 0, 1);
407     test("abcde", 0, 1, "abcdefghij", 10, 1, 1);
408     test("abcde", 0, 1, "abcdefghij", 11, 0, 0);
409     test("abcde", 0, 1, "abcdefghijklmnopqrst", 0, 0, 1);
410     test("abcde", 0, 1, "abcdefghijklmnopqrst", 0, 1, 0);
411     test("abcde", 0, 1, "abcdefghijklmnopqrst", 0, 10, -9);
412     test("abcde", 0, 1, "abcdefghijklmnopqrst", 0, 19, -18);
413     test("abcde", 0, 1, "abcdefghijklmnopqrst", 0, 20, -19);
414     test("abcde", 0, 1, "abcdefghijklmnopqrst", 0, 21, -19);
415     test("abcde", 0, 1, "abcdefghijklmnopqrst", 1, 0, 1);
416     test("abcde", 0, 1, "abcdefghijklmnopqrst", 1, 1, -1);
417     test("abcde", 0, 1, "abcdefghijklmnopqrst", 1, 9, -1);
418     test("abcde", 0, 1, "abcdefghijklmnopqrst", 1, 18, -1);
419     test("abcde", 0, 1, "abcdefghijklmnopqrst", 1, 19, -1);
420     test("abcde", 0, 1, "abcdefghijklmnopqrst", 1, 20, -1);
421     test("abcde", 0, 1, "abcdefghijklmnopqrst", 10, 0, 1);
422     test("abcde", 0, 1, "abcdefghijklmnopqrst", 10, 1, -10);
423     test("abcde", 0, 1, "abcdefghijklmnopqrst", 10, 5, -10);
424     test("abcde", 0, 1, "abcdefghijklmnopqrst", 10, 9, -10);
425     test("abcde", 0, 1, "abcdefghijklmnopqrst", 10, 10, -10);
426     test("abcde", 0, 1, "abcdefghijklmnopqrst", 10, 11, -10);
427     test("abcde", 0, 1, "abcdefghijklmnopqrst", 19, 0, 1);
428     test("abcde", 0, 1, "abcdefghijklmnopqrst", 19, 1, -19);
429     test("abcde", 0, 1, "abcdefghijklmnopqrst", 19, 2, -19);
430     test("abcde", 0, 1, "abcdefghijklmnopqrst", 20, 0, 1);
431     test("abcde", 0, 1, "abcdefghijklmnopqrst", 20, 1, 1);
432     test("abcde", 0, 1, "abcdefghijklmnopqrst", 21, 0, 0);
433     test("abcde", 0, 2, "", 0, 0, 2);
434     test("abcde", 0, 2, "", 0, 1, 2);
435     test("abcde", 0, 2, "", 1, 0, 0);
436     test("abcde", 0, 2, "abcde", 0, 0, 2);
437     test("abcde", 0, 2, "abcde", 0, 1, 1);
438     test("abcde", 0, 2, "abcde", 0, 2, 0);
439     test("abcde", 0, 2, "abcde", 0, 4, -2);
440     test("abcde", 0, 2, "abcde", 0, 5, -3);
441     test("abcde", 0, 2, "abcde", 0, 6, -3);
442     test("abcde", 0, 2, "abcde", 1, 0, 2);
443     test("abcde", 0, 2, "abcde", 1, 1, -1);
444     test("abcde", 0, 2, "abcde", 1, 2, -1);
445     test("abcde", 0, 2, "abcde", 1, 3, -1);
446     test("abcde", 0, 2, "abcde", 1, 4, -1);
447     test("abcde", 0, 2, "abcde", 1, 5, -1);
448     test("abcde", 0, 2, "abcde", 2, 0, 2);
449     test("abcde", 0, 2, "abcde", 2, 1, -2);
450     test("abcde", 0, 2, "abcde", 2, 2, -2);
451     test("abcde", 0, 2, "abcde", 2, 3, -2);
452     test("abcde", 0, 2, "abcde", 2, 4, -2);
453     test("abcde", 0, 2, "abcde", 4, 0, 2);
454     test("abcde", 0, 2, "abcde", 4, 1, -4);
455     test("abcde", 0, 2, "abcde", 4, 2, -4);
456     test("abcde", 0, 2, "abcde", 5, 0, 2);
457     test("abcde", 0, 2, "abcde", 5, 1, 2);
458     test("abcde", 0, 2, "abcde", 6, 0, 0);
459     test("abcde", 0, 2, "abcdefghij", 0, 0, 2);
460     test("abcde", 0, 2, "abcdefghij", 0, 1, 1);
461     test("abcde", 0, 2, "abcdefghij", 0, 5, -3);
462     test("abcde", 0, 2, "abcdefghij", 0, 9, -7);
463 }
464 
test4()465 void test4()
466 {
467     test("abcde", 0, 2, "abcdefghij", 0, 10, -8);
468     test("abcde", 0, 2, "abcdefghij", 0, 11, -8);
469     test("abcde", 0, 2, "abcdefghij", 1, 0, 2);
470     test("abcde", 0, 2, "abcdefghij", 1, 1, -1);
471     test("abcde", 0, 2, "abcdefghij", 1, 4, -1);
472     test("abcde", 0, 2, "abcdefghij", 1, 8, -1);
473     test("abcde", 0, 2, "abcdefghij", 1, 9, -1);
474     test("abcde", 0, 2, "abcdefghij", 1, 10, -1);
475     test("abcde", 0, 2, "abcdefghij", 5, 0, 2);
476     test("abcde", 0, 2, "abcdefghij", 5, 1, -5);
477     test("abcde", 0, 2, "abcdefghij", 5, 2, -5);
478     test("abcde", 0, 2, "abcdefghij", 5, 4, -5);
479     test("abcde", 0, 2, "abcdefghij", 5, 5, -5);
480     test("abcde", 0, 2, "abcdefghij", 5, 6, -5);
481     test("abcde", 0, 2, "abcdefghij", 9, 0, 2);
482     test("abcde", 0, 2, "abcdefghij", 9, 1, -9);
483     test("abcde", 0, 2, "abcdefghij", 9, 2, -9);
484     test("abcde", 0, 2, "abcdefghij", 10, 0, 2);
485     test("abcde", 0, 2, "abcdefghij", 10, 1, 2);
486     test("abcde", 0, 2, "abcdefghij", 11, 0, 0);
487     test("abcde", 0, 2, "abcdefghijklmnopqrst", 0, 0, 2);
488     test("abcde", 0, 2, "abcdefghijklmnopqrst", 0, 1, 1);
489     test("abcde", 0, 2, "abcdefghijklmnopqrst", 0, 10, -8);
490     test("abcde", 0, 2, "abcdefghijklmnopqrst", 0, 19, -17);
491     test("abcde", 0, 2, "abcdefghijklmnopqrst", 0, 20, -18);
492     test("abcde", 0, 2, "abcdefghijklmnopqrst", 0, 21, -18);
493     test("abcde", 0, 2, "abcdefghijklmnopqrst", 1, 0, 2);
494     test("abcde", 0, 2, "abcdefghijklmnopqrst", 1, 1, -1);
495     test("abcde", 0, 2, "abcdefghijklmnopqrst", 1, 9, -1);
496     test("abcde", 0, 2, "abcdefghijklmnopqrst", 1, 18, -1);
497     test("abcde", 0, 2, "abcdefghijklmnopqrst", 1, 19, -1);
498     test("abcde", 0, 2, "abcdefghijklmnopqrst", 1, 20, -1);
499     test("abcde", 0, 2, "abcdefghijklmnopqrst", 10, 0, 2);
500     test("abcde", 0, 2, "abcdefghijklmnopqrst", 10, 1, -10);
501     test("abcde", 0, 2, "abcdefghijklmnopqrst", 10, 5, -10);
502     test("abcde", 0, 2, "abcdefghijklmnopqrst", 10, 9, -10);
503     test("abcde", 0, 2, "abcdefghijklmnopqrst", 10, 10, -10);
504     test("abcde", 0, 2, "abcdefghijklmnopqrst", 10, 11, -10);
505     test("abcde", 0, 2, "abcdefghijklmnopqrst", 19, 0, 2);
506     test("abcde", 0, 2, "abcdefghijklmnopqrst", 19, 1, -19);
507     test("abcde", 0, 2, "abcdefghijklmnopqrst", 19, 2, -19);
508     test("abcde", 0, 2, "abcdefghijklmnopqrst", 20, 0, 2);
509     test("abcde", 0, 2, "abcdefghijklmnopqrst", 20, 1, 2);
510     test("abcde", 0, 2, "abcdefghijklmnopqrst", 21, 0, 0);
511     test("abcde", 0, 4, "", 0, 0, 4);
512     test("abcde", 0, 4, "", 0, 1, 4);
513     test("abcde", 0, 4, "", 1, 0, 0);
514     test("abcde", 0, 4, "abcde", 0, 0, 4);
515     test("abcde", 0, 4, "abcde", 0, 1, 3);
516     test("abcde", 0, 4, "abcde", 0, 2, 2);
517     test("abcde", 0, 4, "abcde", 0, 4, 0);
518     test("abcde", 0, 4, "abcde", 0, 5, -1);
519     test("abcde", 0, 4, "abcde", 0, 6, -1);
520     test("abcde", 0, 4, "abcde", 1, 0, 4);
521     test("abcde", 0, 4, "abcde", 1, 1, -1);
522     test("abcde", 0, 4, "abcde", 1, 2, -1);
523     test("abcde", 0, 4, "abcde", 1, 3, -1);
524     test("abcde", 0, 4, "abcde", 1, 4, -1);
525     test("abcde", 0, 4, "abcde", 1, 5, -1);
526     test("abcde", 0, 4, "abcde", 2, 0, 4);
527     test("abcde", 0, 4, "abcde", 2, 1, -2);
528     test("abcde", 0, 4, "abcde", 2, 2, -2);
529     test("abcde", 0, 4, "abcde", 2, 3, -2);
530     test("abcde", 0, 4, "abcde", 2, 4, -2);
531     test("abcde", 0, 4, "abcde", 4, 0, 4);
532     test("abcde", 0, 4, "abcde", 4, 1, -4);
533     test("abcde", 0, 4, "abcde", 4, 2, -4);
534     test("abcde", 0, 4, "abcde", 5, 0, 4);
535     test("abcde", 0, 4, "abcde", 5, 1, 4);
536     test("abcde", 0, 4, "abcde", 6, 0, 0);
537     test("abcde", 0, 4, "abcdefghij", 0, 0, 4);
538     test("abcde", 0, 4, "abcdefghij", 0, 1, 3);
539     test("abcde", 0, 4, "abcdefghij", 0, 5, -1);
540     test("abcde", 0, 4, "abcdefghij", 0, 9, -5);
541     test("abcde", 0, 4, "abcdefghij", 0, 10, -6);
542     test("abcde", 0, 4, "abcdefghij", 0, 11, -6);
543     test("abcde", 0, 4, "abcdefghij", 1, 0, 4);
544     test("abcde", 0, 4, "abcdefghij", 1, 1, -1);
545     test("abcde", 0, 4, "abcdefghij", 1, 4, -1);
546     test("abcde", 0, 4, "abcdefghij", 1, 8, -1);
547     test("abcde", 0, 4, "abcdefghij", 1, 9, -1);
548     test("abcde", 0, 4, "abcdefghij", 1, 10, -1);
549     test("abcde", 0, 4, "abcdefghij", 5, 0, 4);
550     test("abcde", 0, 4, "abcdefghij", 5, 1, -5);
551     test("abcde", 0, 4, "abcdefghij", 5, 2, -5);
552     test("abcde", 0, 4, "abcdefghij", 5, 4, -5);
553     test("abcde", 0, 4, "abcdefghij", 5, 5, -5);
554     test("abcde", 0, 4, "abcdefghij", 5, 6, -5);
555     test("abcde", 0, 4, "abcdefghij", 9, 0, 4);
556     test("abcde", 0, 4, "abcdefghij", 9, 1, -9);
557     test("abcde", 0, 4, "abcdefghij", 9, 2, -9);
558     test("abcde", 0, 4, "abcdefghij", 10, 0, 4);
559     test("abcde", 0, 4, "abcdefghij", 10, 1, 4);
560     test("abcde", 0, 4, "abcdefghij", 11, 0, 0);
561     test("abcde", 0, 4, "abcdefghijklmnopqrst", 0, 0, 4);
562     test("abcde", 0, 4, "abcdefghijklmnopqrst", 0, 1, 3);
563     test("abcde", 0, 4, "abcdefghijklmnopqrst", 0, 10, -6);
564     test("abcde", 0, 4, "abcdefghijklmnopqrst", 0, 19, -15);
565     test("abcde", 0, 4, "abcdefghijklmnopqrst", 0, 20, -16);
566     test("abcde", 0, 4, "abcdefghijklmnopqrst", 0, 21, -16);
567 }
568 
test5()569 void test5()
570 {
571     test("abcde", 0, 4, "abcdefghijklmnopqrst", 1, 0, 4);
572     test("abcde", 0, 4, "abcdefghijklmnopqrst", 1, 1, -1);
573     test("abcde", 0, 4, "abcdefghijklmnopqrst", 1, 9, -1);
574     test("abcde", 0, 4, "abcdefghijklmnopqrst", 1, 18, -1);
575     test("abcde", 0, 4, "abcdefghijklmnopqrst", 1, 19, -1);
576     test("abcde", 0, 4, "abcdefghijklmnopqrst", 1, 20, -1);
577     test("abcde", 0, 4, "abcdefghijklmnopqrst", 10, 0, 4);
578     test("abcde", 0, 4, "abcdefghijklmnopqrst", 10, 1, -10);
579     test("abcde", 0, 4, "abcdefghijklmnopqrst", 10, 5, -10);
580     test("abcde", 0, 4, "abcdefghijklmnopqrst", 10, 9, -10);
581     test("abcde", 0, 4, "abcdefghijklmnopqrst", 10, 10, -10);
582     test("abcde", 0, 4, "abcdefghijklmnopqrst", 10, 11, -10);
583     test("abcde", 0, 4, "abcdefghijklmnopqrst", 19, 0, 4);
584     test("abcde", 0, 4, "abcdefghijklmnopqrst", 19, 1, -19);
585     test("abcde", 0, 4, "abcdefghijklmnopqrst", 19, 2, -19);
586     test("abcde", 0, 4, "abcdefghijklmnopqrst", 20, 0, 4);
587     test("abcde", 0, 4, "abcdefghijklmnopqrst", 20, 1, 4);
588     test("abcde", 0, 4, "abcdefghijklmnopqrst", 21, 0, 0);
589     test("abcde", 0, 5, "", 0, 0, 5);
590     test("abcde", 0, 5, "", 0, 1, 5);
591     test("abcde", 0, 5, "", 1, 0, 0);
592     test("abcde", 0, 5, "abcde", 0, 0, 5);
593     test("abcde", 0, 5, "abcde", 0, 1, 4);
594     test("abcde", 0, 5, "abcde", 0, 2, 3);
595     test("abcde", 0, 5, "abcde", 0, 4, 1);
596     test("abcde", 0, 5, "abcde", 0, 5, 0);
597     test("abcde", 0, 5, "abcde", 0, 6, 0);
598     test("abcde", 0, 5, "abcde", 1, 0, 5);
599     test("abcde", 0, 5, "abcde", 1, 1, -1);
600     test("abcde", 0, 5, "abcde", 1, 2, -1);
601     test("abcde", 0, 5, "abcde", 1, 3, -1);
602     test("abcde", 0, 5, "abcde", 1, 4, -1);
603     test("abcde", 0, 5, "abcde", 1, 5, -1);
604     test("abcde", 0, 5, "abcde", 2, 0, 5);
605     test("abcde", 0, 5, "abcde", 2, 1, -2);
606     test("abcde", 0, 5, "abcde", 2, 2, -2);
607     test("abcde", 0, 5, "abcde", 2, 3, -2);
608     test("abcde", 0, 5, "abcde", 2, 4, -2);
609     test("abcde", 0, 5, "abcde", 4, 0, 5);
610     test("abcde", 0, 5, "abcde", 4, 1, -4);
611     test("abcde", 0, 5, "abcde", 4, 2, -4);
612     test("abcde", 0, 5, "abcde", 5, 0, 5);
613     test("abcde", 0, 5, "abcde", 5, 1, 5);
614     test("abcde", 0, 5, "abcde", 6, 0, 0);
615     test("abcde", 0, 5, "abcdefghij", 0, 0, 5);
616     test("abcde", 0, 5, "abcdefghij", 0, 1, 4);
617     test("abcde", 0, 5, "abcdefghij", 0, 5, 0);
618     test("abcde", 0, 5, "abcdefghij", 0, 9, -4);
619     test("abcde", 0, 5, "abcdefghij", 0, 10, -5);
620     test("abcde", 0, 5, "abcdefghij", 0, 11, -5);
621     test("abcde", 0, 5, "abcdefghij", 1, 0, 5);
622     test("abcde", 0, 5, "abcdefghij", 1, 1, -1);
623     test("abcde", 0, 5, "abcdefghij", 1, 4, -1);
624     test("abcde", 0, 5, "abcdefghij", 1, 8, -1);
625     test("abcde", 0, 5, "abcdefghij", 1, 9, -1);
626     test("abcde", 0, 5, "abcdefghij", 1, 10, -1);
627     test("abcde", 0, 5, "abcdefghij", 5, 0, 5);
628     test("abcde", 0, 5, "abcdefghij", 5, 1, -5);
629     test("abcde", 0, 5, "abcdefghij", 5, 2, -5);
630     test("abcde", 0, 5, "abcdefghij", 5, 4, -5);
631     test("abcde", 0, 5, "abcdefghij", 5, 5, -5);
632     test("abcde", 0, 5, "abcdefghij", 5, 6, -5);
633     test("abcde", 0, 5, "abcdefghij", 9, 0, 5);
634     test("abcde", 0, 5, "abcdefghij", 9, 1, -9);
635     test("abcde", 0, 5, "abcdefghij", 9, 2, -9);
636     test("abcde", 0, 5, "abcdefghij", 10, 0, 5);
637     test("abcde", 0, 5, "abcdefghij", 10, 1, 5);
638     test("abcde", 0, 5, "abcdefghij", 11, 0, 0);
639     test("abcde", 0, 5, "abcdefghijklmnopqrst", 0, 0, 5);
640     test("abcde", 0, 5, "abcdefghijklmnopqrst", 0, 1, 4);
641     test("abcde", 0, 5, "abcdefghijklmnopqrst", 0, 10, -5);
642     test("abcde", 0, 5, "abcdefghijklmnopqrst", 0, 19, -14);
643     test("abcde", 0, 5, "abcdefghijklmnopqrst", 0, 20, -15);
644     test("abcde", 0, 5, "abcdefghijklmnopqrst", 0, 21, -15);
645     test("abcde", 0, 5, "abcdefghijklmnopqrst", 1, 0, 5);
646     test("abcde", 0, 5, "abcdefghijklmnopqrst", 1, 1, -1);
647     test("abcde", 0, 5, "abcdefghijklmnopqrst", 1, 9, -1);
648     test("abcde", 0, 5, "abcdefghijklmnopqrst", 1, 18, -1);
649     test("abcde", 0, 5, "abcdefghijklmnopqrst", 1, 19, -1);
650     test("abcde", 0, 5, "abcdefghijklmnopqrst", 1, 20, -1);
651     test("abcde", 0, 5, "abcdefghijklmnopqrst", 10, 0, 5);
652     test("abcde", 0, 5, "abcdefghijklmnopqrst", 10, 1, -10);
653     test("abcde", 0, 5, "abcdefghijklmnopqrst", 10, 5, -10);
654     test("abcde", 0, 5, "abcdefghijklmnopqrst", 10, 9, -10);
655     test("abcde", 0, 5, "abcdefghijklmnopqrst", 10, 10, -10);
656     test("abcde", 0, 5, "abcdefghijklmnopqrst", 10, 11, -10);
657     test("abcde", 0, 5, "abcdefghijklmnopqrst", 19, 0, 5);
658     test("abcde", 0, 5, "abcdefghijklmnopqrst", 19, 1, -19);
659     test("abcde", 0, 5, "abcdefghijklmnopqrst", 19, 2, -19);
660     test("abcde", 0, 5, "abcdefghijklmnopqrst", 20, 0, 5);
661     test("abcde", 0, 5, "abcdefghijklmnopqrst", 20, 1, 5);
662     test("abcde", 0, 5, "abcdefghijklmnopqrst", 21, 0, 0);
663     test("abcde", 0, 6, "", 0, 0, 5);
664     test("abcde", 0, 6, "", 0, 1, 5);
665     test("abcde", 0, 6, "", 1, 0, 0);
666     test("abcde", 0, 6, "abcde", 0, 0, 5);
667     test("abcde", 0, 6, "abcde", 0, 1, 4);
668     test("abcde", 0, 6, "abcde", 0, 2, 3);
669     test("abcde", 0, 6, "abcde", 0, 4, 1);
670     test("abcde", 0, 6, "abcde", 0, 5, 0);
671 }
672 
test6()673 void test6()
674 {
675     test("abcde", 0, 6, "abcde", 0, 6, 0);
676     test("abcde", 0, 6, "abcde", 1, 0, 5);
677     test("abcde", 0, 6, "abcde", 1, 1, -1);
678     test("abcde", 0, 6, "abcde", 1, 2, -1);
679     test("abcde", 0, 6, "abcde", 1, 3, -1);
680     test("abcde", 0, 6, "abcde", 1, 4, -1);
681     test("abcde", 0, 6, "abcde", 1, 5, -1);
682     test("abcde", 0, 6, "abcde", 2, 0, 5);
683     test("abcde", 0, 6, "abcde", 2, 1, -2);
684     test("abcde", 0, 6, "abcde", 2, 2, -2);
685     test("abcde", 0, 6, "abcde", 2, 3, -2);
686     test("abcde", 0, 6, "abcde", 2, 4, -2);
687     test("abcde", 0, 6, "abcde", 4, 0, 5);
688     test("abcde", 0, 6, "abcde", 4, 1, -4);
689     test("abcde", 0, 6, "abcde", 4, 2, -4);
690     test("abcde", 0, 6, "abcde", 5, 0, 5);
691     test("abcde", 0, 6, "abcde", 5, 1, 5);
692     test("abcde", 0, 6, "abcde", 6, 0, 0);
693     test("abcde", 0, 6, "abcdefghij", 0, 0, 5);
694     test("abcde", 0, 6, "abcdefghij", 0, 1, 4);
695     test("abcde", 0, 6, "abcdefghij", 0, 5, 0);
696     test("abcde", 0, 6, "abcdefghij", 0, 9, -4);
697     test("abcde", 0, 6, "abcdefghij", 0, 10, -5);
698     test("abcde", 0, 6, "abcdefghij", 0, 11, -5);
699     test("abcde", 0, 6, "abcdefghij", 1, 0, 5);
700     test("abcde", 0, 6, "abcdefghij", 1, 1, -1);
701     test("abcde", 0, 6, "abcdefghij", 1, 4, -1);
702     test("abcde", 0, 6, "abcdefghij", 1, 8, -1);
703     test("abcde", 0, 6, "abcdefghij", 1, 9, -1);
704     test("abcde", 0, 6, "abcdefghij", 1, 10, -1);
705     test("abcde", 0, 6, "abcdefghij", 5, 0, 5);
706     test("abcde", 0, 6, "abcdefghij", 5, 1, -5);
707     test("abcde", 0, 6, "abcdefghij", 5, 2, -5);
708     test("abcde", 0, 6, "abcdefghij", 5, 4, -5);
709     test("abcde", 0, 6, "abcdefghij", 5, 5, -5);
710     test("abcde", 0, 6, "abcdefghij", 5, 6, -5);
711     test("abcde", 0, 6, "abcdefghij", 9, 0, 5);
712     test("abcde", 0, 6, "abcdefghij", 9, 1, -9);
713     test("abcde", 0, 6, "abcdefghij", 9, 2, -9);
714     test("abcde", 0, 6, "abcdefghij", 10, 0, 5);
715     test("abcde", 0, 6, "abcdefghij", 10, 1, 5);
716     test("abcde", 0, 6, "abcdefghij", 11, 0, 0);
717     test("abcde", 0, 6, "abcdefghijklmnopqrst", 0, 0, 5);
718     test("abcde", 0, 6, "abcdefghijklmnopqrst", 0, 1, 4);
719     test("abcde", 0, 6, "abcdefghijklmnopqrst", 0, 10, -5);
720     test("abcde", 0, 6, "abcdefghijklmnopqrst", 0, 19, -14);
721     test("abcde", 0, 6, "abcdefghijklmnopqrst", 0, 20, -15);
722     test("abcde", 0, 6, "abcdefghijklmnopqrst", 0, 21, -15);
723     test("abcde", 0, 6, "abcdefghijklmnopqrst", 1, 0, 5);
724     test("abcde", 0, 6, "abcdefghijklmnopqrst", 1, 1, -1);
725     test("abcde", 0, 6, "abcdefghijklmnopqrst", 1, 9, -1);
726     test("abcde", 0, 6, "abcdefghijklmnopqrst", 1, 18, -1);
727     test("abcde", 0, 6, "abcdefghijklmnopqrst", 1, 19, -1);
728     test("abcde", 0, 6, "abcdefghijklmnopqrst", 1, 20, -1);
729     test("abcde", 0, 6, "abcdefghijklmnopqrst", 10, 0, 5);
730     test("abcde", 0, 6, "abcdefghijklmnopqrst", 10, 1, -10);
731     test("abcde", 0, 6, "abcdefghijklmnopqrst", 10, 5, -10);
732     test("abcde", 0, 6, "abcdefghijklmnopqrst", 10, 9, -10);
733     test("abcde", 0, 6, "abcdefghijklmnopqrst", 10, 10, -10);
734     test("abcde", 0, 6, "abcdefghijklmnopqrst", 10, 11, -10);
735     test("abcde", 0, 6, "abcdefghijklmnopqrst", 19, 0, 5);
736     test("abcde", 0, 6, "abcdefghijklmnopqrst", 19, 1, -19);
737     test("abcde", 0, 6, "abcdefghijklmnopqrst", 19, 2, -19);
738     test("abcde", 0, 6, "abcdefghijklmnopqrst", 20, 0, 5);
739     test("abcde", 0, 6, "abcdefghijklmnopqrst", 20, 1, 5);
740     test("abcde", 0, 6, "abcdefghijklmnopqrst", 21, 0, 0);
741     test("abcde", 1, 0, "", 0, 0, 0);
742     test("abcde", 1, 0, "", 0, 1, 0);
743     test("abcde", 1, 0, "", 1, 0, 0);
744     test("abcde", 1, 0, "abcde", 0, 0, 0);
745     test("abcde", 1, 0, "abcde", 0, 1, -1);
746     test("abcde", 1, 0, "abcde", 0, 2, -2);
747     test("abcde", 1, 0, "abcde", 0, 4, -4);
748     test("abcde", 1, 0, "abcde", 0, 5, -5);
749     test("abcde", 1, 0, "abcde", 0, 6, -5);
750     test("abcde", 1, 0, "abcde", 1, 0, 0);
751     test("abcde", 1, 0, "abcde", 1, 1, -1);
752     test("abcde", 1, 0, "abcde", 1, 2, -2);
753     test("abcde", 1, 0, "abcde", 1, 3, -3);
754     test("abcde", 1, 0, "abcde", 1, 4, -4);
755     test("abcde", 1, 0, "abcde", 1, 5, -4);
756     test("abcde", 1, 0, "abcde", 2, 0, 0);
757     test("abcde", 1, 0, "abcde", 2, 1, -1);
758     test("abcde", 1, 0, "abcde", 2, 2, -2);
759     test("abcde", 1, 0, "abcde", 2, 3, -3);
760     test("abcde", 1, 0, "abcde", 2, 4, -3);
761     test("abcde", 1, 0, "abcde", 4, 0, 0);
762     test("abcde", 1, 0, "abcde", 4, 1, -1);
763     test("abcde", 1, 0, "abcde", 4, 2, -1);
764     test("abcde", 1, 0, "abcde", 5, 0, 0);
765     test("abcde", 1, 0, "abcde", 5, 1, 0);
766     test("abcde", 1, 0, "abcde", 6, 0, 0);
767     test("abcde", 1, 0, "abcdefghij", 0, 0, 0);
768     test("abcde", 1, 0, "abcdefghij", 0, 1, -1);
769     test("abcde", 1, 0, "abcdefghij", 0, 5, -5);
770     test("abcde", 1, 0, "abcdefghij", 0, 9, -9);
771     test("abcde", 1, 0, "abcdefghij", 0, 10, -10);
772     test("abcde", 1, 0, "abcdefghij", 0, 11, -10);
773     test("abcde", 1, 0, "abcdefghij", 1, 0, 0);
774     test("abcde", 1, 0, "abcdefghij", 1, 1, -1);
775 }
776 
test7()777 void test7()
778 {
779     test("abcde", 1, 0, "abcdefghij", 1, 4, -4);
780     test("abcde", 1, 0, "abcdefghij", 1, 8, -8);
781     test("abcde", 1, 0, "abcdefghij", 1, 9, -9);
782     test("abcde", 1, 0, "abcdefghij", 1, 10, -9);
783     test("abcde", 1, 0, "abcdefghij", 5, 0, 0);
784     test("abcde", 1, 0, "abcdefghij", 5, 1, -1);
785     test("abcde", 1, 0, "abcdefghij", 5, 2, -2);
786     test("abcde", 1, 0, "abcdefghij", 5, 4, -4);
787     test("abcde", 1, 0, "abcdefghij", 5, 5, -5);
788     test("abcde", 1, 0, "abcdefghij", 5, 6, -5);
789     test("abcde", 1, 0, "abcdefghij", 9, 0, 0);
790     test("abcde", 1, 0, "abcdefghij", 9, 1, -1);
791     test("abcde", 1, 0, "abcdefghij", 9, 2, -1);
792     test("abcde", 1, 0, "abcdefghij", 10, 0, 0);
793     test("abcde", 1, 0, "abcdefghij", 10, 1, 0);
794     test("abcde", 1, 0, "abcdefghij", 11, 0, 0);
795     test("abcde", 1, 0, "abcdefghijklmnopqrst", 0, 0, 0);
796     test("abcde", 1, 0, "abcdefghijklmnopqrst", 0, 1, -1);
797     test("abcde", 1, 0, "abcdefghijklmnopqrst", 0, 10, -10);
798     test("abcde", 1, 0, "abcdefghijklmnopqrst", 0, 19, -19);
799     test("abcde", 1, 0, "abcdefghijklmnopqrst", 0, 20, -20);
800     test("abcde", 1, 0, "abcdefghijklmnopqrst", 0, 21, -20);
801     test("abcde", 1, 0, "abcdefghijklmnopqrst", 1, 0, 0);
802     test("abcde", 1, 0, "abcdefghijklmnopqrst", 1, 1, -1);
803     test("abcde", 1, 0, "abcdefghijklmnopqrst", 1, 9, -9);
804     test("abcde", 1, 0, "abcdefghijklmnopqrst", 1, 18, -18);
805     test("abcde", 1, 0, "abcdefghijklmnopqrst", 1, 19, -19);
806     test("abcde", 1, 0, "abcdefghijklmnopqrst", 1, 20, -19);
807     test("abcde", 1, 0, "abcdefghijklmnopqrst", 10, 0, 0);
808     test("abcde", 1, 0, "abcdefghijklmnopqrst", 10, 1, -1);
809     test("abcde", 1, 0, "abcdefghijklmnopqrst", 10, 5, -5);
810     test("abcde", 1, 0, "abcdefghijklmnopqrst", 10, 9, -9);
811     test("abcde", 1, 0, "abcdefghijklmnopqrst", 10, 10, -10);
812     test("abcde", 1, 0, "abcdefghijklmnopqrst", 10, 11, -10);
813     test("abcde", 1, 0, "abcdefghijklmnopqrst", 19, 0, 0);
814     test("abcde", 1, 0, "abcdefghijklmnopqrst", 19, 1, -1);
815     test("abcde", 1, 0, "abcdefghijklmnopqrst", 19, 2, -1);
816     test("abcde", 1, 0, "abcdefghijklmnopqrst", 20, 0, 0);
817     test("abcde", 1, 0, "abcdefghijklmnopqrst", 20, 1, 0);
818     test("abcde", 1, 0, "abcdefghijklmnopqrst", 21, 0, 0);
819     test("abcde", 1, 1, "", 0, 0, 1);
820     test("abcde", 1, 1, "", 0, 1, 1);
821     test("abcde", 1, 1, "", 1, 0, 0);
822     test("abcde", 1, 1, "abcde", 0, 0, 1);
823     test("abcde", 1, 1, "abcde", 0, 1, 1);
824     test("abcde", 1, 1, "abcde", 0, 2, 1);
825     test("abcde", 1, 1, "abcde", 0, 4, 1);
826     test("abcde", 1, 1, "abcde", 0, 5, 1);
827     test("abcde", 1, 1, "abcde", 0, 6, 1);
828     test("abcde", 1, 1, "abcde", 1, 0, 1);
829     test("abcde", 1, 1, "abcde", 1, 1, 0);
830     test("abcde", 1, 1, "abcde", 1, 2, -1);
831     test("abcde", 1, 1, "abcde", 1, 3, -2);
832     test("abcde", 1, 1, "abcde", 1, 4, -3);
833     test("abcde", 1, 1, "abcde", 1, 5, -3);
834     test("abcde", 1, 1, "abcde", 2, 0, 1);
835     test("abcde", 1, 1, "abcde", 2, 1, -1);
836     test("abcde", 1, 1, "abcde", 2, 2, -1);
837     test("abcde", 1, 1, "abcde", 2, 3, -1);
838     test("abcde", 1, 1, "abcde", 2, 4, -1);
839     test("abcde", 1, 1, "abcde", 4, 0, 1);
840     test("abcde", 1, 1, "abcde", 4, 1, -3);
841     test("abcde", 1, 1, "abcde", 4, 2, -3);
842     test("abcde", 1, 1, "abcde", 5, 0, 1);
843     test("abcde", 1, 1, "abcde", 5, 1, 1);
844     test("abcde", 1, 1, "abcde", 6, 0, 0);
845     test("abcde", 1, 1, "abcdefghij", 0, 0, 1);
846     test("abcde", 1, 1, "abcdefghij", 0, 1, 1);
847     test("abcde", 1, 1, "abcdefghij", 0, 5, 1);
848     test("abcde", 1, 1, "abcdefghij", 0, 9, 1);
849     test("abcde", 1, 1, "abcdefghij", 0, 10, 1);
850     test("abcde", 1, 1, "abcdefghij", 0, 11, 1);
851     test("abcde", 1, 1, "abcdefghij", 1, 0, 1);
852     test("abcde", 1, 1, "abcdefghij", 1, 1, 0);
853     test("abcde", 1, 1, "abcdefghij", 1, 4, -3);
854     test("abcde", 1, 1, "abcdefghij", 1, 8, -7);
855     test("abcde", 1, 1, "abcdefghij", 1, 9, -8);
856     test("abcde", 1, 1, "abcdefghij", 1, 10, -8);
857     test("abcde", 1, 1, "abcdefghij", 5, 0, 1);
858     test("abcde", 1, 1, "abcdefghij", 5, 1, -4);
859     test("abcde", 1, 1, "abcdefghij", 5, 2, -4);
860     test("abcde", 1, 1, "abcdefghij", 5, 4, -4);
861     test("abcde", 1, 1, "abcdefghij", 5, 5, -4);
862     test("abcde", 1, 1, "abcdefghij", 5, 6, -4);
863     test("abcde", 1, 1, "abcdefghij", 9, 0, 1);
864     test("abcde", 1, 1, "abcdefghij", 9, 1, -8);
865     test("abcde", 1, 1, "abcdefghij", 9, 2, -8);
866     test("abcde", 1, 1, "abcdefghij", 10, 0, 1);
867     test("abcde", 1, 1, "abcdefghij", 10, 1, 1);
868     test("abcde", 1, 1, "abcdefghij", 11, 0, 0);
869     test("abcde", 1, 1, "abcdefghijklmnopqrst", 0, 0, 1);
870     test("abcde", 1, 1, "abcdefghijklmnopqrst", 0, 1, 1);
871     test("abcde", 1, 1, "abcdefghijklmnopqrst", 0, 10, 1);
872     test("abcde", 1, 1, "abcdefghijklmnopqrst", 0, 19, 1);
873     test("abcde", 1, 1, "abcdefghijklmnopqrst", 0, 20, 1);
874     test("abcde", 1, 1, "abcdefghijklmnopqrst", 0, 21, 1);
875     test("abcde", 1, 1, "abcdefghijklmnopqrst", 1, 0, 1);
876     test("abcde", 1, 1, "abcdefghijklmnopqrst", 1, 1, 0);
877     test("abcde", 1, 1, "abcdefghijklmnopqrst", 1, 9, -8);
878     test("abcde", 1, 1, "abcdefghijklmnopqrst", 1, 18, -17);
879 }
880 
test8()881 void test8()
882 {
883     test("abcde", 1, 1, "abcdefghijklmnopqrst", 1, 19, -18);
884     test("abcde", 1, 1, "abcdefghijklmnopqrst", 1, 20, -18);
885     test("abcde", 1, 1, "abcdefghijklmnopqrst", 10, 0, 1);
886     test("abcde", 1, 1, "abcdefghijklmnopqrst", 10, 1, -9);
887     test("abcde", 1, 1, "abcdefghijklmnopqrst", 10, 5, -9);
888     test("abcde", 1, 1, "abcdefghijklmnopqrst", 10, 9, -9);
889     test("abcde", 1, 1, "abcdefghijklmnopqrst", 10, 10, -9);
890     test("abcde", 1, 1, "abcdefghijklmnopqrst", 10, 11, -9);
891     test("abcde", 1, 1, "abcdefghijklmnopqrst", 19, 0, 1);
892     test("abcde", 1, 1, "abcdefghijklmnopqrst", 19, 1, -18);
893     test("abcde", 1, 1, "abcdefghijklmnopqrst", 19, 2, -18);
894     test("abcde", 1, 1, "abcdefghijklmnopqrst", 20, 0, 1);
895     test("abcde", 1, 1, "abcdefghijklmnopqrst", 20, 1, 1);
896     test("abcde", 1, 1, "abcdefghijklmnopqrst", 21, 0, 0);
897     test("abcde", 1, 2, "", 0, 0, 2);
898     test("abcde", 1, 2, "", 0, 1, 2);
899     test("abcde", 1, 2, "", 1, 0, 0);
900     test("abcde", 1, 2, "abcde", 0, 0, 2);
901     test("abcde", 1, 2, "abcde", 0, 1, 1);
902     test("abcde", 1, 2, "abcde", 0, 2, 1);
903     test("abcde", 1, 2, "abcde", 0, 4, 1);
904     test("abcde", 1, 2, "abcde", 0, 5, 1);
905     test("abcde", 1, 2, "abcde", 0, 6, 1);
906     test("abcde", 1, 2, "abcde", 1, 0, 2);
907     test("abcde", 1, 2, "abcde", 1, 1, 1);
908     test("abcde", 1, 2, "abcde", 1, 2, 0);
909     test("abcde", 1, 2, "abcde", 1, 3, -1);
910     test("abcde", 1, 2, "abcde", 1, 4, -2);
911     test("abcde", 1, 2, "abcde", 1, 5, -2);
912     test("abcde", 1, 2, "abcde", 2, 0, 2);
913     test("abcde", 1, 2, "abcde", 2, 1, -1);
914     test("abcde", 1, 2, "abcde", 2, 2, -1);
915     test("abcde", 1, 2, "abcde", 2, 3, -1);
916     test("abcde", 1, 2, "abcde", 2, 4, -1);
917     test("abcde", 1, 2, "abcde", 4, 0, 2);
918     test("abcde", 1, 2, "abcde", 4, 1, -3);
919     test("abcde", 1, 2, "abcde", 4, 2, -3);
920     test("abcde", 1, 2, "abcde", 5, 0, 2);
921     test("abcde", 1, 2, "abcde", 5, 1, 2);
922     test("abcde", 1, 2, "abcde", 6, 0, 0);
923     test("abcde", 1, 2, "abcdefghij", 0, 0, 2);
924     test("abcde", 1, 2, "abcdefghij", 0, 1, 1);
925     test("abcde", 1, 2, "abcdefghij", 0, 5, 1);
926     test("abcde", 1, 2, "abcdefghij", 0, 9, 1);
927     test("abcde", 1, 2, "abcdefghij", 0, 10, 1);
928     test("abcde", 1, 2, "abcdefghij", 0, 11, 1);
929     test("abcde", 1, 2, "abcdefghij", 1, 0, 2);
930     test("abcde", 1, 2, "abcdefghij", 1, 1, 1);
931     test("abcde", 1, 2, "abcdefghij", 1, 4, -2);
932     test("abcde", 1, 2, "abcdefghij", 1, 8, -6);
933     test("abcde", 1, 2, "abcdefghij", 1, 9, -7);
934     test("abcde", 1, 2, "abcdefghij", 1, 10, -7);
935     test("abcde", 1, 2, "abcdefghij", 5, 0, 2);
936     test("abcde", 1, 2, "abcdefghij", 5, 1, -4);
937     test("abcde", 1, 2, "abcdefghij", 5, 2, -4);
938     test("abcde", 1, 2, "abcdefghij", 5, 4, -4);
939     test("abcde", 1, 2, "abcdefghij", 5, 5, -4);
940     test("abcde", 1, 2, "abcdefghij", 5, 6, -4);
941     test("abcde", 1, 2, "abcdefghij", 9, 0, 2);
942     test("abcde", 1, 2, "abcdefghij", 9, 1, -8);
943     test("abcde", 1, 2, "abcdefghij", 9, 2, -8);
944     test("abcde", 1, 2, "abcdefghij", 10, 0, 2);
945     test("abcde", 1, 2, "abcdefghij", 10, 1, 2);
946     test("abcde", 1, 2, "abcdefghij", 11, 0, 0);
947     test("abcde", 1, 2, "abcdefghijklmnopqrst", 0, 0, 2);
948     test("abcde", 1, 2, "abcdefghijklmnopqrst", 0, 1, 1);
949     test("abcde", 1, 2, "abcdefghijklmnopqrst", 0, 10, 1);
950     test("abcde", 1, 2, "abcdefghijklmnopqrst", 0, 19, 1);
951     test("abcde", 1, 2, "abcdefghijklmnopqrst", 0, 20, 1);
952     test("abcde", 1, 2, "abcdefghijklmnopqrst", 0, 21, 1);
953     test("abcde", 1, 2, "abcdefghijklmnopqrst", 1, 0, 2);
954     test("abcde", 1, 2, "abcdefghijklmnopqrst", 1, 1, 1);
955     test("abcde", 1, 2, "abcdefghijklmnopqrst", 1, 9, -7);
956     test("abcde", 1, 2, "abcdefghijklmnopqrst", 1, 18, -16);
957     test("abcde", 1, 2, "abcdefghijklmnopqrst", 1, 19, -17);
958     test("abcde", 1, 2, "abcdefghijklmnopqrst", 1, 20, -17);
959     test("abcde", 1, 2, "abcdefghijklmnopqrst", 10, 0, 2);
960     test("abcde", 1, 2, "abcdefghijklmnopqrst", 10, 1, -9);
961     test("abcde", 1, 2, "abcdefghijklmnopqrst", 10, 5, -9);
962     test("abcde", 1, 2, "abcdefghijklmnopqrst", 10, 9, -9);
963     test("abcde", 1, 2, "abcdefghijklmnopqrst", 10, 10, -9);
964     test("abcde", 1, 2, "abcdefghijklmnopqrst", 10, 11, -9);
965     test("abcde", 1, 2, "abcdefghijklmnopqrst", 19, 0, 2);
966     test("abcde", 1, 2, "abcdefghijklmnopqrst", 19, 1, -18);
967     test("abcde", 1, 2, "abcdefghijklmnopqrst", 19, 2, -18);
968     test("abcde", 1, 2, "abcdefghijklmnopqrst", 20, 0, 2);
969     test("abcde", 1, 2, "abcdefghijklmnopqrst", 20, 1, 2);
970     test("abcde", 1, 2, "abcdefghijklmnopqrst", 21, 0, 0);
971     test("abcde", 1, 3, "", 0, 0, 3);
972     test("abcde", 1, 3, "", 0, 1, 3);
973     test("abcde", 1, 3, "", 1, 0, 0);
974     test("abcde", 1, 3, "abcde", 0, 0, 3);
975     test("abcde", 1, 3, "abcde", 0, 1, 1);
976     test("abcde", 1, 3, "abcde", 0, 2, 1);
977     test("abcde", 1, 3, "abcde", 0, 4, 1);
978     test("abcde", 1, 3, "abcde", 0, 5, 1);
979     test("abcde", 1, 3, "abcde", 0, 6, 1);
980     test("abcde", 1, 3, "abcde", 1, 0, 3);
981     test("abcde", 1, 3, "abcde", 1, 1, 2);
982     test("abcde", 1, 3, "abcde", 1, 2, 1);
983 }
984 
test9()985 void test9()
986 {
987     test("abcde", 1, 3, "abcde", 1, 3, 0);
988     test("abcde", 1, 3, "abcde", 1, 4, -1);
989     test("abcde", 1, 3, "abcde", 1, 5, -1);
990     test("abcde", 1, 3, "abcde", 2, 0, 3);
991     test("abcde", 1, 3, "abcde", 2, 1, -1);
992     test("abcde", 1, 3, "abcde", 2, 2, -1);
993     test("abcde", 1, 3, "abcde", 2, 3, -1);
994     test("abcde", 1, 3, "abcde", 2, 4, -1);
995     test("abcde", 1, 3, "abcde", 4, 0, 3);
996     test("abcde", 1, 3, "abcde", 4, 1, -3);
997     test("abcde", 1, 3, "abcde", 4, 2, -3);
998     test("abcde", 1, 3, "abcde", 5, 0, 3);
999     test("abcde", 1, 3, "abcde", 5, 1, 3);
1000     test("abcde", 1, 3, "abcde", 6, 0, 0);
1001     test("abcde", 1, 3, "abcdefghij", 0, 0, 3);
1002     test("abcde", 1, 3, "abcdefghij", 0, 1, 1);
1003     test("abcde", 1, 3, "abcdefghij", 0, 5, 1);
1004     test("abcde", 1, 3, "abcdefghij", 0, 9, 1);
1005     test("abcde", 1, 3, "abcdefghij", 0, 10, 1);
1006     test("abcde", 1, 3, "abcdefghij", 0, 11, 1);
1007     test("abcde", 1, 3, "abcdefghij", 1, 0, 3);
1008     test("abcde", 1, 3, "abcdefghij", 1, 1, 2);
1009     test("abcde", 1, 3, "abcdefghij", 1, 4, -1);
1010     test("abcde", 1, 3, "abcdefghij", 1, 8, -5);
1011     test("abcde", 1, 3, "abcdefghij", 1, 9, -6);
1012     test("abcde", 1, 3, "abcdefghij", 1, 10, -6);
1013     test("abcde", 1, 3, "abcdefghij", 5, 0, 3);
1014     test("abcde", 1, 3, "abcdefghij", 5, 1, -4);
1015     test("abcde", 1, 3, "abcdefghij", 5, 2, -4);
1016     test("abcde", 1, 3, "abcdefghij", 5, 4, -4);
1017     test("abcde", 1, 3, "abcdefghij", 5, 5, -4);
1018     test("abcde", 1, 3, "abcdefghij", 5, 6, -4);
1019     test("abcde", 1, 3, "abcdefghij", 9, 0, 3);
1020     test("abcde", 1, 3, "abcdefghij", 9, 1, -8);
1021     test("abcde", 1, 3, "abcdefghij", 9, 2, -8);
1022     test("abcde", 1, 3, "abcdefghij", 10, 0, 3);
1023     test("abcde", 1, 3, "abcdefghij", 10, 1, 3);
1024     test("abcde", 1, 3, "abcdefghij", 11, 0, 0);
1025     test("abcde", 1, 3, "abcdefghijklmnopqrst", 0, 0, 3);
1026     test("abcde", 1, 3, "abcdefghijklmnopqrst", 0, 1, 1);
1027     test("abcde", 1, 3, "abcdefghijklmnopqrst", 0, 10, 1);
1028     test("abcde", 1, 3, "abcdefghijklmnopqrst", 0, 19, 1);
1029     test("abcde", 1, 3, "abcdefghijklmnopqrst", 0, 20, 1);
1030     test("abcde", 1, 3, "abcdefghijklmnopqrst", 0, 21, 1);
1031     test("abcde", 1, 3, "abcdefghijklmnopqrst", 1, 0, 3);
1032     test("abcde", 1, 3, "abcdefghijklmnopqrst", 1, 1, 2);
1033     test("abcde", 1, 3, "abcdefghijklmnopqrst", 1, 9, -6);
1034     test("abcde", 1, 3, "abcdefghijklmnopqrst", 1, 18, -15);
1035     test("abcde", 1, 3, "abcdefghijklmnopqrst", 1, 19, -16);
1036     test("abcde", 1, 3, "abcdefghijklmnopqrst", 1, 20, -16);
1037     test("abcde", 1, 3, "abcdefghijklmnopqrst", 10, 0, 3);
1038     test("abcde", 1, 3, "abcdefghijklmnopqrst", 10, 1, -9);
1039     test("abcde", 1, 3, "abcdefghijklmnopqrst", 10, 5, -9);
1040     test("abcde", 1, 3, "abcdefghijklmnopqrst", 10, 9, -9);
1041     test("abcde", 1, 3, "abcdefghijklmnopqrst", 10, 10, -9);
1042     test("abcde", 1, 3, "abcdefghijklmnopqrst", 10, 11, -9);
1043     test("abcde", 1, 3, "abcdefghijklmnopqrst", 19, 0, 3);
1044     test("abcde", 1, 3, "abcdefghijklmnopqrst", 19, 1, -18);
1045     test("abcde", 1, 3, "abcdefghijklmnopqrst", 19, 2, -18);
1046     test("abcde", 1, 3, "abcdefghijklmnopqrst", 20, 0, 3);
1047     test("abcde", 1, 3, "abcdefghijklmnopqrst", 20, 1, 3);
1048     test("abcde", 1, 3, "abcdefghijklmnopqrst", 21, 0, 0);
1049     test("abcde", 1, 4, "", 0, 0, 4);
1050     test("abcde", 1, 4, "", 0, 1, 4);
1051     test("abcde", 1, 4, "", 1, 0, 0);
1052     test("abcde", 1, 4, "abcde", 0, 0, 4);
1053     test("abcde", 1, 4, "abcde", 0, 1, 1);
1054     test("abcde", 1, 4, "abcde", 0, 2, 1);
1055     test("abcde", 1, 4, "abcde", 0, 4, 1);
1056     test("abcde", 1, 4, "abcde", 0, 5, 1);
1057     test("abcde", 1, 4, "abcde", 0, 6, 1);
1058     test("abcde", 1, 4, "abcde", 1, 0, 4);
1059     test("abcde", 1, 4, "abcde", 1, 1, 3);
1060     test("abcde", 1, 4, "abcde", 1, 2, 2);
1061     test("abcde", 1, 4, "abcde", 1, 3, 1);
1062     test("abcde", 1, 4, "abcde", 1, 4, 0);
1063     test("abcde", 1, 4, "abcde", 1, 5, 0);
1064     test("abcde", 1, 4, "abcde", 2, 0, 4);
1065     test("abcde", 1, 4, "abcde", 2, 1, -1);
1066     test("abcde", 1, 4, "abcde", 2, 2, -1);
1067     test("abcde", 1, 4, "abcde", 2, 3, -1);
1068     test("abcde", 1, 4, "abcde", 2, 4, -1);
1069     test("abcde", 1, 4, "abcde", 4, 0, 4);
1070     test("abcde", 1, 4, "abcde", 4, 1, -3);
1071     test("abcde", 1, 4, "abcde", 4, 2, -3);
1072     test("abcde", 1, 4, "abcde", 5, 0, 4);
1073     test("abcde", 1, 4, "abcde", 5, 1, 4);
1074     test("abcde", 1, 4, "abcde", 6, 0, 0);
1075     test("abcde", 1, 4, "abcdefghij", 0, 0, 4);
1076     test("abcde", 1, 4, "abcdefghij", 0, 1, 1);
1077     test("abcde", 1, 4, "abcdefghij", 0, 5, 1);
1078     test("abcde", 1, 4, "abcdefghij", 0, 9, 1);
1079     test("abcde", 1, 4, "abcdefghij", 0, 10, 1);
1080     test("abcde", 1, 4, "abcdefghij", 0, 11, 1);
1081     test("abcde", 1, 4, "abcdefghij", 1, 0, 4);
1082     test("abcde", 1, 4, "abcdefghij", 1, 1, 3);
1083     test("abcde", 1, 4, "abcdefghij", 1, 4, 0);
1084     test("abcde", 1, 4, "abcdefghij", 1, 8, -4);
1085     test("abcde", 1, 4, "abcdefghij", 1, 9, -5);
1086     test("abcde", 1, 4, "abcdefghij", 1, 10, -5);
1087 }
1088 
test10()1089 void test10()
1090 {
1091     test("abcde", 1, 4, "abcdefghij", 5, 0, 4);
1092     test("abcde", 1, 4, "abcdefghij", 5, 1, -4);
1093     test("abcde", 1, 4, "abcdefghij", 5, 2, -4);
1094     test("abcde", 1, 4, "abcdefghij", 5, 4, -4);
1095     test("abcde", 1, 4, "abcdefghij", 5, 5, -4);
1096     test("abcde", 1, 4, "abcdefghij", 5, 6, -4);
1097     test("abcde", 1, 4, "abcdefghij", 9, 0, 4);
1098     test("abcde", 1, 4, "abcdefghij", 9, 1, -8);
1099     test("abcde", 1, 4, "abcdefghij", 9, 2, -8);
1100     test("abcde", 1, 4, "abcdefghij", 10, 0, 4);
1101     test("abcde", 1, 4, "abcdefghij", 10, 1, 4);
1102     test("abcde", 1, 4, "abcdefghij", 11, 0, 0);
1103     test("abcde", 1, 4, "abcdefghijklmnopqrst", 0, 0, 4);
1104     test("abcde", 1, 4, "abcdefghijklmnopqrst", 0, 1, 1);
1105     test("abcde", 1, 4, "abcdefghijklmnopqrst", 0, 10, 1);
1106     test("abcde", 1, 4, "abcdefghijklmnopqrst", 0, 19, 1);
1107     test("abcde", 1, 4, "abcdefghijklmnopqrst", 0, 20, 1);
1108     test("abcde", 1, 4, "abcdefghijklmnopqrst", 0, 21, 1);
1109     test("abcde", 1, 4, "abcdefghijklmnopqrst", 1, 0, 4);
1110     test("abcde", 1, 4, "abcdefghijklmnopqrst", 1, 1, 3);
1111     test("abcde", 1, 4, "abcdefghijklmnopqrst", 1, 9, -5);
1112     test("abcde", 1, 4, "abcdefghijklmnopqrst", 1, 18, -14);
1113     test("abcde", 1, 4, "abcdefghijklmnopqrst", 1, 19, -15);
1114     test("abcde", 1, 4, "abcdefghijklmnopqrst", 1, 20, -15);
1115     test("abcde", 1, 4, "abcdefghijklmnopqrst", 10, 0, 4);
1116     test("abcde", 1, 4, "abcdefghijklmnopqrst", 10, 1, -9);
1117     test("abcde", 1, 4, "abcdefghijklmnopqrst", 10, 5, -9);
1118     test("abcde", 1, 4, "abcdefghijklmnopqrst", 10, 9, -9);
1119     test("abcde", 1, 4, "abcdefghijklmnopqrst", 10, 10, -9);
1120     test("abcde", 1, 4, "abcdefghijklmnopqrst", 10, 11, -9);
1121     test("abcde", 1, 4, "abcdefghijklmnopqrst", 19, 0, 4);
1122     test("abcde", 1, 4, "abcdefghijklmnopqrst", 19, 1, -18);
1123     test("abcde", 1, 4, "abcdefghijklmnopqrst", 19, 2, -18);
1124     test("abcde", 1, 4, "abcdefghijklmnopqrst", 20, 0, 4);
1125     test("abcde", 1, 4, "abcdefghijklmnopqrst", 20, 1, 4);
1126     test("abcde", 1, 4, "abcdefghijklmnopqrst", 21, 0, 0);
1127     test("abcde", 1, 5, "", 0, 0, 4);
1128     test("abcde", 1, 5, "", 0, 1, 4);
1129     test("abcde", 1, 5, "", 1, 0, 0);
1130     test("abcde", 1, 5, "abcde", 0, 0, 4);
1131     test("abcde", 1, 5, "abcde", 0, 1, 1);
1132     test("abcde", 1, 5, "abcde", 0, 2, 1);
1133     test("abcde", 1, 5, "abcde", 0, 4, 1);
1134     test("abcde", 1, 5, "abcde", 0, 5, 1);
1135     test("abcde", 1, 5, "abcde", 0, 6, 1);
1136     test("abcde", 1, 5, "abcde", 1, 0, 4);
1137     test("abcde", 1, 5, "abcde", 1, 1, 3);
1138     test("abcde", 1, 5, "abcde", 1, 2, 2);
1139     test("abcde", 1, 5, "abcde", 1, 3, 1);
1140     test("abcde", 1, 5, "abcde", 1, 4, 0);
1141     test("abcde", 1, 5, "abcde", 1, 5, 0);
1142     test("abcde", 1, 5, "abcde", 2, 0, 4);
1143     test("abcde", 1, 5, "abcde", 2, 1, -1);
1144     test("abcde", 1, 5, "abcde", 2, 2, -1);
1145     test("abcde", 1, 5, "abcde", 2, 3, -1);
1146     test("abcde", 1, 5, "abcde", 2, 4, -1);
1147     test("abcde", 1, 5, "abcde", 4, 0, 4);
1148     test("abcde", 1, 5, "abcde", 4, 1, -3);
1149     test("abcde", 1, 5, "abcde", 4, 2, -3);
1150     test("abcde", 1, 5, "abcde", 5, 0, 4);
1151     test("abcde", 1, 5, "abcde", 5, 1, 4);
1152     test("abcde", 1, 5, "abcde", 6, 0, 0);
1153     test("abcde", 1, 5, "abcdefghij", 0, 0, 4);
1154     test("abcde", 1, 5, "abcdefghij", 0, 1, 1);
1155     test("abcde", 1, 5, "abcdefghij", 0, 5, 1);
1156     test("abcde", 1, 5, "abcdefghij", 0, 9, 1);
1157     test("abcde", 1, 5, "abcdefghij", 0, 10, 1);
1158     test("abcde", 1, 5, "abcdefghij", 0, 11, 1);
1159     test("abcde", 1, 5, "abcdefghij", 1, 0, 4);
1160     test("abcde", 1, 5, "abcdefghij", 1, 1, 3);
1161     test("abcde", 1, 5, "abcdefghij", 1, 4, 0);
1162     test("abcde", 1, 5, "abcdefghij", 1, 8, -4);
1163     test("abcde", 1, 5, "abcdefghij", 1, 9, -5);
1164     test("abcde", 1, 5, "abcdefghij", 1, 10, -5);
1165     test("abcde", 1, 5, "abcdefghij", 5, 0, 4);
1166     test("abcde", 1, 5, "abcdefghij", 5, 1, -4);
1167     test("abcde", 1, 5, "abcdefghij", 5, 2, -4);
1168     test("abcde", 1, 5, "abcdefghij", 5, 4, -4);
1169     test("abcde", 1, 5, "abcdefghij", 5, 5, -4);
1170     test("abcde", 1, 5, "abcdefghij", 5, 6, -4);
1171     test("abcde", 1, 5, "abcdefghij", 9, 0, 4);
1172     test("abcde", 1, 5, "abcdefghij", 9, 1, -8);
1173     test("abcde", 1, 5, "abcdefghij", 9, 2, -8);
1174     test("abcde", 1, 5, "abcdefghij", 10, 0, 4);
1175     test("abcde", 1, 5, "abcdefghij", 10, 1, 4);
1176     test("abcde", 1, 5, "abcdefghij", 11, 0, 0);
1177     test("abcde", 1, 5, "abcdefghijklmnopqrst", 0, 0, 4);
1178     test("abcde", 1, 5, "abcdefghijklmnopqrst", 0, 1, 1);
1179     test("abcde", 1, 5, "abcdefghijklmnopqrst", 0, 10, 1);
1180     test("abcde", 1, 5, "abcdefghijklmnopqrst", 0, 19, 1);
1181     test("abcde", 1, 5, "abcdefghijklmnopqrst", 0, 20, 1);
1182     test("abcde", 1, 5, "abcdefghijklmnopqrst", 0, 21, 1);
1183     test("abcde", 1, 5, "abcdefghijklmnopqrst", 1, 0, 4);
1184     test("abcde", 1, 5, "abcdefghijklmnopqrst", 1, 1, 3);
1185     test("abcde", 1, 5, "abcdefghijklmnopqrst", 1, 9, -5);
1186     test("abcde", 1, 5, "abcdefghijklmnopqrst", 1, 18, -14);
1187     test("abcde", 1, 5, "abcdefghijklmnopqrst", 1, 19, -15);
1188     test("abcde", 1, 5, "abcdefghijklmnopqrst", 1, 20, -15);
1189     test("abcde", 1, 5, "abcdefghijklmnopqrst", 10, 0, 4);
1190     test("abcde", 1, 5, "abcdefghijklmnopqrst", 10, 1, -9);
1191 }
1192 
test11()1193 void test11()
1194 {
1195     test("abcde", 1, 5, "abcdefghijklmnopqrst", 10, 5, -9);
1196     test("abcde", 1, 5, "abcdefghijklmnopqrst", 10, 9, -9);
1197     test("abcde", 1, 5, "abcdefghijklmnopqrst", 10, 10, -9);
1198     test("abcde", 1, 5, "abcdefghijklmnopqrst", 10, 11, -9);
1199     test("abcde", 1, 5, "abcdefghijklmnopqrst", 19, 0, 4);
1200     test("abcde", 1, 5, "abcdefghijklmnopqrst", 19, 1, -18);
1201     test("abcde", 1, 5, "abcdefghijklmnopqrst", 19, 2, -18);
1202     test("abcde", 1, 5, "abcdefghijklmnopqrst", 20, 0, 4);
1203     test("abcde", 1, 5, "abcdefghijklmnopqrst", 20, 1, 4);
1204     test("abcde", 1, 5, "abcdefghijklmnopqrst", 21, 0, 0);
1205     test("abcde", 2, 0, "", 0, 0, 0);
1206     test("abcde", 2, 0, "", 0, 1, 0);
1207     test("abcde", 2, 0, "", 1, 0, 0);
1208     test("abcde", 2, 0, "abcde", 0, 0, 0);
1209     test("abcde", 2, 0, "abcde", 0, 1, -1);
1210     test("abcde", 2, 0, "abcde", 0, 2, -2);
1211     test("abcde", 2, 0, "abcde", 0, 4, -4);
1212     test("abcde", 2, 0, "abcde", 0, 5, -5);
1213     test("abcde", 2, 0, "abcde", 0, 6, -5);
1214     test("abcde", 2, 0, "abcde", 1, 0, 0);
1215     test("abcde", 2, 0, "abcde", 1, 1, -1);
1216     test("abcde", 2, 0, "abcde", 1, 2, -2);
1217     test("abcde", 2, 0, "abcde", 1, 3, -3);
1218     test("abcde", 2, 0, "abcde", 1, 4, -4);
1219     test("abcde", 2, 0, "abcde", 1, 5, -4);
1220     test("abcde", 2, 0, "abcde", 2, 0, 0);
1221     test("abcde", 2, 0, "abcde", 2, 1, -1);
1222     test("abcde", 2, 0, "abcde", 2, 2, -2);
1223     test("abcde", 2, 0, "abcde", 2, 3, -3);
1224     test("abcde", 2, 0, "abcde", 2, 4, -3);
1225     test("abcde", 2, 0, "abcde", 4, 0, 0);
1226     test("abcde", 2, 0, "abcde", 4, 1, -1);
1227     test("abcde", 2, 0, "abcde", 4, 2, -1);
1228     test("abcde", 2, 0, "abcde", 5, 0, 0);
1229     test("abcde", 2, 0, "abcde", 5, 1, 0);
1230     test("abcde", 2, 0, "abcde", 6, 0, 0);
1231     test("abcde", 2, 0, "abcdefghij", 0, 0, 0);
1232     test("abcde", 2, 0, "abcdefghij", 0, 1, -1);
1233     test("abcde", 2, 0, "abcdefghij", 0, 5, -5);
1234     test("abcde", 2, 0, "abcdefghij", 0, 9, -9);
1235     test("abcde", 2, 0, "abcdefghij", 0, 10, -10);
1236     test("abcde", 2, 0, "abcdefghij", 0, 11, -10);
1237     test("abcde", 2, 0, "abcdefghij", 1, 0, 0);
1238     test("abcde", 2, 0, "abcdefghij", 1, 1, -1);
1239     test("abcde", 2, 0, "abcdefghij", 1, 4, -4);
1240     test("abcde", 2, 0, "abcdefghij", 1, 8, -8);
1241     test("abcde", 2, 0, "abcdefghij", 1, 9, -9);
1242     test("abcde", 2, 0, "abcdefghij", 1, 10, -9);
1243     test("abcde", 2, 0, "abcdefghij", 5, 0, 0);
1244     test("abcde", 2, 0, "abcdefghij", 5, 1, -1);
1245     test("abcde", 2, 0, "abcdefghij", 5, 2, -2);
1246     test("abcde", 2, 0, "abcdefghij", 5, 4, -4);
1247     test("abcde", 2, 0, "abcdefghij", 5, 5, -5);
1248     test("abcde", 2, 0, "abcdefghij", 5, 6, -5);
1249     test("abcde", 2, 0, "abcdefghij", 9, 0, 0);
1250     test("abcde", 2, 0, "abcdefghij", 9, 1, -1);
1251     test("abcde", 2, 0, "abcdefghij", 9, 2, -1);
1252     test("abcde", 2, 0, "abcdefghij", 10, 0, 0);
1253     test("abcde", 2, 0, "abcdefghij", 10, 1, 0);
1254     test("abcde", 2, 0, "abcdefghij", 11, 0, 0);
1255     test("abcde", 2, 0, "abcdefghijklmnopqrst", 0, 0, 0);
1256     test("abcde", 2, 0, "abcdefghijklmnopqrst", 0, 1, -1);
1257     test("abcde", 2, 0, "abcdefghijklmnopqrst", 0, 10, -10);
1258     test("abcde", 2, 0, "abcdefghijklmnopqrst", 0, 19, -19);
1259     test("abcde", 2, 0, "abcdefghijklmnopqrst", 0, 20, -20);
1260     test("abcde", 2, 0, "abcdefghijklmnopqrst", 0, 21, -20);
1261     test("abcde", 2, 0, "abcdefghijklmnopqrst", 1, 0, 0);
1262     test("abcde", 2, 0, "abcdefghijklmnopqrst", 1, 1, -1);
1263     test("abcde", 2, 0, "abcdefghijklmnopqrst", 1, 9, -9);
1264     test("abcde", 2, 0, "abcdefghijklmnopqrst", 1, 18, -18);
1265     test("abcde", 2, 0, "abcdefghijklmnopqrst", 1, 19, -19);
1266     test("abcde", 2, 0, "abcdefghijklmnopqrst", 1, 20, -19);
1267     test("abcde", 2, 0, "abcdefghijklmnopqrst", 10, 0, 0);
1268     test("abcde", 2, 0, "abcdefghijklmnopqrst", 10, 1, -1);
1269     test("abcde", 2, 0, "abcdefghijklmnopqrst", 10, 5, -5);
1270     test("abcde", 2, 0, "abcdefghijklmnopqrst", 10, 9, -9);
1271     test("abcde", 2, 0, "abcdefghijklmnopqrst", 10, 10, -10);
1272     test("abcde", 2, 0, "abcdefghijklmnopqrst", 10, 11, -10);
1273     test("abcde", 2, 0, "abcdefghijklmnopqrst", 19, 0, 0);
1274     test("abcde", 2, 0, "abcdefghijklmnopqrst", 19, 1, -1);
1275     test("abcde", 2, 0, "abcdefghijklmnopqrst", 19, 2, -1);
1276     test("abcde", 2, 0, "abcdefghijklmnopqrst", 20, 0, 0);
1277     test("abcde", 2, 0, "abcdefghijklmnopqrst", 20, 1, 0);
1278     test("abcde", 2, 0, "abcdefghijklmnopqrst", 21, 0, 0);
1279     test("abcde", 2, 1, "", 0, 0, 1);
1280     test("abcde", 2, 1, "", 0, 1, 1);
1281     test("abcde", 2, 1, "", 1, 0, 0);
1282     test("abcde", 2, 1, "abcde", 0, 0, 1);
1283     test("abcde", 2, 1, "abcde", 0, 1, 2);
1284     test("abcde", 2, 1, "abcde", 0, 2, 2);
1285     test("abcde", 2, 1, "abcde", 0, 4, 2);
1286     test("abcde", 2, 1, "abcde", 0, 5, 2);
1287     test("abcde", 2, 1, "abcde", 0, 6, 2);
1288     test("abcde", 2, 1, "abcde", 1, 0, 1);
1289     test("abcde", 2, 1, "abcde", 1, 1, 1);
1290     test("abcde", 2, 1, "abcde", 1, 2, 1);
1291     test("abcde", 2, 1, "abcde", 1, 3, 1);
1292     test("abcde", 2, 1, "abcde", 1, 4, 1);
1293     test("abcde", 2, 1, "abcde", 1, 5, 1);
1294     test("abcde", 2, 1, "abcde", 2, 0, 1);
1295 }
1296 
test12()1297 void test12()
1298 {
1299     test("abcde", 2, 1, "abcde", 2, 1, 0);
1300     test("abcde", 2, 1, "abcde", 2, 2, -1);
1301     test("abcde", 2, 1, "abcde", 2, 3, -2);
1302     test("abcde", 2, 1, "abcde", 2, 4, -2);
1303     test("abcde", 2, 1, "abcde", 4, 0, 1);
1304     test("abcde", 2, 1, "abcde", 4, 1, -2);
1305     test("abcde", 2, 1, "abcde", 4, 2, -2);
1306     test("abcde", 2, 1, "abcde", 5, 0, 1);
1307     test("abcde", 2, 1, "abcde", 5, 1, 1);
1308     test("abcde", 2, 1, "abcde", 6, 0, 0);
1309     test("abcde", 2, 1, "abcdefghij", 0, 0, 1);
1310     test("abcde", 2, 1, "abcdefghij", 0, 1, 2);
1311     test("abcde", 2, 1, "abcdefghij", 0, 5, 2);
1312     test("abcde", 2, 1, "abcdefghij", 0, 9, 2);
1313     test("abcde", 2, 1, "abcdefghij", 0, 10, 2);
1314     test("abcde", 2, 1, "abcdefghij", 0, 11, 2);
1315     test("abcde", 2, 1, "abcdefghij", 1, 0, 1);
1316     test("abcde", 2, 1, "abcdefghij", 1, 1, 1);
1317     test("abcde", 2, 1, "abcdefghij", 1, 4, 1);
1318     test("abcde", 2, 1, "abcdefghij", 1, 8, 1);
1319     test("abcde", 2, 1, "abcdefghij", 1, 9, 1);
1320     test("abcde", 2, 1, "abcdefghij", 1, 10, 1);
1321     test("abcde", 2, 1, "abcdefghij", 5, 0, 1);
1322     test("abcde", 2, 1, "abcdefghij", 5, 1, -3);
1323     test("abcde", 2, 1, "abcdefghij", 5, 2, -3);
1324     test("abcde", 2, 1, "abcdefghij", 5, 4, -3);
1325     test("abcde", 2, 1, "abcdefghij", 5, 5, -3);
1326     test("abcde", 2, 1, "abcdefghij", 5, 6, -3);
1327     test("abcde", 2, 1, "abcdefghij", 9, 0, 1);
1328     test("abcde", 2, 1, "abcdefghij", 9, 1, -7);
1329     test("abcde", 2, 1, "abcdefghij", 9, 2, -7);
1330     test("abcde", 2, 1, "abcdefghij", 10, 0, 1);
1331     test("abcde", 2, 1, "abcdefghij", 10, 1, 1);
1332     test("abcde", 2, 1, "abcdefghij", 11, 0, 0);
1333     test("abcde", 2, 1, "abcdefghijklmnopqrst", 0, 0, 1);
1334     test("abcde", 2, 1, "abcdefghijklmnopqrst", 0, 1, 2);
1335     test("abcde", 2, 1, "abcdefghijklmnopqrst", 0, 10, 2);
1336     test("abcde", 2, 1, "abcdefghijklmnopqrst", 0, 19, 2);
1337     test("abcde", 2, 1, "abcdefghijklmnopqrst", 0, 20, 2);
1338     test("abcde", 2, 1, "abcdefghijklmnopqrst", 0, 21, 2);
1339     test("abcde", 2, 1, "abcdefghijklmnopqrst", 1, 0, 1);
1340     test("abcde", 2, 1, "abcdefghijklmnopqrst", 1, 1, 1);
1341     test("abcde", 2, 1, "abcdefghijklmnopqrst", 1, 9, 1);
1342     test("abcde", 2, 1, "abcdefghijklmnopqrst", 1, 18, 1);
1343     test("abcde", 2, 1, "abcdefghijklmnopqrst", 1, 19, 1);
1344     test("abcde", 2, 1, "abcdefghijklmnopqrst", 1, 20, 1);
1345     test("abcde", 2, 1, "abcdefghijklmnopqrst", 10, 0, 1);
1346     test("abcde", 2, 1, "abcdefghijklmnopqrst", 10, 1, -8);
1347     test("abcde", 2, 1, "abcdefghijklmnopqrst", 10, 5, -8);
1348     test("abcde", 2, 1, "abcdefghijklmnopqrst", 10, 9, -8);
1349     test("abcde", 2, 1, "abcdefghijklmnopqrst", 10, 10, -8);
1350     test("abcde", 2, 1, "abcdefghijklmnopqrst", 10, 11, -8);
1351     test("abcde", 2, 1, "abcdefghijklmnopqrst", 19, 0, 1);
1352     test("abcde", 2, 1, "abcdefghijklmnopqrst", 19, 1, -17);
1353     test("abcde", 2, 1, "abcdefghijklmnopqrst", 19, 2, -17);
1354     test("abcde", 2, 1, "abcdefghijklmnopqrst", 20, 0, 1);
1355     test("abcde", 2, 1, "abcdefghijklmnopqrst", 20, 1, 1);
1356     test("abcde", 2, 1, "abcdefghijklmnopqrst", 21, 0, 0);
1357     test("abcde", 2, 2, "", 0, 0, 2);
1358     test("abcde", 2, 2, "", 0, 1, 2);
1359     test("abcde", 2, 2, "", 1, 0, 0);
1360     test("abcde", 2, 2, "abcde", 0, 0, 2);
1361     test("abcde", 2, 2, "abcde", 0, 1, 2);
1362     test("abcde", 2, 2, "abcde", 0, 2, 2);
1363     test("abcde", 2, 2, "abcde", 0, 4, 2);
1364     test("abcde", 2, 2, "abcde", 0, 5, 2);
1365     test("abcde", 2, 2, "abcde", 0, 6, 2);
1366     test("abcde", 2, 2, "abcde", 1, 0, 2);
1367     test("abcde", 2, 2, "abcde", 1, 1, 1);
1368     test("abcde", 2, 2, "abcde", 1, 2, 1);
1369     test("abcde", 2, 2, "abcde", 1, 3, 1);
1370     test("abcde", 2, 2, "abcde", 1, 4, 1);
1371     test("abcde", 2, 2, "abcde", 1, 5, 1);
1372     test("abcde", 2, 2, "abcde", 2, 0, 2);
1373     test("abcde", 2, 2, "abcde", 2, 1, 1);
1374     test("abcde", 2, 2, "abcde", 2, 2, 0);
1375     test("abcde", 2, 2, "abcde", 2, 3, -1);
1376     test("abcde", 2, 2, "abcde", 2, 4, -1);
1377     test("abcde", 2, 2, "abcde", 4, 0, 2);
1378     test("abcde", 2, 2, "abcde", 4, 1, -2);
1379     test("abcde", 2, 2, "abcde", 4, 2, -2);
1380     test("abcde", 2, 2, "abcde", 5, 0, 2);
1381     test("abcde", 2, 2, "abcde", 5, 1, 2);
1382     test("abcde", 2, 2, "abcde", 6, 0, 0);
1383     test("abcde", 2, 2, "abcdefghij", 0, 0, 2);
1384     test("abcde", 2, 2, "abcdefghij", 0, 1, 2);
1385     test("abcde", 2, 2, "abcdefghij", 0, 5, 2);
1386     test("abcde", 2, 2, "abcdefghij", 0, 9, 2);
1387     test("abcde", 2, 2, "abcdefghij", 0, 10, 2);
1388     test("abcde", 2, 2, "abcdefghij", 0, 11, 2);
1389     test("abcde", 2, 2, "abcdefghij", 1, 0, 2);
1390     test("abcde", 2, 2, "abcdefghij", 1, 1, 1);
1391     test("abcde", 2, 2, "abcdefghij", 1, 4, 1);
1392     test("abcde", 2, 2, "abcdefghij", 1, 8, 1);
1393     test("abcde", 2, 2, "abcdefghij", 1, 9, 1);
1394     test("abcde", 2, 2, "abcdefghij", 1, 10, 1);
1395     test("abcde", 2, 2, "abcdefghij", 5, 0, 2);
1396     test("abcde", 2, 2, "abcdefghij", 5, 1, -3);
1397     test("abcde", 2, 2, "abcdefghij", 5, 2, -3);
1398     test("abcde", 2, 2, "abcdefghij", 5, 4, -3);
1399 }
1400 
test13()1401 void test13()
1402 {
1403     test("abcde", 2, 2, "abcdefghij", 5, 5, -3);
1404     test("abcde", 2, 2, "abcdefghij", 5, 6, -3);
1405     test("abcde", 2, 2, "abcdefghij", 9, 0, 2);
1406     test("abcde", 2, 2, "abcdefghij", 9, 1, -7);
1407     test("abcde", 2, 2, "abcdefghij", 9, 2, -7);
1408     test("abcde", 2, 2, "abcdefghij", 10, 0, 2);
1409     test("abcde", 2, 2, "abcdefghij", 10, 1, 2);
1410     test("abcde", 2, 2, "abcdefghij", 11, 0, 0);
1411     test("abcde", 2, 2, "abcdefghijklmnopqrst", 0, 0, 2);
1412     test("abcde", 2, 2, "abcdefghijklmnopqrst", 0, 1, 2);
1413     test("abcde", 2, 2, "abcdefghijklmnopqrst", 0, 10, 2);
1414     test("abcde", 2, 2, "abcdefghijklmnopqrst", 0, 19, 2);
1415     test("abcde", 2, 2, "abcdefghijklmnopqrst", 0, 20, 2);
1416     test("abcde", 2, 2, "abcdefghijklmnopqrst", 0, 21, 2);
1417     test("abcde", 2, 2, "abcdefghijklmnopqrst", 1, 0, 2);
1418     test("abcde", 2, 2, "abcdefghijklmnopqrst", 1, 1, 1);
1419     test("abcde", 2, 2, "abcdefghijklmnopqrst", 1, 9, 1);
1420     test("abcde", 2, 2, "abcdefghijklmnopqrst", 1, 18, 1);
1421     test("abcde", 2, 2, "abcdefghijklmnopqrst", 1, 19, 1);
1422     test("abcde", 2, 2, "abcdefghijklmnopqrst", 1, 20, 1);
1423     test("abcde", 2, 2, "abcdefghijklmnopqrst", 10, 0, 2);
1424     test("abcde", 2, 2, "abcdefghijklmnopqrst", 10, 1, -8);
1425     test("abcde", 2, 2, "abcdefghijklmnopqrst", 10, 5, -8);
1426     test("abcde", 2, 2, "abcdefghijklmnopqrst", 10, 9, -8);
1427     test("abcde", 2, 2, "abcdefghijklmnopqrst", 10, 10, -8);
1428     test("abcde", 2, 2, "abcdefghijklmnopqrst", 10, 11, -8);
1429     test("abcde", 2, 2, "abcdefghijklmnopqrst", 19, 0, 2);
1430     test("abcde", 2, 2, "abcdefghijklmnopqrst", 19, 1, -17);
1431     test("abcde", 2, 2, "abcdefghijklmnopqrst", 19, 2, -17);
1432     test("abcde", 2, 2, "abcdefghijklmnopqrst", 20, 0, 2);
1433     test("abcde", 2, 2, "abcdefghijklmnopqrst", 20, 1, 2);
1434     test("abcde", 2, 2, "abcdefghijklmnopqrst", 21, 0, 0);
1435     test("abcde", 2, 3, "", 0, 0, 3);
1436     test("abcde", 2, 3, "", 0, 1, 3);
1437     test("abcde", 2, 3, "", 1, 0, 0);
1438     test("abcde", 2, 3, "abcde", 0, 0, 3);
1439     test("abcde", 2, 3, "abcde", 0, 1, 2);
1440     test("abcde", 2, 3, "abcde", 0, 2, 2);
1441     test("abcde", 2, 3, "abcde", 0, 4, 2);
1442     test("abcde", 2, 3, "abcde", 0, 5, 2);
1443     test("abcde", 2, 3, "abcde", 0, 6, 2);
1444     test("abcde", 2, 3, "abcde", 1, 0, 3);
1445     test("abcde", 2, 3, "abcde", 1, 1, 1);
1446     test("abcde", 2, 3, "abcde", 1, 2, 1);
1447     test("abcde", 2, 3, "abcde", 1, 3, 1);
1448     test("abcde", 2, 3, "abcde", 1, 4, 1);
1449     test("abcde", 2, 3, "abcde", 1, 5, 1);
1450     test("abcde", 2, 3, "abcde", 2, 0, 3);
1451     test("abcde", 2, 3, "abcde", 2, 1, 2);
1452     test("abcde", 2, 3, "abcde", 2, 2, 1);
1453     test("abcde", 2, 3, "abcde", 2, 3, 0);
1454     test("abcde", 2, 3, "abcde", 2, 4, 0);
1455     test("abcde", 2, 3, "abcde", 4, 0, 3);
1456     test("abcde", 2, 3, "abcde", 4, 1, -2);
1457     test("abcde", 2, 3, "abcde", 4, 2, -2);
1458     test("abcde", 2, 3, "abcde", 5, 0, 3);
1459     test("abcde", 2, 3, "abcde", 5, 1, 3);
1460     test("abcde", 2, 3, "abcde", 6, 0, 0);
1461     test("abcde", 2, 3, "abcdefghij", 0, 0, 3);
1462     test("abcde", 2, 3, "abcdefghij", 0, 1, 2);
1463     test("abcde", 2, 3, "abcdefghij", 0, 5, 2);
1464     test("abcde", 2, 3, "abcdefghij", 0, 9, 2);
1465     test("abcde", 2, 3, "abcdefghij", 0, 10, 2);
1466     test("abcde", 2, 3, "abcdefghij", 0, 11, 2);
1467     test("abcde", 2, 3, "abcdefghij", 1, 0, 3);
1468     test("abcde", 2, 3, "abcdefghij", 1, 1, 1);
1469     test("abcde", 2, 3, "abcdefghij", 1, 4, 1);
1470     test("abcde", 2, 3, "abcdefghij", 1, 8, 1);
1471     test("abcde", 2, 3, "abcdefghij", 1, 9, 1);
1472     test("abcde", 2, 3, "abcdefghij", 1, 10, 1);
1473     test("abcde", 2, 3, "abcdefghij", 5, 0, 3);
1474     test("abcde", 2, 3, "abcdefghij", 5, 1, -3);
1475     test("abcde", 2, 3, "abcdefghij", 5, 2, -3);
1476     test("abcde", 2, 3, "abcdefghij", 5, 4, -3);
1477     test("abcde", 2, 3, "abcdefghij", 5, 5, -3);
1478     test("abcde", 2, 3, "abcdefghij", 5, 6, -3);
1479     test("abcde", 2, 3, "abcdefghij", 9, 0, 3);
1480     test("abcde", 2, 3, "abcdefghij", 9, 1, -7);
1481     test("abcde", 2, 3, "abcdefghij", 9, 2, -7);
1482     test("abcde", 2, 3, "abcdefghij", 10, 0, 3);
1483     test("abcde", 2, 3, "abcdefghij", 10, 1, 3);
1484     test("abcde", 2, 3, "abcdefghij", 11, 0, 0);
1485     test("abcde", 2, 3, "abcdefghijklmnopqrst", 0, 0, 3);
1486     test("abcde", 2, 3, "abcdefghijklmnopqrst", 0, 1, 2);
1487     test("abcde", 2, 3, "abcdefghijklmnopqrst", 0, 10, 2);
1488     test("abcde", 2, 3, "abcdefghijklmnopqrst", 0, 19, 2);
1489     test("abcde", 2, 3, "abcdefghijklmnopqrst", 0, 20, 2);
1490     test("abcde", 2, 3, "abcdefghijklmnopqrst", 0, 21, 2);
1491     test("abcde", 2, 3, "abcdefghijklmnopqrst", 1, 0, 3);
1492     test("abcde", 2, 3, "abcdefghijklmnopqrst", 1, 1, 1);
1493     test("abcde", 2, 3, "abcdefghijklmnopqrst", 1, 9, 1);
1494     test("abcde", 2, 3, "abcdefghijklmnopqrst", 1, 18, 1);
1495     test("abcde", 2, 3, "abcdefghijklmnopqrst", 1, 19, 1);
1496     test("abcde", 2, 3, "abcdefghijklmnopqrst", 1, 20, 1);
1497     test("abcde", 2, 3, "abcdefghijklmnopqrst", 10, 0, 3);
1498     test("abcde", 2, 3, "abcdefghijklmnopqrst", 10, 1, -8);
1499     test("abcde", 2, 3, "abcdefghijklmnopqrst", 10, 5, -8);
1500     test("abcde", 2, 3, "abcdefghijklmnopqrst", 10, 9, -8);
1501     test("abcde", 2, 3, "abcdefghijklmnopqrst", 10, 10, -8);
1502     test("abcde", 2, 3, "abcdefghijklmnopqrst", 10, 11, -8);
1503 }
1504 
test14()1505 void test14()
1506 {
1507     test("abcde", 2, 3, "abcdefghijklmnopqrst", 19, 0, 3);
1508     test("abcde", 2, 3, "abcdefghijklmnopqrst", 19, 1, -17);
1509     test("abcde", 2, 3, "abcdefghijklmnopqrst", 19, 2, -17);
1510     test("abcde", 2, 3, "abcdefghijklmnopqrst", 20, 0, 3);
1511     test("abcde", 2, 3, "abcdefghijklmnopqrst", 20, 1, 3);
1512     test("abcde", 2, 3, "abcdefghijklmnopqrst", 21, 0, 0);
1513     test("abcde", 2, 4, "", 0, 0, 3);
1514     test("abcde", 2, 4, "", 0, 1, 3);
1515     test("abcde", 2, 4, "", 1, 0, 0);
1516     test("abcde", 2, 4, "abcde", 0, 0, 3);
1517     test("abcde", 2, 4, "abcde", 0, 1, 2);
1518     test("abcde", 2, 4, "abcde", 0, 2, 2);
1519     test("abcde", 2, 4, "abcde", 0, 4, 2);
1520     test("abcde", 2, 4, "abcde", 0, 5, 2);
1521     test("abcde", 2, 4, "abcde", 0, 6, 2);
1522     test("abcde", 2, 4, "abcde", 1, 0, 3);
1523     test("abcde", 2, 4, "abcde", 1, 1, 1);
1524     test("abcde", 2, 4, "abcde", 1, 2, 1);
1525     test("abcde", 2, 4, "abcde", 1, 3, 1);
1526     test("abcde", 2, 4, "abcde", 1, 4, 1);
1527     test("abcde", 2, 4, "abcde", 1, 5, 1);
1528     test("abcde", 2, 4, "abcde", 2, 0, 3);
1529     test("abcde", 2, 4, "abcde", 2, 1, 2);
1530     test("abcde", 2, 4, "abcde", 2, 2, 1);
1531     test("abcde", 2, 4, "abcde", 2, 3, 0);
1532     test("abcde", 2, 4, "abcde", 2, 4, 0);
1533     test("abcde", 2, 4, "abcde", 4, 0, 3);
1534     test("abcde", 2, 4, "abcde", 4, 1, -2);
1535     test("abcde", 2, 4, "abcde", 4, 2, -2);
1536     test("abcde", 2, 4, "abcde", 5, 0, 3);
1537     test("abcde", 2, 4, "abcde", 5, 1, 3);
1538     test("abcde", 2, 4, "abcde", 6, 0, 0);
1539     test("abcde", 2, 4, "abcdefghij", 0, 0, 3);
1540     test("abcde", 2, 4, "abcdefghij", 0, 1, 2);
1541     test("abcde", 2, 4, "abcdefghij", 0, 5, 2);
1542     test("abcde", 2, 4, "abcdefghij", 0, 9, 2);
1543     test("abcde", 2, 4, "abcdefghij", 0, 10, 2);
1544     test("abcde", 2, 4, "abcdefghij", 0, 11, 2);
1545     test("abcde", 2, 4, "abcdefghij", 1, 0, 3);
1546     test("abcde", 2, 4, "abcdefghij", 1, 1, 1);
1547     test("abcde", 2, 4, "abcdefghij", 1, 4, 1);
1548     test("abcde", 2, 4, "abcdefghij", 1, 8, 1);
1549     test("abcde", 2, 4, "abcdefghij", 1, 9, 1);
1550     test("abcde", 2, 4, "abcdefghij", 1, 10, 1);
1551     test("abcde", 2, 4, "abcdefghij", 5, 0, 3);
1552     test("abcde", 2, 4, "abcdefghij", 5, 1, -3);
1553     test("abcde", 2, 4, "abcdefghij", 5, 2, -3);
1554     test("abcde", 2, 4, "abcdefghij", 5, 4, -3);
1555     test("abcde", 2, 4, "abcdefghij", 5, 5, -3);
1556     test("abcde", 2, 4, "abcdefghij", 5, 6, -3);
1557     test("abcde", 2, 4, "abcdefghij", 9, 0, 3);
1558     test("abcde", 2, 4, "abcdefghij", 9, 1, -7);
1559     test("abcde", 2, 4, "abcdefghij", 9, 2, -7);
1560     test("abcde", 2, 4, "abcdefghij", 10, 0, 3);
1561     test("abcde", 2, 4, "abcdefghij", 10, 1, 3);
1562     test("abcde", 2, 4, "abcdefghij", 11, 0, 0);
1563     test("abcde", 2, 4, "abcdefghijklmnopqrst", 0, 0, 3);
1564     test("abcde", 2, 4, "abcdefghijklmnopqrst", 0, 1, 2);
1565     test("abcde", 2, 4, "abcdefghijklmnopqrst", 0, 10, 2);
1566     test("abcde", 2, 4, "abcdefghijklmnopqrst", 0, 19, 2);
1567     test("abcde", 2, 4, "abcdefghijklmnopqrst", 0, 20, 2);
1568     test("abcde", 2, 4, "abcdefghijklmnopqrst", 0, 21, 2);
1569     test("abcde", 2, 4, "abcdefghijklmnopqrst", 1, 0, 3);
1570     test("abcde", 2, 4, "abcdefghijklmnopqrst", 1, 1, 1);
1571     test("abcde", 2, 4, "abcdefghijklmnopqrst", 1, 9, 1);
1572     test("abcde", 2, 4, "abcdefghijklmnopqrst", 1, 18, 1);
1573     test("abcde", 2, 4, "abcdefghijklmnopqrst", 1, 19, 1);
1574     test("abcde", 2, 4, "abcdefghijklmnopqrst", 1, 20, 1);
1575     test("abcde", 2, 4, "abcdefghijklmnopqrst", 10, 0, 3);
1576     test("abcde", 2, 4, "abcdefghijklmnopqrst", 10, 1, -8);
1577     test("abcde", 2, 4, "abcdefghijklmnopqrst", 10, 5, -8);
1578     test("abcde", 2, 4, "abcdefghijklmnopqrst", 10, 9, -8);
1579     test("abcde", 2, 4, "abcdefghijklmnopqrst", 10, 10, -8);
1580     test("abcde", 2, 4, "abcdefghijklmnopqrst", 10, 11, -8);
1581     test("abcde", 2, 4, "abcdefghijklmnopqrst", 19, 0, 3);
1582     test("abcde", 2, 4, "abcdefghijklmnopqrst", 19, 1, -17);
1583     test("abcde", 2, 4, "abcdefghijklmnopqrst", 19, 2, -17);
1584     test("abcde", 2, 4, "abcdefghijklmnopqrst", 20, 0, 3);
1585     test("abcde", 2, 4, "abcdefghijklmnopqrst", 20, 1, 3);
1586     test("abcde", 2, 4, "abcdefghijklmnopqrst", 21, 0, 0);
1587     test("abcde", 4, 0, "", 0, 0, 0);
1588     test("abcde", 4, 0, "", 0, 1, 0);
1589     test("abcde", 4, 0, "", 1, 0, 0);
1590     test("abcde", 4, 0, "abcde", 0, 0, 0);
1591     test("abcde", 4, 0, "abcde", 0, 1, -1);
1592     test("abcde", 4, 0, "abcde", 0, 2, -2);
1593     test("abcde", 4, 0, "abcde", 0, 4, -4);
1594     test("abcde", 4, 0, "abcde", 0, 5, -5);
1595     test("abcde", 4, 0, "abcde", 0, 6, -5);
1596     test("abcde", 4, 0, "abcde", 1, 0, 0);
1597     test("abcde", 4, 0, "abcde", 1, 1, -1);
1598     test("abcde", 4, 0, "abcde", 1, 2, -2);
1599     test("abcde", 4, 0, "abcde", 1, 3, -3);
1600     test("abcde", 4, 0, "abcde", 1, 4, -4);
1601     test("abcde", 4, 0, "abcde", 1, 5, -4);
1602     test("abcde", 4, 0, "abcde", 2, 0, 0);
1603     test("abcde", 4, 0, "abcde", 2, 1, -1);
1604     test("abcde", 4, 0, "abcde", 2, 2, -2);
1605     test("abcde", 4, 0, "abcde", 2, 3, -3);
1606     test("abcde", 4, 0, "abcde", 2, 4, -3);
1607 }
1608 
test15()1609 void test15()
1610 {
1611     test("abcde", 4, 0, "abcde", 4, 0, 0);
1612     test("abcde", 4, 0, "abcde", 4, 1, -1);
1613     test("abcde", 4, 0, "abcde", 4, 2, -1);
1614     test("abcde", 4, 0, "abcde", 5, 0, 0);
1615     test("abcde", 4, 0, "abcde", 5, 1, 0);
1616     test("abcde", 4, 0, "abcde", 6, 0, 0);
1617     test("abcde", 4, 0, "abcdefghij", 0, 0, 0);
1618     test("abcde", 4, 0, "abcdefghij", 0, 1, -1);
1619     test("abcde", 4, 0, "abcdefghij", 0, 5, -5);
1620     test("abcde", 4, 0, "abcdefghij", 0, 9, -9);
1621     test("abcde", 4, 0, "abcdefghij", 0, 10, -10);
1622     test("abcde", 4, 0, "abcdefghij", 0, 11, -10);
1623     test("abcde", 4, 0, "abcdefghij", 1, 0, 0);
1624     test("abcde", 4, 0, "abcdefghij", 1, 1, -1);
1625     test("abcde", 4, 0, "abcdefghij", 1, 4, -4);
1626     test("abcde", 4, 0, "abcdefghij", 1, 8, -8);
1627     test("abcde", 4, 0, "abcdefghij", 1, 9, -9);
1628     test("abcde", 4, 0, "abcdefghij", 1, 10, -9);
1629     test("abcde", 4, 0, "abcdefghij", 5, 0, 0);
1630     test("abcde", 4, 0, "abcdefghij", 5, 1, -1);
1631     test("abcde", 4, 0, "abcdefghij", 5, 2, -2);
1632     test("abcde", 4, 0, "abcdefghij", 5, 4, -4);
1633     test("abcde", 4, 0, "abcdefghij", 5, 5, -5);
1634     test("abcde", 4, 0, "abcdefghij", 5, 6, -5);
1635     test("abcde", 4, 0, "abcdefghij", 9, 0, 0);
1636     test("abcde", 4, 0, "abcdefghij", 9, 1, -1);
1637     test("abcde", 4, 0, "abcdefghij", 9, 2, -1);
1638     test("abcde", 4, 0, "abcdefghij", 10, 0, 0);
1639     test("abcde", 4, 0, "abcdefghij", 10, 1, 0);
1640     test("abcde", 4, 0, "abcdefghij", 11, 0, 0);
1641     test("abcde", 4, 0, "abcdefghijklmnopqrst", 0, 0, 0);
1642     test("abcde", 4, 0, "abcdefghijklmnopqrst", 0, 1, -1);
1643     test("abcde", 4, 0, "abcdefghijklmnopqrst", 0, 10, -10);
1644     test("abcde", 4, 0, "abcdefghijklmnopqrst", 0, 19, -19);
1645     test("abcde", 4, 0, "abcdefghijklmnopqrst", 0, 20, -20);
1646     test("abcde", 4, 0, "abcdefghijklmnopqrst", 0, 21, -20);
1647     test("abcde", 4, 0, "abcdefghijklmnopqrst", 1, 0, 0);
1648     test("abcde", 4, 0, "abcdefghijklmnopqrst", 1, 1, -1);
1649     test("abcde", 4, 0, "abcdefghijklmnopqrst", 1, 9, -9);
1650     test("abcde", 4, 0, "abcdefghijklmnopqrst", 1, 18, -18);
1651     test("abcde", 4, 0, "abcdefghijklmnopqrst", 1, 19, -19);
1652     test("abcde", 4, 0, "abcdefghijklmnopqrst", 1, 20, -19);
1653     test("abcde", 4, 0, "abcdefghijklmnopqrst", 10, 0, 0);
1654     test("abcde", 4, 0, "abcdefghijklmnopqrst", 10, 1, -1);
1655     test("abcde", 4, 0, "abcdefghijklmnopqrst", 10, 5, -5);
1656     test("abcde", 4, 0, "abcdefghijklmnopqrst", 10, 9, -9);
1657     test("abcde", 4, 0, "abcdefghijklmnopqrst", 10, 10, -10);
1658     test("abcde", 4, 0, "abcdefghijklmnopqrst", 10, 11, -10);
1659     test("abcde", 4, 0, "abcdefghijklmnopqrst", 19, 0, 0);
1660     test("abcde", 4, 0, "abcdefghijklmnopqrst", 19, 1, -1);
1661     test("abcde", 4, 0, "abcdefghijklmnopqrst", 19, 2, -1);
1662     test("abcde", 4, 0, "abcdefghijklmnopqrst", 20, 0, 0);
1663     test("abcde", 4, 0, "abcdefghijklmnopqrst", 20, 1, 0);
1664     test("abcde", 4, 0, "abcdefghijklmnopqrst", 21, 0, 0);
1665     test("abcde", 4, 1, "", 0, 0, 1);
1666     test("abcde", 4, 1, "", 0, 1, 1);
1667     test("abcde", 4, 1, "", 1, 0, 0);
1668     test("abcde", 4, 1, "abcde", 0, 0, 1);
1669     test("abcde", 4, 1, "abcde", 0, 1, 4);
1670     test("abcde", 4, 1, "abcde", 0, 2, 4);
1671     test("abcde", 4, 1, "abcde", 0, 4, 4);
1672     test("abcde", 4, 1, "abcde", 0, 5, 4);
1673     test("abcde", 4, 1, "abcde", 0, 6, 4);
1674     test("abcde", 4, 1, "abcde", 1, 0, 1);
1675     test("abcde", 4, 1, "abcde", 1, 1, 3);
1676     test("abcde", 4, 1, "abcde", 1, 2, 3);
1677     test("abcde", 4, 1, "abcde", 1, 3, 3);
1678     test("abcde", 4, 1, "abcde", 1, 4, 3);
1679     test("abcde", 4, 1, "abcde", 1, 5, 3);
1680     test("abcde", 4, 1, "abcde", 2, 0, 1);
1681     test("abcde", 4, 1, "abcde", 2, 1, 2);
1682     test("abcde", 4, 1, "abcde", 2, 2, 2);
1683     test("abcde", 4, 1, "abcde", 2, 3, 2);
1684     test("abcde", 4, 1, "abcde", 2, 4, 2);
1685     test("abcde", 4, 1, "abcde", 4, 0, 1);
1686     test("abcde", 4, 1, "abcde", 4, 1, 0);
1687     test("abcde", 4, 1, "abcde", 4, 2, 0);
1688     test("abcde", 4, 1, "abcde", 5, 0, 1);
1689     test("abcde", 4, 1, "abcde", 5, 1, 1);
1690     test("abcde", 4, 1, "abcde", 6, 0, 0);
1691     test("abcde", 4, 1, "abcdefghij", 0, 0, 1);
1692     test("abcde", 4, 1, "abcdefghij", 0, 1, 4);
1693     test("abcde", 4, 1, "abcdefghij", 0, 5, 4);
1694     test("abcde", 4, 1, "abcdefghij", 0, 9, 4);
1695     test("abcde", 4, 1, "abcdefghij", 0, 10, 4);
1696     test("abcde", 4, 1, "abcdefghij", 0, 11, 4);
1697     test("abcde", 4, 1, "abcdefghij", 1, 0, 1);
1698     test("abcde", 4, 1, "abcdefghij", 1, 1, 3);
1699     test("abcde", 4, 1, "abcdefghij", 1, 4, 3);
1700     test("abcde", 4, 1, "abcdefghij", 1, 8, 3);
1701     test("abcde", 4, 1, "abcdefghij", 1, 9, 3);
1702     test("abcde", 4, 1, "abcdefghij", 1, 10, 3);
1703     test("abcde", 4, 1, "abcdefghij", 5, 0, 1);
1704     test("abcde", 4, 1, "abcdefghij", 5, 1, -1);
1705     test("abcde", 4, 1, "abcdefghij", 5, 2, -1);
1706     test("abcde", 4, 1, "abcdefghij", 5, 4, -1);
1707     test("abcde", 4, 1, "abcdefghij", 5, 5, -1);
1708     test("abcde", 4, 1, "abcdefghij", 5, 6, -1);
1709     test("abcde", 4, 1, "abcdefghij", 9, 0, 1);
1710     test("abcde", 4, 1, "abcdefghij", 9, 1, -5);
1711 }
1712 
test16()1713 void test16()
1714 {
1715     test("abcde", 4, 1, "abcdefghij", 9, 2, -5);
1716     test("abcde", 4, 1, "abcdefghij", 10, 0, 1);
1717     test("abcde", 4, 1, "abcdefghij", 10, 1, 1);
1718     test("abcde", 4, 1, "abcdefghij", 11, 0, 0);
1719     test("abcde", 4, 1, "abcdefghijklmnopqrst", 0, 0, 1);
1720     test("abcde", 4, 1, "abcdefghijklmnopqrst", 0, 1, 4);
1721     test("abcde", 4, 1, "abcdefghijklmnopqrst", 0, 10, 4);
1722     test("abcde", 4, 1, "abcdefghijklmnopqrst", 0, 19, 4);
1723     test("abcde", 4, 1, "abcdefghijklmnopqrst", 0, 20, 4);
1724     test("abcde", 4, 1, "abcdefghijklmnopqrst", 0, 21, 4);
1725     test("abcde", 4, 1, "abcdefghijklmnopqrst", 1, 0, 1);
1726     test("abcde", 4, 1, "abcdefghijklmnopqrst", 1, 1, 3);
1727     test("abcde", 4, 1, "abcdefghijklmnopqrst", 1, 9, 3);
1728     test("abcde", 4, 1, "abcdefghijklmnopqrst", 1, 18, 3);
1729     test("abcde", 4, 1, "abcdefghijklmnopqrst", 1, 19, 3);
1730     test("abcde", 4, 1, "abcdefghijklmnopqrst", 1, 20, 3);
1731     test("abcde", 4, 1, "abcdefghijklmnopqrst", 10, 0, 1);
1732     test("abcde", 4, 1, "abcdefghijklmnopqrst", 10, 1, -6);
1733     test("abcde", 4, 1, "abcdefghijklmnopqrst", 10, 5, -6);
1734     test("abcde", 4, 1, "abcdefghijklmnopqrst", 10, 9, -6);
1735     test("abcde", 4, 1, "abcdefghijklmnopqrst", 10, 10, -6);
1736     test("abcde", 4, 1, "abcdefghijklmnopqrst", 10, 11, -6);
1737     test("abcde", 4, 1, "abcdefghijklmnopqrst", 19, 0, 1);
1738     test("abcde", 4, 1, "abcdefghijklmnopqrst", 19, 1, -15);
1739     test("abcde", 4, 1, "abcdefghijklmnopqrst", 19, 2, -15);
1740     test("abcde", 4, 1, "abcdefghijklmnopqrst", 20, 0, 1);
1741     test("abcde", 4, 1, "abcdefghijklmnopqrst", 20, 1, 1);
1742     test("abcde", 4, 1, "abcdefghijklmnopqrst", 21, 0, 0);
1743     test("abcde", 4, 2, "", 0, 0, 1);
1744     test("abcde", 4, 2, "", 0, 1, 1);
1745     test("abcde", 4, 2, "", 1, 0, 0);
1746     test("abcde", 4, 2, "abcde", 0, 0, 1);
1747     test("abcde", 4, 2, "abcde", 0, 1, 4);
1748     test("abcde", 4, 2, "abcde", 0, 2, 4);
1749     test("abcde", 4, 2, "abcde", 0, 4, 4);
1750     test("abcde", 4, 2, "abcde", 0, 5, 4);
1751     test("abcde", 4, 2, "abcde", 0, 6, 4);
1752     test("abcde", 4, 2, "abcde", 1, 0, 1);
1753     test("abcde", 4, 2, "abcde", 1, 1, 3);
1754     test("abcde", 4, 2, "abcde", 1, 2, 3);
1755     test("abcde", 4, 2, "abcde", 1, 3, 3);
1756     test("abcde", 4, 2, "abcde", 1, 4, 3);
1757     test("abcde", 4, 2, "abcde", 1, 5, 3);
1758     test("abcde", 4, 2, "abcde", 2, 0, 1);
1759     test("abcde", 4, 2, "abcde", 2, 1, 2);
1760     test("abcde", 4, 2, "abcde", 2, 2, 2);
1761     test("abcde", 4, 2, "abcde", 2, 3, 2);
1762     test("abcde", 4, 2, "abcde", 2, 4, 2);
1763     test("abcde", 4, 2, "abcde", 4, 0, 1);
1764     test("abcde", 4, 2, "abcde", 4, 1, 0);
1765     test("abcde", 4, 2, "abcde", 4, 2, 0);
1766     test("abcde", 4, 2, "abcde", 5, 0, 1);
1767     test("abcde", 4, 2, "abcde", 5, 1, 1);
1768     test("abcde", 4, 2, "abcde", 6, 0, 0);
1769     test("abcde", 4, 2, "abcdefghij", 0, 0, 1);
1770     test("abcde", 4, 2, "abcdefghij", 0, 1, 4);
1771     test("abcde", 4, 2, "abcdefghij", 0, 5, 4);
1772     test("abcde", 4, 2, "abcdefghij", 0, 9, 4);
1773     test("abcde", 4, 2, "abcdefghij", 0, 10, 4);
1774     test("abcde", 4, 2, "abcdefghij", 0, 11, 4);
1775     test("abcde", 4, 2, "abcdefghij", 1, 0, 1);
1776     test("abcde", 4, 2, "abcdefghij", 1, 1, 3);
1777     test("abcde", 4, 2, "abcdefghij", 1, 4, 3);
1778     test("abcde", 4, 2, "abcdefghij", 1, 8, 3);
1779     test("abcde", 4, 2, "abcdefghij", 1, 9, 3);
1780     test("abcde", 4, 2, "abcdefghij", 1, 10, 3);
1781     test("abcde", 4, 2, "abcdefghij", 5, 0, 1);
1782     test("abcde", 4, 2, "abcdefghij", 5, 1, -1);
1783     test("abcde", 4, 2, "abcdefghij", 5, 2, -1);
1784     test("abcde", 4, 2, "abcdefghij", 5, 4, -1);
1785     test("abcde", 4, 2, "abcdefghij", 5, 5, -1);
1786     test("abcde", 4, 2, "abcdefghij", 5, 6, -1);
1787     test("abcde", 4, 2, "abcdefghij", 9, 0, 1);
1788     test("abcde", 4, 2, "abcdefghij", 9, 1, -5);
1789     test("abcde", 4, 2, "abcdefghij", 9, 2, -5);
1790     test("abcde", 4, 2, "abcdefghij", 10, 0, 1);
1791     test("abcde", 4, 2, "abcdefghij", 10, 1, 1);
1792     test("abcde", 4, 2, "abcdefghij", 11, 0, 0);
1793     test("abcde", 4, 2, "abcdefghijklmnopqrst", 0, 0, 1);
1794     test("abcde", 4, 2, "abcdefghijklmnopqrst", 0, 1, 4);
1795     test("abcde", 4, 2, "abcdefghijklmnopqrst", 0, 10, 4);
1796     test("abcde", 4, 2, "abcdefghijklmnopqrst", 0, 19, 4);
1797     test("abcde", 4, 2, "abcdefghijklmnopqrst", 0, 20, 4);
1798     test("abcde", 4, 2, "abcdefghijklmnopqrst", 0, 21, 4);
1799     test("abcde", 4, 2, "abcdefghijklmnopqrst", 1, 0, 1);
1800     test("abcde", 4, 2, "abcdefghijklmnopqrst", 1, 1, 3);
1801     test("abcde", 4, 2, "abcdefghijklmnopqrst", 1, 9, 3);
1802     test("abcde", 4, 2, "abcdefghijklmnopqrst", 1, 18, 3);
1803     test("abcde", 4, 2, "abcdefghijklmnopqrst", 1, 19, 3);
1804     test("abcde", 4, 2, "abcdefghijklmnopqrst", 1, 20, 3);
1805     test("abcde", 4, 2, "abcdefghijklmnopqrst", 10, 0, 1);
1806     test("abcde", 4, 2, "abcdefghijklmnopqrst", 10, 1, -6);
1807     test("abcde", 4, 2, "abcdefghijklmnopqrst", 10, 5, -6);
1808     test("abcde", 4, 2, "abcdefghijklmnopqrst", 10, 9, -6);
1809     test("abcde", 4, 2, "abcdefghijklmnopqrst", 10, 10, -6);
1810     test("abcde", 4, 2, "abcdefghijklmnopqrst", 10, 11, -6);
1811     test("abcde", 4, 2, "abcdefghijklmnopqrst", 19, 0, 1);
1812     test("abcde", 4, 2, "abcdefghijklmnopqrst", 19, 1, -15);
1813     test("abcde", 4, 2, "abcdefghijklmnopqrst", 19, 2, -15);
1814     test("abcde", 4, 2, "abcdefghijklmnopqrst", 20, 0, 1);
1815 }
1816 
test17()1817 void test17()
1818 {
1819     test("abcde", 4, 2, "abcdefghijklmnopqrst", 20, 1, 1);
1820     test("abcde", 4, 2, "abcdefghijklmnopqrst", 21, 0, 0);
1821     test("abcde", 5, 0, "", 0, 0, 0);
1822     test("abcde", 5, 0, "", 0, 1, 0);
1823     test("abcde", 5, 0, "", 1, 0, 0);
1824     test("abcde", 5, 0, "abcde", 0, 0, 0);
1825     test("abcde", 5, 0, "abcde", 0, 1, -1);
1826     test("abcde", 5, 0, "abcde", 0, 2, -2);
1827     test("abcde", 5, 0, "abcde", 0, 4, -4);
1828     test("abcde", 5, 0, "abcde", 0, 5, -5);
1829     test("abcde", 5, 0, "abcde", 0, 6, -5);
1830     test("abcde", 5, 0, "abcde", 1, 0, 0);
1831     test("abcde", 5, 0, "abcde", 1, 1, -1);
1832     test("abcde", 5, 0, "abcde", 1, 2, -2);
1833     test("abcde", 5, 0, "abcde", 1, 3, -3);
1834     test("abcde", 5, 0, "abcde", 1, 4, -4);
1835     test("abcde", 5, 0, "abcde", 1, 5, -4);
1836     test("abcde", 5, 0, "abcde", 2, 0, 0);
1837     test("abcde", 5, 0, "abcde", 2, 1, -1);
1838     test("abcde", 5, 0, "abcde", 2, 2, -2);
1839     test("abcde", 5, 0, "abcde", 2, 3, -3);
1840     test("abcde", 5, 0, "abcde", 2, 4, -3);
1841     test("abcde", 5, 0, "abcde", 4, 0, 0);
1842     test("abcde", 5, 0, "abcde", 4, 1, -1);
1843     test("abcde", 5, 0, "abcde", 4, 2, -1);
1844     test("abcde", 5, 0, "abcde", 5, 0, 0);
1845     test("abcde", 5, 0, "abcde", 5, 1, 0);
1846     test("abcde", 5, 0, "abcde", 6, 0, 0);
1847     test("abcde", 5, 0, "abcdefghij", 0, 0, 0);
1848     test("abcde", 5, 0, "abcdefghij", 0, 1, -1);
1849     test("abcde", 5, 0, "abcdefghij", 0, 5, -5);
1850     test("abcde", 5, 0, "abcdefghij", 0, 9, -9);
1851     test("abcde", 5, 0, "abcdefghij", 0, 10, -10);
1852     test("abcde", 5, 0, "abcdefghij", 0, 11, -10);
1853     test("abcde", 5, 0, "abcdefghij", 1, 0, 0);
1854     test("abcde", 5, 0, "abcdefghij", 1, 1, -1);
1855     test("abcde", 5, 0, "abcdefghij", 1, 4, -4);
1856     test("abcde", 5, 0, "abcdefghij", 1, 8, -8);
1857     test("abcde", 5, 0, "abcdefghij", 1, 9, -9);
1858     test("abcde", 5, 0, "abcdefghij", 1, 10, -9);
1859     test("abcde", 5, 0, "abcdefghij", 5, 0, 0);
1860     test("abcde", 5, 0, "abcdefghij", 5, 1, -1);
1861     test("abcde", 5, 0, "abcdefghij", 5, 2, -2);
1862     test("abcde", 5, 0, "abcdefghij", 5, 4, -4);
1863     test("abcde", 5, 0, "abcdefghij", 5, 5, -5);
1864     test("abcde", 5, 0, "abcdefghij", 5, 6, -5);
1865     test("abcde", 5, 0, "abcdefghij", 9, 0, 0);
1866     test("abcde", 5, 0, "abcdefghij", 9, 1, -1);
1867     test("abcde", 5, 0, "abcdefghij", 9, 2, -1);
1868     test("abcde", 5, 0, "abcdefghij", 10, 0, 0);
1869     test("abcde", 5, 0, "abcdefghij", 10, 1, 0);
1870     test("abcde", 5, 0, "abcdefghij", 11, 0, 0);
1871     test("abcde", 5, 0, "abcdefghijklmnopqrst", 0, 0, 0);
1872     test("abcde", 5, 0, "abcdefghijklmnopqrst", 0, 1, -1);
1873     test("abcde", 5, 0, "abcdefghijklmnopqrst", 0, 10, -10);
1874     test("abcde", 5, 0, "abcdefghijklmnopqrst", 0, 19, -19);
1875     test("abcde", 5, 0, "abcdefghijklmnopqrst", 0, 20, -20);
1876     test("abcde", 5, 0, "abcdefghijklmnopqrst", 0, 21, -20);
1877     test("abcde", 5, 0, "abcdefghijklmnopqrst", 1, 0, 0);
1878     test("abcde", 5, 0, "abcdefghijklmnopqrst", 1, 1, -1);
1879     test("abcde", 5, 0, "abcdefghijklmnopqrst", 1, 9, -9);
1880     test("abcde", 5, 0, "abcdefghijklmnopqrst", 1, 18, -18);
1881     test("abcde", 5, 0, "abcdefghijklmnopqrst", 1, 19, -19);
1882     test("abcde", 5, 0, "abcdefghijklmnopqrst", 1, 20, -19);
1883     test("abcde", 5, 0, "abcdefghijklmnopqrst", 10, 0, 0);
1884     test("abcde", 5, 0, "abcdefghijklmnopqrst", 10, 1, -1);
1885     test("abcde", 5, 0, "abcdefghijklmnopqrst", 10, 5, -5);
1886     test("abcde", 5, 0, "abcdefghijklmnopqrst", 10, 9, -9);
1887     test("abcde", 5, 0, "abcdefghijklmnopqrst", 10, 10, -10);
1888     test("abcde", 5, 0, "abcdefghijklmnopqrst", 10, 11, -10);
1889     test("abcde", 5, 0, "abcdefghijklmnopqrst", 19, 0, 0);
1890     test("abcde", 5, 0, "abcdefghijklmnopqrst", 19, 1, -1);
1891     test("abcde", 5, 0, "abcdefghijklmnopqrst", 19, 2, -1);
1892     test("abcde", 5, 0, "abcdefghijklmnopqrst", 20, 0, 0);
1893     test("abcde", 5, 0, "abcdefghijklmnopqrst", 20, 1, 0);
1894     test("abcde", 5, 0, "abcdefghijklmnopqrst", 21, 0, 0);
1895     test("abcde", 5, 1, "", 0, 0, 0);
1896     test("abcde", 5, 1, "", 0, 1, 0);
1897     test("abcde", 5, 1, "", 1, 0, 0);
1898     test("abcde", 5, 1, "abcde", 0, 0, 0);
1899     test("abcde", 5, 1, "abcde", 0, 1, -1);
1900     test("abcde", 5, 1, "abcde", 0, 2, -2);
1901     test("abcde", 5, 1, "abcde", 0, 4, -4);
1902     test("abcde", 5, 1, "abcde", 0, 5, -5);
1903     test("abcde", 5, 1, "abcde", 0, 6, -5);
1904     test("abcde", 5, 1, "abcde", 1, 0, 0);
1905     test("abcde", 5, 1, "abcde", 1, 1, -1);
1906     test("abcde", 5, 1, "abcde", 1, 2, -2);
1907     test("abcde", 5, 1, "abcde", 1, 3, -3);
1908     test("abcde", 5, 1, "abcde", 1, 4, -4);
1909     test("abcde", 5, 1, "abcde", 1, 5, -4);
1910     test("abcde", 5, 1, "abcde", 2, 0, 0);
1911     test("abcde", 5, 1, "abcde", 2, 1, -1);
1912     test("abcde", 5, 1, "abcde", 2, 2, -2);
1913     test("abcde", 5, 1, "abcde", 2, 3, -3);
1914     test("abcde", 5, 1, "abcde", 2, 4, -3);
1915     test("abcde", 5, 1, "abcde", 4, 0, 0);
1916     test("abcde", 5, 1, "abcde", 4, 1, -1);
1917     test("abcde", 5, 1, "abcde", 4, 2, -1);
1918     test("abcde", 5, 1, "abcde", 5, 0, 0);
1919 }
1920 
test18()1921 void test18()
1922 {
1923     test("abcde", 5, 1, "abcde", 5, 1, 0);
1924     test("abcde", 5, 1, "abcde", 6, 0, 0);
1925     test("abcde", 5, 1, "abcdefghij", 0, 0, 0);
1926     test("abcde", 5, 1, "abcdefghij", 0, 1, -1);
1927     test("abcde", 5, 1, "abcdefghij", 0, 5, -5);
1928     test("abcde", 5, 1, "abcdefghij", 0, 9, -9);
1929     test("abcde", 5, 1, "abcdefghij", 0, 10, -10);
1930     test("abcde", 5, 1, "abcdefghij", 0, 11, -10);
1931     test("abcde", 5, 1, "abcdefghij", 1, 0, 0);
1932     test("abcde", 5, 1, "abcdefghij", 1, 1, -1);
1933     test("abcde", 5, 1, "abcdefghij", 1, 4, -4);
1934     test("abcde", 5, 1, "abcdefghij", 1, 8, -8);
1935     test("abcde", 5, 1, "abcdefghij", 1, 9, -9);
1936     test("abcde", 5, 1, "abcdefghij", 1, 10, -9);
1937     test("abcde", 5, 1, "abcdefghij", 5, 0, 0);
1938     test("abcde", 5, 1, "abcdefghij", 5, 1, -1);
1939     test("abcde", 5, 1, "abcdefghij", 5, 2, -2);
1940     test("abcde", 5, 1, "abcdefghij", 5, 4, -4);
1941     test("abcde", 5, 1, "abcdefghij", 5, 5, -5);
1942     test("abcde", 5, 1, "abcdefghij", 5, 6, -5);
1943     test("abcde", 5, 1, "abcdefghij", 9, 0, 0);
1944     test("abcde", 5, 1, "abcdefghij", 9, 1, -1);
1945     test("abcde", 5, 1, "abcdefghij", 9, 2, -1);
1946     test("abcde", 5, 1, "abcdefghij", 10, 0, 0);
1947     test("abcde", 5, 1, "abcdefghij", 10, 1, 0);
1948     test("abcde", 5, 1, "abcdefghij", 11, 0, 0);
1949     test("abcde", 5, 1, "abcdefghijklmnopqrst", 0, 0, 0);
1950     test("abcde", 5, 1, "abcdefghijklmnopqrst", 0, 1, -1);
1951     test("abcde", 5, 1, "abcdefghijklmnopqrst", 0, 10, -10);
1952     test("abcde", 5, 1, "abcdefghijklmnopqrst", 0, 19, -19);
1953     test("abcde", 5, 1, "abcdefghijklmnopqrst", 0, 20, -20);
1954     test("abcde", 5, 1, "abcdefghijklmnopqrst", 0, 21, -20);
1955     test("abcde", 5, 1, "abcdefghijklmnopqrst", 1, 0, 0);
1956     test("abcde", 5, 1, "abcdefghijklmnopqrst", 1, 1, -1);
1957     test("abcde", 5, 1, "abcdefghijklmnopqrst", 1, 9, -9);
1958     test("abcde", 5, 1, "abcdefghijklmnopqrst", 1, 18, -18);
1959     test("abcde", 5, 1, "abcdefghijklmnopqrst", 1, 19, -19);
1960     test("abcde", 5, 1, "abcdefghijklmnopqrst", 1, 20, -19);
1961     test("abcde", 5, 1, "abcdefghijklmnopqrst", 10, 0, 0);
1962     test("abcde", 5, 1, "abcdefghijklmnopqrst", 10, 1, -1);
1963     test("abcde", 5, 1, "abcdefghijklmnopqrst", 10, 5, -5);
1964     test("abcde", 5, 1, "abcdefghijklmnopqrst", 10, 9, -9);
1965     test("abcde", 5, 1, "abcdefghijklmnopqrst", 10, 10, -10);
1966     test("abcde", 5, 1, "abcdefghijklmnopqrst", 10, 11, -10);
1967     test("abcde", 5, 1, "abcdefghijklmnopqrst", 19, 0, 0);
1968     test("abcde", 5, 1, "abcdefghijklmnopqrst", 19, 1, -1);
1969     test("abcde", 5, 1, "abcdefghijklmnopqrst", 19, 2, -1);
1970     test("abcde", 5, 1, "abcdefghijklmnopqrst", 20, 0, 0);
1971     test("abcde", 5, 1, "abcdefghijklmnopqrst", 20, 1, 0);
1972     test("abcde", 5, 1, "abcdefghijklmnopqrst", 21, 0, 0);
1973     test("abcde", 6, 0, "", 0, 0, 0);
1974     test("abcde", 6, 0, "", 0, 1, 0);
1975     test("abcde", 6, 0, "", 1, 0, 0);
1976     test("abcde", 6, 0, "abcde", 0, 0, 0);
1977     test("abcde", 6, 0, "abcde", 0, 1, 0);
1978     test("abcde", 6, 0, "abcde", 0, 2, 0);
1979     test("abcde", 6, 0, "abcde", 0, 4, 0);
1980     test("abcde", 6, 0, "abcde", 0, 5, 0);
1981     test("abcde", 6, 0, "abcde", 0, 6, 0);
1982     test("abcde", 6, 0, "abcde", 1, 0, 0);
1983     test("abcde", 6, 0, "abcde", 1, 1, 0);
1984     test("abcde", 6, 0, "abcde", 1, 2, 0);
1985     test("abcde", 6, 0, "abcde", 1, 3, 0);
1986     test("abcde", 6, 0, "abcde", 1, 4, 0);
1987     test("abcde", 6, 0, "abcde", 1, 5, 0);
1988     test("abcde", 6, 0, "abcde", 2, 0, 0);
1989     test("abcde", 6, 0, "abcde", 2, 1, 0);
1990     test("abcde", 6, 0, "abcde", 2, 2, 0);
1991     test("abcde", 6, 0, "abcde", 2, 3, 0);
1992     test("abcde", 6, 0, "abcde", 2, 4, 0);
1993     test("abcde", 6, 0, "abcde", 4, 0, 0);
1994     test("abcde", 6, 0, "abcde", 4, 1, 0);
1995     test("abcde", 6, 0, "abcde", 4, 2, 0);
1996     test("abcde", 6, 0, "abcde", 5, 0, 0);
1997     test("abcde", 6, 0, "abcde", 5, 1, 0);
1998     test("abcde", 6, 0, "abcde", 6, 0, 0);
1999     test("abcde", 6, 0, "abcdefghij", 0, 0, 0);
2000     test("abcde", 6, 0, "abcdefghij", 0, 1, 0);
2001     test("abcde", 6, 0, "abcdefghij", 0, 5, 0);
2002     test("abcde", 6, 0, "abcdefghij", 0, 9, 0);
2003     test("abcde", 6, 0, "abcdefghij", 0, 10, 0);
2004     test("abcde", 6, 0, "abcdefghij", 0, 11, 0);
2005     test("abcde", 6, 0, "abcdefghij", 1, 0, 0);
2006     test("abcde", 6, 0, "abcdefghij", 1, 1, 0);
2007     test("abcde", 6, 0, "abcdefghij", 1, 4, 0);
2008     test("abcde", 6, 0, "abcdefghij", 1, 8, 0);
2009     test("abcde", 6, 0, "abcdefghij", 1, 9, 0);
2010     test("abcde", 6, 0, "abcdefghij", 1, 10, 0);
2011     test("abcde", 6, 0, "abcdefghij", 5, 0, 0);
2012     test("abcde", 6, 0, "abcdefghij", 5, 1, 0);
2013     test("abcde", 6, 0, "abcdefghij", 5, 2, 0);
2014     test("abcde", 6, 0, "abcdefghij", 5, 4, 0);
2015     test("abcde", 6, 0, "abcdefghij", 5, 5, 0);
2016     test("abcde", 6, 0, "abcdefghij", 5, 6, 0);
2017     test("abcde", 6, 0, "abcdefghij", 9, 0, 0);
2018     test("abcde", 6, 0, "abcdefghij", 9, 1, 0);
2019     test("abcde", 6, 0, "abcdefghij", 9, 2, 0);
2020     test("abcde", 6, 0, "abcdefghij", 10, 0, 0);
2021     test("abcde", 6, 0, "abcdefghij", 10, 1, 0);
2022     test("abcde", 6, 0, "abcdefghij", 11, 0, 0);
2023 }
2024 
test19()2025 void test19()
2026 {
2027     test("abcde", 6, 0, "abcdefghijklmnopqrst", 0, 0, 0);
2028     test("abcde", 6, 0, "abcdefghijklmnopqrst", 0, 1, 0);
2029     test("abcde", 6, 0, "abcdefghijklmnopqrst", 0, 10, 0);
2030     test("abcde", 6, 0, "abcdefghijklmnopqrst", 0, 19, 0);
2031     test("abcde", 6, 0, "abcdefghijklmnopqrst", 0, 20, 0);
2032     test("abcde", 6, 0, "abcdefghijklmnopqrst", 0, 21, 0);
2033     test("abcde", 6, 0, "abcdefghijklmnopqrst", 1, 0, 0);
2034     test("abcde", 6, 0, "abcdefghijklmnopqrst", 1, 1, 0);
2035     test("abcde", 6, 0, "abcdefghijklmnopqrst", 1, 9, 0);
2036     test("abcde", 6, 0, "abcdefghijklmnopqrst", 1, 18, 0);
2037     test("abcde", 6, 0, "abcdefghijklmnopqrst", 1, 19, 0);
2038     test("abcde", 6, 0, "abcdefghijklmnopqrst", 1, 20, 0);
2039     test("abcde", 6, 0, "abcdefghijklmnopqrst", 10, 0, 0);
2040     test("abcde", 6, 0, "abcdefghijklmnopqrst", 10, 1, 0);
2041     test("abcde", 6, 0, "abcdefghijklmnopqrst", 10, 5, 0);
2042     test("abcde", 6, 0, "abcdefghijklmnopqrst", 10, 9, 0);
2043     test("abcde", 6, 0, "abcdefghijklmnopqrst", 10, 10, 0);
2044     test("abcde", 6, 0, "abcdefghijklmnopqrst", 10, 11, 0);
2045     test("abcde", 6, 0, "abcdefghijklmnopqrst", 19, 0, 0);
2046     test("abcde", 6, 0, "abcdefghijklmnopqrst", 19, 1, 0);
2047     test("abcde", 6, 0, "abcdefghijklmnopqrst", 19, 2, 0);
2048     test("abcde", 6, 0, "abcdefghijklmnopqrst", 20, 0, 0);
2049     test("abcde", 6, 0, "abcdefghijklmnopqrst", 20, 1, 0);
2050     test("abcde", 6, 0, "abcdefghijklmnopqrst", 21, 0, 0);
2051     test("abcdefghij", 0, 0, "", 0, 0, 0);
2052     test("abcdefghij", 0, 0, "", 0, 1, 0);
2053     test("abcdefghij", 0, 0, "", 1, 0, 0);
2054     test("abcdefghij", 0, 0, "abcde", 0, 0, 0);
2055     test("abcdefghij", 0, 0, "abcde", 0, 1, -1);
2056     test("abcdefghij", 0, 0, "abcde", 0, 2, -2);
2057     test("abcdefghij", 0, 0, "abcde", 0, 4, -4);
2058     test("abcdefghij", 0, 0, "abcde", 0, 5, -5);
2059     test("abcdefghij", 0, 0, "abcde", 0, 6, -5);
2060     test("abcdefghij", 0, 0, "abcde", 1, 0, 0);
2061     test("abcdefghij", 0, 0, "abcde", 1, 1, -1);
2062     test("abcdefghij", 0, 0, "abcde", 1, 2, -2);
2063     test("abcdefghij", 0, 0, "abcde", 1, 3, -3);
2064     test("abcdefghij", 0, 0, "abcde", 1, 4, -4);
2065     test("abcdefghij", 0, 0, "abcde", 1, 5, -4);
2066     test("abcdefghij", 0, 0, "abcde", 2, 0, 0);
2067     test("abcdefghij", 0, 0, "abcde", 2, 1, -1);
2068     test("abcdefghij", 0, 0, "abcde", 2, 2, -2);
2069     test("abcdefghij", 0, 0, "abcde", 2, 3, -3);
2070     test("abcdefghij", 0, 0, "abcde", 2, 4, -3);
2071     test("abcdefghij", 0, 0, "abcde", 4, 0, 0);
2072     test("abcdefghij", 0, 0, "abcde", 4, 1, -1);
2073     test("abcdefghij", 0, 0, "abcde", 4, 2, -1);
2074     test("abcdefghij", 0, 0, "abcde", 5, 0, 0);
2075     test("abcdefghij", 0, 0, "abcde", 5, 1, 0);
2076     test("abcdefghij", 0, 0, "abcde", 6, 0, 0);
2077     test("abcdefghij", 0, 0, "abcdefghij", 0, 0, 0);
2078     test("abcdefghij", 0, 0, "abcdefghij", 0, 1, -1);
2079     test("abcdefghij", 0, 0, "abcdefghij", 0, 5, -5);
2080     test("abcdefghij", 0, 0, "abcdefghij", 0, 9, -9);
2081     test("abcdefghij", 0, 0, "abcdefghij", 0, 10, -10);
2082     test("abcdefghij", 0, 0, "abcdefghij", 0, 11, -10);
2083     test("abcdefghij", 0, 0, "abcdefghij", 1, 0, 0);
2084     test("abcdefghij", 0, 0, "abcdefghij", 1, 1, -1);
2085     test("abcdefghij", 0, 0, "abcdefghij", 1, 4, -4);
2086     test("abcdefghij", 0, 0, "abcdefghij", 1, 8, -8);
2087     test("abcdefghij", 0, 0, "abcdefghij", 1, 9, -9);
2088     test("abcdefghij", 0, 0, "abcdefghij", 1, 10, -9);
2089     test("abcdefghij", 0, 0, "abcdefghij", 5, 0, 0);
2090     test("abcdefghij", 0, 0, "abcdefghij", 5, 1, -1);
2091     test("abcdefghij", 0, 0, "abcdefghij", 5, 2, -2);
2092     test("abcdefghij", 0, 0, "abcdefghij", 5, 4, -4);
2093     test("abcdefghij", 0, 0, "abcdefghij", 5, 5, -5);
2094     test("abcdefghij", 0, 0, "abcdefghij", 5, 6, -5);
2095     test("abcdefghij", 0, 0, "abcdefghij", 9, 0, 0);
2096     test("abcdefghij", 0, 0, "abcdefghij", 9, 1, -1);
2097     test("abcdefghij", 0, 0, "abcdefghij", 9, 2, -1);
2098     test("abcdefghij", 0, 0, "abcdefghij", 10, 0, 0);
2099     test("abcdefghij", 0, 0, "abcdefghij", 10, 1, 0);
2100     test("abcdefghij", 0, 0, "abcdefghij", 11, 0, 0);
2101     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 0, 0, 0);
2102     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 0, 1, -1);
2103     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 0, 10, -10);
2104     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 0, 19, -19);
2105     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 0, 20, -20);
2106     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 0, 21, -20);
2107     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 1, 0, 0);
2108     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 1, 1, -1);
2109     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 1, 9, -9);
2110     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 1, 18, -18);
2111     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 1, 19, -19);
2112     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 1, 20, -19);
2113     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 10, 0, 0);
2114     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 10, 1, -1);
2115     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 10, 5, -5);
2116     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 10, 9, -9);
2117     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 10, 10, -10);
2118     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 10, 11, -10);
2119     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 19, 0, 0);
2120     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 19, 1, -1);
2121     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 19, 2, -1);
2122     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 20, 0, 0);
2123     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 20, 1, 0);
2124     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 21, 0, 0);
2125     test("abcdefghij", 0, 1, "", 0, 0, 1);
2126     test("abcdefghij", 0, 1, "", 0, 1, 1);
2127 }
2128 
test20()2129 void test20()
2130 {
2131     test("abcdefghij", 0, 1, "", 1, 0, 0);
2132     test("abcdefghij", 0, 1, "abcde", 0, 0, 1);
2133     test("abcdefghij", 0, 1, "abcde", 0, 1, 0);
2134     test("abcdefghij", 0, 1, "abcde", 0, 2, -1);
2135     test("abcdefghij", 0, 1, "abcde", 0, 4, -3);
2136     test("abcdefghij", 0, 1, "abcde", 0, 5, -4);
2137     test("abcdefghij", 0, 1, "abcde", 0, 6, -4);
2138     test("abcdefghij", 0, 1, "abcde", 1, 0, 1);
2139     test("abcdefghij", 0, 1, "abcde", 1, 1, -1);
2140     test("abcdefghij", 0, 1, "abcde", 1, 2, -1);
2141     test("abcdefghij", 0, 1, "abcde", 1, 3, -1);
2142     test("abcdefghij", 0, 1, "abcde", 1, 4, -1);
2143     test("abcdefghij", 0, 1, "abcde", 1, 5, -1);
2144     test("abcdefghij", 0, 1, "abcde", 2, 0, 1);
2145     test("abcdefghij", 0, 1, "abcde", 2, 1, -2);
2146     test("abcdefghij", 0, 1, "abcde", 2, 2, -2);
2147     test("abcdefghij", 0, 1, "abcde", 2, 3, -2);
2148     test("abcdefghij", 0, 1, "abcde", 2, 4, -2);
2149     test("abcdefghij", 0, 1, "abcde", 4, 0, 1);
2150     test("abcdefghij", 0, 1, "abcde", 4, 1, -4);
2151     test("abcdefghij", 0, 1, "abcde", 4, 2, -4);
2152     test("abcdefghij", 0, 1, "abcde", 5, 0, 1);
2153     test("abcdefghij", 0, 1, "abcde", 5, 1, 1);
2154     test("abcdefghij", 0, 1, "abcde", 6, 0, 0);
2155     test("abcdefghij", 0, 1, "abcdefghij", 0, 0, 1);
2156     test("abcdefghij", 0, 1, "abcdefghij", 0, 1, 0);
2157     test("abcdefghij", 0, 1, "abcdefghij", 0, 5, -4);
2158     test("abcdefghij", 0, 1, "abcdefghij", 0, 9, -8);
2159     test("abcdefghij", 0, 1, "abcdefghij", 0, 10, -9);
2160     test("abcdefghij", 0, 1, "abcdefghij", 0, 11, -9);
2161     test("abcdefghij", 0, 1, "abcdefghij", 1, 0, 1);
2162     test("abcdefghij", 0, 1, "abcdefghij", 1, 1, -1);
2163     test("abcdefghij", 0, 1, "abcdefghij", 1, 4, -1);
2164     test("abcdefghij", 0, 1, "abcdefghij", 1, 8, -1);
2165     test("abcdefghij", 0, 1, "abcdefghij", 1, 9, -1);
2166     test("abcdefghij", 0, 1, "abcdefghij", 1, 10, -1);
2167     test("abcdefghij", 0, 1, "abcdefghij", 5, 0, 1);
2168     test("abcdefghij", 0, 1, "abcdefghij", 5, 1, -5);
2169     test("abcdefghij", 0, 1, "abcdefghij", 5, 2, -5);
2170     test("abcdefghij", 0, 1, "abcdefghij", 5, 4, -5);
2171     test("abcdefghij", 0, 1, "abcdefghij", 5, 5, -5);
2172     test("abcdefghij", 0, 1, "abcdefghij", 5, 6, -5);
2173     test("abcdefghij", 0, 1, "abcdefghij", 9, 0, 1);
2174     test("abcdefghij", 0, 1, "abcdefghij", 9, 1, -9);
2175     test("abcdefghij", 0, 1, "abcdefghij", 9, 2, -9);
2176     test("abcdefghij", 0, 1, "abcdefghij", 10, 0, 1);
2177     test("abcdefghij", 0, 1, "abcdefghij", 10, 1, 1);
2178     test("abcdefghij", 0, 1, "abcdefghij", 11, 0, 0);
2179     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 0, 0, 1);
2180     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 0, 1, 0);
2181     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 0, 10, -9);
2182     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 0, 19, -18);
2183     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 0, 20, -19);
2184     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 0, 21, -19);
2185     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 1, 0, 1);
2186     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 1, 1, -1);
2187     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 1, 9, -1);
2188     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 1, 18, -1);
2189     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 1, 19, -1);
2190     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 1, 20, -1);
2191     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 10, 0, 1);
2192     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 10, 1, -10);
2193     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 10, 5, -10);
2194     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 10, 9, -10);
2195     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 10, 10, -10);
2196     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 10, 11, -10);
2197     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 19, 0, 1);
2198     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 19, 1, -19);
2199     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 19, 2, -19);
2200     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 20, 0, 1);
2201     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 20, 1, 1);
2202     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 21, 0, 0);
2203     test("abcdefghij", 0, 5, "", 0, 0, 5);
2204     test("abcdefghij", 0, 5, "", 0, 1, 5);
2205     test("abcdefghij", 0, 5, "", 1, 0, 0);
2206     test("abcdefghij", 0, 5, "abcde", 0, 0, 5);
2207     test("abcdefghij", 0, 5, "abcde", 0, 1, 4);
2208     test("abcdefghij", 0, 5, "abcde", 0, 2, 3);
2209     test("abcdefghij", 0, 5, "abcde", 0, 4, 1);
2210     test("abcdefghij", 0, 5, "abcde", 0, 5, 0);
2211     test("abcdefghij", 0, 5, "abcde", 0, 6, 0);
2212     test("abcdefghij", 0, 5, "abcde", 1, 0, 5);
2213     test("abcdefghij", 0, 5, "abcde", 1, 1, -1);
2214     test("abcdefghij", 0, 5, "abcde", 1, 2, -1);
2215     test("abcdefghij", 0, 5, "abcde", 1, 3, -1);
2216     test("abcdefghij", 0, 5, "abcde", 1, 4, -1);
2217     test("abcdefghij", 0, 5, "abcde", 1, 5, -1);
2218     test("abcdefghij", 0, 5, "abcde", 2, 0, 5);
2219     test("abcdefghij", 0, 5, "abcde", 2, 1, -2);
2220     test("abcdefghij", 0, 5, "abcde", 2, 2, -2);
2221     test("abcdefghij", 0, 5, "abcde", 2, 3, -2);
2222     test("abcdefghij", 0, 5, "abcde", 2, 4, -2);
2223     test("abcdefghij", 0, 5, "abcde", 4, 0, 5);
2224     test("abcdefghij", 0, 5, "abcde", 4, 1, -4);
2225     test("abcdefghij", 0, 5, "abcde", 4, 2, -4);
2226     test("abcdefghij", 0, 5, "abcde", 5, 0, 5);
2227     test("abcdefghij", 0, 5, "abcde", 5, 1, 5);
2228     test("abcdefghij", 0, 5, "abcde", 6, 0, 0);
2229     test("abcdefghij", 0, 5, "abcdefghij", 0, 0, 5);
2230     test("abcdefghij", 0, 5, "abcdefghij", 0, 1, 4);
2231 }
2232 
test21()2233 void test21()
2234 {
2235     test("abcdefghij", 0, 5, "abcdefghij", 0, 5, 0);
2236     test("abcdefghij", 0, 5, "abcdefghij", 0, 9, -4);
2237     test("abcdefghij", 0, 5, "abcdefghij", 0, 10, -5);
2238     test("abcdefghij", 0, 5, "abcdefghij", 0, 11, -5);
2239     test("abcdefghij", 0, 5, "abcdefghij", 1, 0, 5);
2240     test("abcdefghij", 0, 5, "abcdefghij", 1, 1, -1);
2241     test("abcdefghij", 0, 5, "abcdefghij", 1, 4, -1);
2242     test("abcdefghij", 0, 5, "abcdefghij", 1, 8, -1);
2243     test("abcdefghij", 0, 5, "abcdefghij", 1, 9, -1);
2244     test("abcdefghij", 0, 5, "abcdefghij", 1, 10, -1);
2245     test("abcdefghij", 0, 5, "abcdefghij", 5, 0, 5);
2246     test("abcdefghij", 0, 5, "abcdefghij", 5, 1, -5);
2247     test("abcdefghij", 0, 5, "abcdefghij", 5, 2, -5);
2248     test("abcdefghij", 0, 5, "abcdefghij", 5, 4, -5);
2249     test("abcdefghij", 0, 5, "abcdefghij", 5, 5, -5);
2250     test("abcdefghij", 0, 5, "abcdefghij", 5, 6, -5);
2251     test("abcdefghij", 0, 5, "abcdefghij", 9, 0, 5);
2252     test("abcdefghij", 0, 5, "abcdefghij", 9, 1, -9);
2253     test("abcdefghij", 0, 5, "abcdefghij", 9, 2, -9);
2254     test("abcdefghij", 0, 5, "abcdefghij", 10, 0, 5);
2255     test("abcdefghij", 0, 5, "abcdefghij", 10, 1, 5);
2256     test("abcdefghij", 0, 5, "abcdefghij", 11, 0, 0);
2257     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 0, 0, 5);
2258     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 0, 1, 4);
2259     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 0, 10, -5);
2260     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 0, 19, -14);
2261     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 0, 20, -15);
2262     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 0, 21, -15);
2263     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 1, 0, 5);
2264     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 1, 1, -1);
2265     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 1, 9, -1);
2266     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 1, 18, -1);
2267     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 1, 19, -1);
2268     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 1, 20, -1);
2269     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 10, 0, 5);
2270     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 10, 1, -10);
2271     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 10, 5, -10);
2272     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 10, 9, -10);
2273     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 10, 10, -10);
2274     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 10, 11, -10);
2275     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 19, 0, 5);
2276     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 19, 1, -19);
2277     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 19, 2, -19);
2278     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 20, 0, 5);
2279     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 20, 1, 5);
2280     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 21, 0, 0);
2281     test("abcdefghij", 0, 9, "", 0, 0, 9);
2282     test("abcdefghij", 0, 9, "", 0, 1, 9);
2283     test("abcdefghij", 0, 9, "", 1, 0, 0);
2284     test("abcdefghij", 0, 9, "abcde", 0, 0, 9);
2285     test("abcdefghij", 0, 9, "abcde", 0, 1, 8);
2286     test("abcdefghij", 0, 9, "abcde", 0, 2, 7);
2287     test("abcdefghij", 0, 9, "abcde", 0, 4, 5);
2288     test("abcdefghij", 0, 9, "abcde", 0, 5, 4);
2289     test("abcdefghij", 0, 9, "abcde", 0, 6, 4);
2290     test("abcdefghij", 0, 9, "abcde", 1, 0, 9);
2291     test("abcdefghij", 0, 9, "abcde", 1, 1, -1);
2292     test("abcdefghij", 0, 9, "abcde", 1, 2, -1);
2293     test("abcdefghij", 0, 9, "abcde", 1, 3, -1);
2294     test("abcdefghij", 0, 9, "abcde", 1, 4, -1);
2295     test("abcdefghij", 0, 9, "abcde", 1, 5, -1);
2296     test("abcdefghij", 0, 9, "abcde", 2, 0, 9);
2297     test("abcdefghij", 0, 9, "abcde", 2, 1, -2);
2298     test("abcdefghij", 0, 9, "abcde", 2, 2, -2);
2299     test("abcdefghij", 0, 9, "abcde", 2, 3, -2);
2300     test("abcdefghij", 0, 9, "abcde", 2, 4, -2);
2301     test("abcdefghij", 0, 9, "abcde", 4, 0, 9);
2302     test("abcdefghij", 0, 9, "abcde", 4, 1, -4);
2303     test("abcdefghij", 0, 9, "abcde", 4, 2, -4);
2304     test("abcdefghij", 0, 9, "abcde", 5, 0, 9);
2305     test("abcdefghij", 0, 9, "abcde", 5, 1, 9);
2306     test("abcdefghij", 0, 9, "abcde", 6, 0, 0);
2307     test("abcdefghij", 0, 9, "abcdefghij", 0, 0, 9);
2308     test("abcdefghij", 0, 9, "abcdefghij", 0, 1, 8);
2309     test("abcdefghij", 0, 9, "abcdefghij", 0, 5, 4);
2310     test("abcdefghij", 0, 9, "abcdefghij", 0, 9, 0);
2311     test("abcdefghij", 0, 9, "abcdefghij", 0, 10, -1);
2312     test("abcdefghij", 0, 9, "abcdefghij", 0, 11, -1);
2313     test("abcdefghij", 0, 9, "abcdefghij", 1, 0, 9);
2314     test("abcdefghij", 0, 9, "abcdefghij", 1, 1, -1);
2315     test("abcdefghij", 0, 9, "abcdefghij", 1, 4, -1);
2316     test("abcdefghij", 0, 9, "abcdefghij", 1, 8, -1);
2317     test("abcdefghij", 0, 9, "abcdefghij", 1, 9, -1);
2318     test("abcdefghij", 0, 9, "abcdefghij", 1, 10, -1);
2319     test("abcdefghij", 0, 9, "abcdefghij", 5, 0, 9);
2320     test("abcdefghij", 0, 9, "abcdefghij", 5, 1, -5);
2321     test("abcdefghij", 0, 9, "abcdefghij", 5, 2, -5);
2322     test("abcdefghij", 0, 9, "abcdefghij", 5, 4, -5);
2323     test("abcdefghij", 0, 9, "abcdefghij", 5, 5, -5);
2324     test("abcdefghij", 0, 9, "abcdefghij", 5, 6, -5);
2325     test("abcdefghij", 0, 9, "abcdefghij", 9, 0, 9);
2326     test("abcdefghij", 0, 9, "abcdefghij", 9, 1, -9);
2327     test("abcdefghij", 0, 9, "abcdefghij", 9, 2, -9);
2328     test("abcdefghij", 0, 9, "abcdefghij", 10, 0, 9);
2329     test("abcdefghij", 0, 9, "abcdefghij", 10, 1, 9);
2330     test("abcdefghij", 0, 9, "abcdefghij", 11, 0, 0);
2331     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 0, 0, 9);
2332     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 0, 1, 8);
2333     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 0, 10, -1);
2334     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 0, 19, -10);
2335 }
2336 
test22()2337 void test22()
2338 {
2339     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 0, 20, -11);
2340     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 0, 21, -11);
2341     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 1, 0, 9);
2342     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 1, 1, -1);
2343     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 1, 9, -1);
2344     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 1, 18, -1);
2345     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 1, 19, -1);
2346     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 1, 20, -1);
2347     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 10, 0, 9);
2348     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 10, 1, -10);
2349     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 10, 5, -10);
2350     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 10, 9, -10);
2351     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 10, 10, -10);
2352     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 10, 11, -10);
2353     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 19, 0, 9);
2354     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 19, 1, -19);
2355     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 19, 2, -19);
2356     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 20, 0, 9);
2357     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 20, 1, 9);
2358     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 21, 0, 0);
2359     test("abcdefghij", 0, 10, "", 0, 0, 10);
2360     test("abcdefghij", 0, 10, "", 0, 1, 10);
2361     test("abcdefghij", 0, 10, "", 1, 0, 0);
2362     test("abcdefghij", 0, 10, "abcde", 0, 0, 10);
2363     test("abcdefghij", 0, 10, "abcde", 0, 1, 9);
2364     test("abcdefghij", 0, 10, "abcde", 0, 2, 8);
2365     test("abcdefghij", 0, 10, "abcde", 0, 4, 6);
2366     test("abcdefghij", 0, 10, "abcde", 0, 5, 5);
2367     test("abcdefghij", 0, 10, "abcde", 0, 6, 5);
2368     test("abcdefghij", 0, 10, "abcde", 1, 0, 10);
2369     test("abcdefghij", 0, 10, "abcde", 1, 1, -1);
2370     test("abcdefghij", 0, 10, "abcde", 1, 2, -1);
2371     test("abcdefghij", 0, 10, "abcde", 1, 3, -1);
2372     test("abcdefghij", 0, 10, "abcde", 1, 4, -1);
2373     test("abcdefghij", 0, 10, "abcde", 1, 5, -1);
2374     test("abcdefghij", 0, 10, "abcde", 2, 0, 10);
2375     test("abcdefghij", 0, 10, "abcde", 2, 1, -2);
2376     test("abcdefghij", 0, 10, "abcde", 2, 2, -2);
2377     test("abcdefghij", 0, 10, "abcde", 2, 3, -2);
2378     test("abcdefghij", 0, 10, "abcde", 2, 4, -2);
2379     test("abcdefghij", 0, 10, "abcde", 4, 0, 10);
2380     test("abcdefghij", 0, 10, "abcde", 4, 1, -4);
2381     test("abcdefghij", 0, 10, "abcde", 4, 2, -4);
2382     test("abcdefghij", 0, 10, "abcde", 5, 0, 10);
2383     test("abcdefghij", 0, 10, "abcde", 5, 1, 10);
2384     test("abcdefghij", 0, 10, "abcde", 6, 0, 0);
2385     test("abcdefghij", 0, 10, "abcdefghij", 0, 0, 10);
2386     test("abcdefghij", 0, 10, "abcdefghij", 0, 1, 9);
2387     test("abcdefghij", 0, 10, "abcdefghij", 0, 5, 5);
2388     test("abcdefghij", 0, 10, "abcdefghij", 0, 9, 1);
2389     test("abcdefghij", 0, 10, "abcdefghij", 0, 10, 0);
2390     test("abcdefghij", 0, 10, "abcdefghij", 0, 11, 0);
2391     test("abcdefghij", 0, 10, "abcdefghij", 1, 0, 10);
2392     test("abcdefghij", 0, 10, "abcdefghij", 1, 1, -1);
2393     test("abcdefghij", 0, 10, "abcdefghij", 1, 4, -1);
2394     test("abcdefghij", 0, 10, "abcdefghij", 1, 8, -1);
2395     test("abcdefghij", 0, 10, "abcdefghij", 1, 9, -1);
2396     test("abcdefghij", 0, 10, "abcdefghij", 1, 10, -1);
2397     test("abcdefghij", 0, 10, "abcdefghij", 5, 0, 10);
2398     test("abcdefghij", 0, 10, "abcdefghij", 5, 1, -5);
2399     test("abcdefghij", 0, 10, "abcdefghij", 5, 2, -5);
2400     test("abcdefghij", 0, 10, "abcdefghij", 5, 4, -5);
2401     test("abcdefghij", 0, 10, "abcdefghij", 5, 5, -5);
2402     test("abcdefghij", 0, 10, "abcdefghij", 5, 6, -5);
2403     test("abcdefghij", 0, 10, "abcdefghij", 9, 0, 10);
2404     test("abcdefghij", 0, 10, "abcdefghij", 9, 1, -9);
2405     test("abcdefghij", 0, 10, "abcdefghij", 9, 2, -9);
2406     test("abcdefghij", 0, 10, "abcdefghij", 10, 0, 10);
2407     test("abcdefghij", 0, 10, "abcdefghij", 10, 1, 10);
2408     test("abcdefghij", 0, 10, "abcdefghij", 11, 0, 0);
2409     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 0, 0, 10);
2410     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 0, 1, 9);
2411     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 0, 10, 0);
2412     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 0, 19, -9);
2413     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 0, 20, -10);
2414     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 0, 21, -10);
2415     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 1, 0, 10);
2416     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 1, 1, -1);
2417     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 1, 9, -1);
2418     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 1, 18, -1);
2419     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 1, 19, -1);
2420     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 1, 20, -1);
2421     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 10, 0, 10);
2422     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 10, 1, -10);
2423     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 10, 5, -10);
2424     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 10, 9, -10);
2425     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 10, 10, -10);
2426     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 10, 11, -10);
2427     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 19, 0, 10);
2428     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 19, 1, -19);
2429     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 19, 2, -19);
2430     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 20, 0, 10);
2431     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 20, 1, 10);
2432     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 21, 0, 0);
2433     test("abcdefghij", 0, 11, "", 0, 0, 10);
2434     test("abcdefghij", 0, 11, "", 0, 1, 10);
2435     test("abcdefghij", 0, 11, "", 1, 0, 0);
2436     test("abcdefghij", 0, 11, "abcde", 0, 0, 10);
2437     test("abcdefghij", 0, 11, "abcde", 0, 1, 9);
2438     test("abcdefghij", 0, 11, "abcde", 0, 2, 8);
2439 }
2440 
test23()2441 void test23()
2442 {
2443     test("abcdefghij", 0, 11, "abcde", 0, 4, 6);
2444     test("abcdefghij", 0, 11, "abcde", 0, 5, 5);
2445     test("abcdefghij", 0, 11, "abcde", 0, 6, 5);
2446     test("abcdefghij", 0, 11, "abcde", 1, 0, 10);
2447     test("abcdefghij", 0, 11, "abcde", 1, 1, -1);
2448     test("abcdefghij", 0, 11, "abcde", 1, 2, -1);
2449     test("abcdefghij", 0, 11, "abcde", 1, 3, -1);
2450     test("abcdefghij", 0, 11, "abcde", 1, 4, -1);
2451     test("abcdefghij", 0, 11, "abcde", 1, 5, -1);
2452     test("abcdefghij", 0, 11, "abcde", 2, 0, 10);
2453     test("abcdefghij", 0, 11, "abcde", 2, 1, -2);
2454     test("abcdefghij", 0, 11, "abcde", 2, 2, -2);
2455     test("abcdefghij", 0, 11, "abcde", 2, 3, -2);
2456     test("abcdefghij", 0, 11, "abcde", 2, 4, -2);
2457     test("abcdefghij", 0, 11, "abcde", 4, 0, 10);
2458     test("abcdefghij", 0, 11, "abcde", 4, 1, -4);
2459     test("abcdefghij", 0, 11, "abcde", 4, 2, -4);
2460     test("abcdefghij", 0, 11, "abcde", 5, 0, 10);
2461     test("abcdefghij", 0, 11, "abcde", 5, 1, 10);
2462     test("abcdefghij", 0, 11, "abcde", 6, 0, 0);
2463     test("abcdefghij", 0, 11, "abcdefghij", 0, 0, 10);
2464     test("abcdefghij", 0, 11, "abcdefghij", 0, 1, 9);
2465     test("abcdefghij", 0, 11, "abcdefghij", 0, 5, 5);
2466     test("abcdefghij", 0, 11, "abcdefghij", 0, 9, 1);
2467     test("abcdefghij", 0, 11, "abcdefghij", 0, 10, 0);
2468     test("abcdefghij", 0, 11, "abcdefghij", 0, 11, 0);
2469     test("abcdefghij", 0, 11, "abcdefghij", 1, 0, 10);
2470     test("abcdefghij", 0, 11, "abcdefghij", 1, 1, -1);
2471     test("abcdefghij", 0, 11, "abcdefghij", 1, 4, -1);
2472     test("abcdefghij", 0, 11, "abcdefghij", 1, 8, -1);
2473     test("abcdefghij", 0, 11, "abcdefghij", 1, 9, -1);
2474     test("abcdefghij", 0, 11, "abcdefghij", 1, 10, -1);
2475     test("abcdefghij", 0, 11, "abcdefghij", 5, 0, 10);
2476     test("abcdefghij", 0, 11, "abcdefghij", 5, 1, -5);
2477     test("abcdefghij", 0, 11, "abcdefghij", 5, 2, -5);
2478     test("abcdefghij", 0, 11, "abcdefghij", 5, 4, -5);
2479     test("abcdefghij", 0, 11, "abcdefghij", 5, 5, -5);
2480     test("abcdefghij", 0, 11, "abcdefghij", 5, 6, -5);
2481     test("abcdefghij", 0, 11, "abcdefghij", 9, 0, 10);
2482     test("abcdefghij", 0, 11, "abcdefghij", 9, 1, -9);
2483     test("abcdefghij", 0, 11, "abcdefghij", 9, 2, -9);
2484     test("abcdefghij", 0, 11, "abcdefghij", 10, 0, 10);
2485     test("abcdefghij", 0, 11, "abcdefghij", 10, 1, 10);
2486     test("abcdefghij", 0, 11, "abcdefghij", 11, 0, 0);
2487     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 0, 0, 10);
2488     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 0, 1, 9);
2489     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 0, 10, 0);
2490     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 0, 19, -9);
2491     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 0, 20, -10);
2492     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 0, 21, -10);
2493     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 1, 0, 10);
2494     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 1, 1, -1);
2495     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 1, 9, -1);
2496     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 1, 18, -1);
2497     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 1, 19, -1);
2498     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 1, 20, -1);
2499     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 10, 0, 10);
2500     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 10, 1, -10);
2501     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 10, 5, -10);
2502     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 10, 9, -10);
2503     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 10, 10, -10);
2504     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 10, 11, -10);
2505     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 19, 0, 10);
2506     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 19, 1, -19);
2507     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 19, 2, -19);
2508     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 20, 0, 10);
2509     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 20, 1, 10);
2510     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 21, 0, 0);
2511     test("abcdefghij", 1, 0, "", 0, 0, 0);
2512     test("abcdefghij", 1, 0, "", 0, 1, 0);
2513     test("abcdefghij", 1, 0, "", 1, 0, 0);
2514     test("abcdefghij", 1, 0, "abcde", 0, 0, 0);
2515     test("abcdefghij", 1, 0, "abcde", 0, 1, -1);
2516     test("abcdefghij", 1, 0, "abcde", 0, 2, -2);
2517     test("abcdefghij", 1, 0, "abcde", 0, 4, -4);
2518     test("abcdefghij", 1, 0, "abcde", 0, 5, -5);
2519     test("abcdefghij", 1, 0, "abcde", 0, 6, -5);
2520     test("abcdefghij", 1, 0, "abcde", 1, 0, 0);
2521     test("abcdefghij", 1, 0, "abcde", 1, 1, -1);
2522     test("abcdefghij", 1, 0, "abcde", 1, 2, -2);
2523     test("abcdefghij", 1, 0, "abcde", 1, 3, -3);
2524     test("abcdefghij", 1, 0, "abcde", 1, 4, -4);
2525     test("abcdefghij", 1, 0, "abcde", 1, 5, -4);
2526     test("abcdefghij", 1, 0, "abcde", 2, 0, 0);
2527     test("abcdefghij", 1, 0, "abcde", 2, 1, -1);
2528     test("abcdefghij", 1, 0, "abcde", 2, 2, -2);
2529     test("abcdefghij", 1, 0, "abcde", 2, 3, -3);
2530     test("abcdefghij", 1, 0, "abcde", 2, 4, -3);
2531     test("abcdefghij", 1, 0, "abcde", 4, 0, 0);
2532     test("abcdefghij", 1, 0, "abcde", 4, 1, -1);
2533     test("abcdefghij", 1, 0, "abcde", 4, 2, -1);
2534     test("abcdefghij", 1, 0, "abcde", 5, 0, 0);
2535     test("abcdefghij", 1, 0, "abcde", 5, 1, 0);
2536     test("abcdefghij", 1, 0, "abcde", 6, 0, 0);
2537     test("abcdefghij", 1, 0, "abcdefghij", 0, 0, 0);
2538     test("abcdefghij", 1, 0, "abcdefghij", 0, 1, -1);
2539     test("abcdefghij", 1, 0, "abcdefghij", 0, 5, -5);
2540     test("abcdefghij", 1, 0, "abcdefghij", 0, 9, -9);
2541     test("abcdefghij", 1, 0, "abcdefghij", 0, 10, -10);
2542     test("abcdefghij", 1, 0, "abcdefghij", 0, 11, -10);
2543 }
2544 
test24()2545 void test24()
2546 {
2547     test("abcdefghij", 1, 0, "abcdefghij", 1, 0, 0);
2548     test("abcdefghij", 1, 0, "abcdefghij", 1, 1, -1);
2549     test("abcdefghij", 1, 0, "abcdefghij", 1, 4, -4);
2550     test("abcdefghij", 1, 0, "abcdefghij", 1, 8, -8);
2551     test("abcdefghij", 1, 0, "abcdefghij", 1, 9, -9);
2552     test("abcdefghij", 1, 0, "abcdefghij", 1, 10, -9);
2553     test("abcdefghij", 1, 0, "abcdefghij", 5, 0, 0);
2554     test("abcdefghij", 1, 0, "abcdefghij", 5, 1, -1);
2555     test("abcdefghij", 1, 0, "abcdefghij", 5, 2, -2);
2556     test("abcdefghij", 1, 0, "abcdefghij", 5, 4, -4);
2557     test("abcdefghij", 1, 0, "abcdefghij", 5, 5, -5);
2558     test("abcdefghij", 1, 0, "abcdefghij", 5, 6, -5);
2559     test("abcdefghij", 1, 0, "abcdefghij", 9, 0, 0);
2560     test("abcdefghij", 1, 0, "abcdefghij", 9, 1, -1);
2561     test("abcdefghij", 1, 0, "abcdefghij", 9, 2, -1);
2562     test("abcdefghij", 1, 0, "abcdefghij", 10, 0, 0);
2563     test("abcdefghij", 1, 0, "abcdefghij", 10, 1, 0);
2564     test("abcdefghij", 1, 0, "abcdefghij", 11, 0, 0);
2565     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 0, 0, 0);
2566     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 0, 1, -1);
2567     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 0, 10, -10);
2568     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 0, 19, -19);
2569     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 0, 20, -20);
2570     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 0, 21, -20);
2571     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 1, 0, 0);
2572     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 1, 1, -1);
2573     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 1, 9, -9);
2574     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 1, 18, -18);
2575     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 1, 19, -19);
2576     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 1, 20, -19);
2577     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 10, 0, 0);
2578     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 10, 1, -1);
2579     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 10, 5, -5);
2580     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 10, 9, -9);
2581     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 10, 10, -10);
2582     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 10, 11, -10);
2583     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 19, 0, 0);
2584     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 19, 1, -1);
2585     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 19, 2, -1);
2586     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 20, 0, 0);
2587     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 20, 1, 0);
2588     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 21, 0, 0);
2589     test("abcdefghij", 1, 1, "", 0, 0, 1);
2590     test("abcdefghij", 1, 1, "", 0, 1, 1);
2591     test("abcdefghij", 1, 1, "", 1, 0, 0);
2592     test("abcdefghij", 1, 1, "abcde", 0, 0, 1);
2593     test("abcdefghij", 1, 1, "abcde", 0, 1, 1);
2594     test("abcdefghij", 1, 1, "abcde", 0, 2, 1);
2595     test("abcdefghij", 1, 1, "abcde", 0, 4, 1);
2596     test("abcdefghij", 1, 1, "abcde", 0, 5, 1);
2597     test("abcdefghij", 1, 1, "abcde", 0, 6, 1);
2598     test("abcdefghij", 1, 1, "abcde", 1, 0, 1);
2599     test("abcdefghij", 1, 1, "abcde", 1, 1, 0);
2600     test("abcdefghij", 1, 1, "abcde", 1, 2, -1);
2601     test("abcdefghij", 1, 1, "abcde", 1, 3, -2);
2602     test("abcdefghij", 1, 1, "abcde", 1, 4, -3);
2603     test("abcdefghij", 1, 1, "abcde", 1, 5, -3);
2604     test("abcdefghij", 1, 1, "abcde", 2, 0, 1);
2605     test("abcdefghij", 1, 1, "abcde", 2, 1, -1);
2606     test("abcdefghij", 1, 1, "abcde", 2, 2, -1);
2607     test("abcdefghij", 1, 1, "abcde", 2, 3, -1);
2608     test("abcdefghij", 1, 1, "abcde", 2, 4, -1);
2609     test("abcdefghij", 1, 1, "abcde", 4, 0, 1);
2610     test("abcdefghij", 1, 1, "abcde", 4, 1, -3);
2611     test("abcdefghij", 1, 1, "abcde", 4, 2, -3);
2612     test("abcdefghij", 1, 1, "abcde", 5, 0, 1);
2613     test("abcdefghij", 1, 1, "abcde", 5, 1, 1);
2614     test("abcdefghij", 1, 1, "abcde", 6, 0, 0);
2615     test("abcdefghij", 1, 1, "abcdefghij", 0, 0, 1);
2616     test("abcdefghij", 1, 1, "abcdefghij", 0, 1, 1);
2617     test("abcdefghij", 1, 1, "abcdefghij", 0, 5, 1);
2618     test("abcdefghij", 1, 1, "abcdefghij", 0, 9, 1);
2619     test("abcdefghij", 1, 1, "abcdefghij", 0, 10, 1);
2620     test("abcdefghij", 1, 1, "abcdefghij", 0, 11, 1);
2621     test("abcdefghij", 1, 1, "abcdefghij", 1, 0, 1);
2622     test("abcdefghij", 1, 1, "abcdefghij", 1, 1, 0);
2623     test("abcdefghij", 1, 1, "abcdefghij", 1, 4, -3);
2624     test("abcdefghij", 1, 1, "abcdefghij", 1, 8, -7);
2625     test("abcdefghij", 1, 1, "abcdefghij", 1, 9, -8);
2626     test("abcdefghij", 1, 1, "abcdefghij", 1, 10, -8);
2627     test("abcdefghij", 1, 1, "abcdefghij", 5, 0, 1);
2628     test("abcdefghij", 1, 1, "abcdefghij", 5, 1, -4);
2629     test("abcdefghij", 1, 1, "abcdefghij", 5, 2, -4);
2630     test("abcdefghij", 1, 1, "abcdefghij", 5, 4, -4);
2631     test("abcdefghij", 1, 1, "abcdefghij", 5, 5, -4);
2632     test("abcdefghij", 1, 1, "abcdefghij", 5, 6, -4);
2633     test("abcdefghij", 1, 1, "abcdefghij", 9, 0, 1);
2634     test("abcdefghij", 1, 1, "abcdefghij", 9, 1, -8);
2635     test("abcdefghij", 1, 1, "abcdefghij", 9, 2, -8);
2636     test("abcdefghij", 1, 1, "abcdefghij", 10, 0, 1);
2637     test("abcdefghij", 1, 1, "abcdefghij", 10, 1, 1);
2638     test("abcdefghij", 1, 1, "abcdefghij", 11, 0, 0);
2639     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 0, 0, 1);
2640     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 0, 1, 1);
2641     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 0, 10, 1);
2642     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 0, 19, 1);
2643     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 0, 20, 1);
2644     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 0, 21, 1);
2645     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1, 0, 1);
2646     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1, 1, 0);
2647 }
2648 
test25()2649 void test25()
2650 {
2651     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1, 9, -8);
2652     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1, 18, -17);
2653     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1, 19, -18);
2654     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1, 20, -18);
2655     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 10, 0, 1);
2656     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 10, 1, -9);
2657     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 10, 5, -9);
2658     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 10, 9, -9);
2659     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 10, 10, -9);
2660     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 10, 11, -9);
2661     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 19, 0, 1);
2662     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 19, 1, -18);
2663     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 19, 2, -18);
2664     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 20, 0, 1);
2665     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 20, 1, 1);
2666     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 21, 0, 0);
2667     test("abcdefghij", 1, 4, "", 0, 0, 4);
2668     test("abcdefghij", 1, 4, "", 0, 1, 4);
2669     test("abcdefghij", 1, 4, "", 1, 0, 0);
2670     test("abcdefghij", 1, 4, "abcde", 0, 0, 4);
2671     test("abcdefghij", 1, 4, "abcde", 0, 1, 1);
2672     test("abcdefghij", 1, 4, "abcde", 0, 2, 1);
2673     test("abcdefghij", 1, 4, "abcde", 0, 4, 1);
2674     test("abcdefghij", 1, 4, "abcde", 0, 5, 1);
2675     test("abcdefghij", 1, 4, "abcde", 0, 6, 1);
2676     test("abcdefghij", 1, 4, "abcde", 1, 0, 4);
2677     test("abcdefghij", 1, 4, "abcde", 1, 1, 3);
2678     test("abcdefghij", 1, 4, "abcde", 1, 2, 2);
2679     test("abcdefghij", 1, 4, "abcde", 1, 3, 1);
2680     test("abcdefghij", 1, 4, "abcde", 1, 4, 0);
2681     test("abcdefghij", 1, 4, "abcde", 1, 5, 0);
2682     test("abcdefghij", 1, 4, "abcde", 2, 0, 4);
2683     test("abcdefghij", 1, 4, "abcde", 2, 1, -1);
2684     test("abcdefghij", 1, 4, "abcde", 2, 2, -1);
2685     test("abcdefghij", 1, 4, "abcde", 2, 3, -1);
2686     test("abcdefghij", 1, 4, "abcde", 2, 4, -1);
2687     test("abcdefghij", 1, 4, "abcde", 4, 0, 4);
2688     test("abcdefghij", 1, 4, "abcde", 4, 1, -3);
2689     test("abcdefghij", 1, 4, "abcde", 4, 2, -3);
2690     test("abcdefghij", 1, 4, "abcde", 5, 0, 4);
2691     test("abcdefghij", 1, 4, "abcde", 5, 1, 4);
2692     test("abcdefghij", 1, 4, "abcde", 6, 0, 0);
2693     test("abcdefghij", 1, 4, "abcdefghij", 0, 0, 4);
2694     test("abcdefghij", 1, 4, "abcdefghij", 0, 1, 1);
2695     test("abcdefghij", 1, 4, "abcdefghij", 0, 5, 1);
2696     test("abcdefghij", 1, 4, "abcdefghij", 0, 9, 1);
2697     test("abcdefghij", 1, 4, "abcdefghij", 0, 10, 1);
2698     test("abcdefghij", 1, 4, "abcdefghij", 0, 11, 1);
2699     test("abcdefghij", 1, 4, "abcdefghij", 1, 0, 4);
2700     test("abcdefghij", 1, 4, "abcdefghij", 1, 1, 3);
2701     test("abcdefghij", 1, 4, "abcdefghij", 1, 4, 0);
2702     test("abcdefghij", 1, 4, "abcdefghij", 1, 8, -4);
2703     test("abcdefghij", 1, 4, "abcdefghij", 1, 9, -5);
2704     test("abcdefghij", 1, 4, "abcdefghij", 1, 10, -5);
2705     test("abcdefghij", 1, 4, "abcdefghij", 5, 0, 4);
2706     test("abcdefghij", 1, 4, "abcdefghij", 5, 1, -4);
2707     test("abcdefghij", 1, 4, "abcdefghij", 5, 2, -4);
2708     test("abcdefghij", 1, 4, "abcdefghij", 5, 4, -4);
2709     test("abcdefghij", 1, 4, "abcdefghij", 5, 5, -4);
2710     test("abcdefghij", 1, 4, "abcdefghij", 5, 6, -4);
2711     test("abcdefghij", 1, 4, "abcdefghij", 9, 0, 4);
2712     test("abcdefghij", 1, 4, "abcdefghij", 9, 1, -8);
2713     test("abcdefghij", 1, 4, "abcdefghij", 9, 2, -8);
2714     test("abcdefghij", 1, 4, "abcdefghij", 10, 0, 4);
2715     test("abcdefghij", 1, 4, "abcdefghij", 10, 1, 4);
2716     test("abcdefghij", 1, 4, "abcdefghij", 11, 0, 0);
2717     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 0, 0, 4);
2718     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 0, 1, 1);
2719     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 0, 10, 1);
2720     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 0, 19, 1);
2721     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 0, 20, 1);
2722     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 0, 21, 1);
2723     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1, 0, 4);
2724     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1, 1, 3);
2725     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1, 9, -5);
2726     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1, 18, -14);
2727     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1, 19, -15);
2728     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1, 20, -15);
2729     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 10, 0, 4);
2730     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 10, 1, -9);
2731     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 10, 5, -9);
2732     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 10, 9, -9);
2733     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 10, 10, -9);
2734     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 10, 11, -9);
2735     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 19, 0, 4);
2736     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 19, 1, -18);
2737     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 19, 2, -18);
2738     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 20, 0, 4);
2739     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 20, 1, 4);
2740     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 21, 0, 0);
2741     test("abcdefghij", 1, 8, "", 0, 0, 8);
2742     test("abcdefghij", 1, 8, "", 0, 1, 8);
2743     test("abcdefghij", 1, 8, "", 1, 0, 0);
2744     test("abcdefghij", 1, 8, "abcde", 0, 0, 8);
2745     test("abcdefghij", 1, 8, "abcde", 0, 1, 1);
2746     test("abcdefghij", 1, 8, "abcde", 0, 2, 1);
2747     test("abcdefghij", 1, 8, "abcde", 0, 4, 1);
2748     test("abcdefghij", 1, 8, "abcde", 0, 5, 1);
2749     test("abcdefghij", 1, 8, "abcde", 0, 6, 1);
2750     test("abcdefghij", 1, 8, "abcde", 1, 0, 8);
2751 }
2752 
test26()2753 void test26()
2754 {
2755     test("abcdefghij", 1, 8, "abcde", 1, 1, 7);
2756     test("abcdefghij", 1, 8, "abcde", 1, 2, 6);
2757     test("abcdefghij", 1, 8, "abcde", 1, 3, 5);
2758     test("abcdefghij", 1, 8, "abcde", 1, 4, 4);
2759     test("abcdefghij", 1, 8, "abcde", 1, 5, 4);
2760     test("abcdefghij", 1, 8, "abcde", 2, 0, 8);
2761     test("abcdefghij", 1, 8, "abcde", 2, 1, -1);
2762     test("abcdefghij", 1, 8, "abcde", 2, 2, -1);
2763     test("abcdefghij", 1, 8, "abcde", 2, 3, -1);
2764     test("abcdefghij", 1, 8, "abcde", 2, 4, -1);
2765     test("abcdefghij", 1, 8, "abcde", 4, 0, 8);
2766     test("abcdefghij", 1, 8, "abcde", 4, 1, -3);
2767     test("abcdefghij", 1, 8, "abcde", 4, 2, -3);
2768     test("abcdefghij", 1, 8, "abcde", 5, 0, 8);
2769     test("abcdefghij", 1, 8, "abcde", 5, 1, 8);
2770     test("abcdefghij", 1, 8, "abcde", 6, 0, 0);
2771     test("abcdefghij", 1, 8, "abcdefghij", 0, 0, 8);
2772     test("abcdefghij", 1, 8, "abcdefghij", 0, 1, 1);
2773     test("abcdefghij", 1, 8, "abcdefghij", 0, 5, 1);
2774     test("abcdefghij", 1, 8, "abcdefghij", 0, 9, 1);
2775     test("abcdefghij", 1, 8, "abcdefghij", 0, 10, 1);
2776     test("abcdefghij", 1, 8, "abcdefghij", 0, 11, 1);
2777     test("abcdefghij", 1, 8, "abcdefghij", 1, 0, 8);
2778     test("abcdefghij", 1, 8, "abcdefghij", 1, 1, 7);
2779     test("abcdefghij", 1, 8, "abcdefghij", 1, 4, 4);
2780     test("abcdefghij", 1, 8, "abcdefghij", 1, 8, 0);
2781     test("abcdefghij", 1, 8, "abcdefghij", 1, 9, -1);
2782     test("abcdefghij", 1, 8, "abcdefghij", 1, 10, -1);
2783     test("abcdefghij", 1, 8, "abcdefghij", 5, 0, 8);
2784     test("abcdefghij", 1, 8, "abcdefghij", 5, 1, -4);
2785     test("abcdefghij", 1, 8, "abcdefghij", 5, 2, -4);
2786     test("abcdefghij", 1, 8, "abcdefghij", 5, 4, -4);
2787     test("abcdefghij", 1, 8, "abcdefghij", 5, 5, -4);
2788     test("abcdefghij", 1, 8, "abcdefghij", 5, 6, -4);
2789     test("abcdefghij", 1, 8, "abcdefghij", 9, 0, 8);
2790     test("abcdefghij", 1, 8, "abcdefghij", 9, 1, -8);
2791     test("abcdefghij", 1, 8, "abcdefghij", 9, 2, -8);
2792     test("abcdefghij", 1, 8, "abcdefghij", 10, 0, 8);
2793     test("abcdefghij", 1, 8, "abcdefghij", 10, 1, 8);
2794     test("abcdefghij", 1, 8, "abcdefghij", 11, 0, 0);
2795     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 0, 0, 8);
2796     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 0, 1, 1);
2797     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 0, 10, 1);
2798     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 0, 19, 1);
2799     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 0, 20, 1);
2800     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 0, 21, 1);
2801     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1, 0, 8);
2802     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1, 1, 7);
2803     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1, 9, -1);
2804     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1, 18, -10);
2805     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1, 19, -11);
2806     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1, 20, -11);
2807     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 10, 0, 8);
2808     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 10, 1, -9);
2809     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 10, 5, -9);
2810     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 10, 9, -9);
2811     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 10, 10, -9);
2812     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 10, 11, -9);
2813     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 19, 0, 8);
2814     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 19, 1, -18);
2815     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 19, 2, -18);
2816     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 20, 0, 8);
2817     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 20, 1, 8);
2818     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 21, 0, 0);
2819     test("abcdefghij", 1, 9, "", 0, 0, 9);
2820     test("abcdefghij", 1, 9, "", 0, 1, 9);
2821     test("abcdefghij", 1, 9, "", 1, 0, 0);
2822     test("abcdefghij", 1, 9, "abcde", 0, 0, 9);
2823     test("abcdefghij", 1, 9, "abcde", 0, 1, 1);
2824     test("abcdefghij", 1, 9, "abcde", 0, 2, 1);
2825     test("abcdefghij", 1, 9, "abcde", 0, 4, 1);
2826     test("abcdefghij", 1, 9, "abcde", 0, 5, 1);
2827     test("abcdefghij", 1, 9, "abcde", 0, 6, 1);
2828     test("abcdefghij", 1, 9, "abcde", 1, 0, 9);
2829     test("abcdefghij", 1, 9, "abcde", 1, 1, 8);
2830     test("abcdefghij", 1, 9, "abcde", 1, 2, 7);
2831     test("abcdefghij", 1, 9, "abcde", 1, 3, 6);
2832     test("abcdefghij", 1, 9, "abcde", 1, 4, 5);
2833     test("abcdefghij", 1, 9, "abcde", 1, 5, 5);
2834     test("abcdefghij", 1, 9, "abcde", 2, 0, 9);
2835     test("abcdefghij", 1, 9, "abcde", 2, 1, -1);
2836     test("abcdefghij", 1, 9, "abcde", 2, 2, -1);
2837     test("abcdefghij", 1, 9, "abcde", 2, 3, -1);
2838     test("abcdefghij", 1, 9, "abcde", 2, 4, -1);
2839     test("abcdefghij", 1, 9, "abcde", 4, 0, 9);
2840     test("abcdefghij", 1, 9, "abcde", 4, 1, -3);
2841     test("abcdefghij", 1, 9, "abcde", 4, 2, -3);
2842     test("abcdefghij", 1, 9, "abcde", 5, 0, 9);
2843     test("abcdefghij", 1, 9, "abcde", 5, 1, 9);
2844     test("abcdefghij", 1, 9, "abcde", 6, 0, 0);
2845     test("abcdefghij", 1, 9, "abcdefghij", 0, 0, 9);
2846     test("abcdefghij", 1, 9, "abcdefghij", 0, 1, 1);
2847     test("abcdefghij", 1, 9, "abcdefghij", 0, 5, 1);
2848     test("abcdefghij", 1, 9, "abcdefghij", 0, 9, 1);
2849     test("abcdefghij", 1, 9, "abcdefghij", 0, 10, 1);
2850     test("abcdefghij", 1, 9, "abcdefghij", 0, 11, 1);
2851     test("abcdefghij", 1, 9, "abcdefghij", 1, 0, 9);
2852     test("abcdefghij", 1, 9, "abcdefghij", 1, 1, 8);
2853     test("abcdefghij", 1, 9, "abcdefghij", 1, 4, 5);
2854     test("abcdefghij", 1, 9, "abcdefghij", 1, 8, 1);
2855 }
2856 
test27()2857 void test27()
2858 {
2859     test("abcdefghij", 1, 9, "abcdefghij", 1, 9, 0);
2860     test("abcdefghij", 1, 9, "abcdefghij", 1, 10, 0);
2861     test("abcdefghij", 1, 9, "abcdefghij", 5, 0, 9);
2862     test("abcdefghij", 1, 9, "abcdefghij", 5, 1, -4);
2863     test("abcdefghij", 1, 9, "abcdefghij", 5, 2, -4);
2864     test("abcdefghij", 1, 9, "abcdefghij", 5, 4, -4);
2865     test("abcdefghij", 1, 9, "abcdefghij", 5, 5, -4);
2866     test("abcdefghij", 1, 9, "abcdefghij", 5, 6, -4);
2867     test("abcdefghij", 1, 9, "abcdefghij", 9, 0, 9);
2868     test("abcdefghij", 1, 9, "abcdefghij", 9, 1, -8);
2869     test("abcdefghij", 1, 9, "abcdefghij", 9, 2, -8);
2870     test("abcdefghij", 1, 9, "abcdefghij", 10, 0, 9);
2871     test("abcdefghij", 1, 9, "abcdefghij", 10, 1, 9);
2872     test("abcdefghij", 1, 9, "abcdefghij", 11, 0, 0);
2873     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 0, 0, 9);
2874     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 0, 1, 1);
2875     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 0, 10, 1);
2876     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 0, 19, 1);
2877     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 0, 20, 1);
2878     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 0, 21, 1);
2879     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1, 0, 9);
2880     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1, 1, 8);
2881     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1, 9, 0);
2882     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1, 18, -9);
2883     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1, 19, -10);
2884     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1, 20, -10);
2885     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 10, 0, 9);
2886     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 10, 1, -9);
2887     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 10, 5, -9);
2888     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 10, 9, -9);
2889     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 10, 10, -9);
2890     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 10, 11, -9);
2891     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 19, 0, 9);
2892     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 19, 1, -18);
2893     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 19, 2, -18);
2894     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 20, 0, 9);
2895     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 20, 1, 9);
2896     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 21, 0, 0);
2897     test("abcdefghij", 1, 10, "", 0, 0, 9);
2898     test("abcdefghij", 1, 10, "", 0, 1, 9);
2899     test("abcdefghij", 1, 10, "", 1, 0, 0);
2900     test("abcdefghij", 1, 10, "abcde", 0, 0, 9);
2901     test("abcdefghij", 1, 10, "abcde", 0, 1, 1);
2902     test("abcdefghij", 1, 10, "abcde", 0, 2, 1);
2903     test("abcdefghij", 1, 10, "abcde", 0, 4, 1);
2904     test("abcdefghij", 1, 10, "abcde", 0, 5, 1);
2905     test("abcdefghij", 1, 10, "abcde", 0, 6, 1);
2906     test("abcdefghij", 1, 10, "abcde", 1, 0, 9);
2907     test("abcdefghij", 1, 10, "abcde", 1, 1, 8);
2908     test("abcdefghij", 1, 10, "abcde", 1, 2, 7);
2909     test("abcdefghij", 1, 10, "abcde", 1, 3, 6);
2910     test("abcdefghij", 1, 10, "abcde", 1, 4, 5);
2911     test("abcdefghij", 1, 10, "abcde", 1, 5, 5);
2912     test("abcdefghij", 1, 10, "abcde", 2, 0, 9);
2913     test("abcdefghij", 1, 10, "abcde", 2, 1, -1);
2914     test("abcdefghij", 1, 10, "abcde", 2, 2, -1);
2915     test("abcdefghij", 1, 10, "abcde", 2, 3, -1);
2916     test("abcdefghij", 1, 10, "abcde", 2, 4, -1);
2917     test("abcdefghij", 1, 10, "abcde", 4, 0, 9);
2918     test("abcdefghij", 1, 10, "abcde", 4, 1, -3);
2919     test("abcdefghij", 1, 10, "abcde", 4, 2, -3);
2920     test("abcdefghij", 1, 10, "abcde", 5, 0, 9);
2921     test("abcdefghij", 1, 10, "abcde", 5, 1, 9);
2922     test("abcdefghij", 1, 10, "abcde", 6, 0, 0);
2923     test("abcdefghij", 1, 10, "abcdefghij", 0, 0, 9);
2924     test("abcdefghij", 1, 10, "abcdefghij", 0, 1, 1);
2925     test("abcdefghij", 1, 10, "abcdefghij", 0, 5, 1);
2926     test("abcdefghij", 1, 10, "abcdefghij", 0, 9, 1);
2927     test("abcdefghij", 1, 10, "abcdefghij", 0, 10, 1);
2928     test("abcdefghij", 1, 10, "abcdefghij", 0, 11, 1);
2929     test("abcdefghij", 1, 10, "abcdefghij", 1, 0, 9);
2930     test("abcdefghij", 1, 10, "abcdefghij", 1, 1, 8);
2931     test("abcdefghij", 1, 10, "abcdefghij", 1, 4, 5);
2932     test("abcdefghij", 1, 10, "abcdefghij", 1, 8, 1);
2933     test("abcdefghij", 1, 10, "abcdefghij", 1, 9, 0);
2934     test("abcdefghij", 1, 10, "abcdefghij", 1, 10, 0);
2935     test("abcdefghij", 1, 10, "abcdefghij", 5, 0, 9);
2936     test("abcdefghij", 1, 10, "abcdefghij", 5, 1, -4);
2937     test("abcdefghij", 1, 10, "abcdefghij", 5, 2, -4);
2938     test("abcdefghij", 1, 10, "abcdefghij", 5, 4, -4);
2939     test("abcdefghij", 1, 10, "abcdefghij", 5, 5, -4);
2940     test("abcdefghij", 1, 10, "abcdefghij", 5, 6, -4);
2941     test("abcdefghij", 1, 10, "abcdefghij", 9, 0, 9);
2942     test("abcdefghij", 1, 10, "abcdefghij", 9, 1, -8);
2943     test("abcdefghij", 1, 10, "abcdefghij", 9, 2, -8);
2944     test("abcdefghij", 1, 10, "abcdefghij", 10, 0, 9);
2945     test("abcdefghij", 1, 10, "abcdefghij", 10, 1, 9);
2946     test("abcdefghij", 1, 10, "abcdefghij", 11, 0, 0);
2947     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 0, 0, 9);
2948     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 0, 1, 1);
2949     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 0, 10, 1);
2950     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 0, 19, 1);
2951     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 0, 20, 1);
2952     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 0, 21, 1);
2953     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1, 0, 9);
2954     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1, 1, 8);
2955     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1, 9, 0);
2956     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1, 18, -9);
2957     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1, 19, -10);
2958     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1, 20, -10);
2959 }
2960 
test28()2961 void test28()
2962 {
2963     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 10, 0, 9);
2964     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 10, 1, -9);
2965     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 10, 5, -9);
2966     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 10, 9, -9);
2967     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 10, 10, -9);
2968     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 10, 11, -9);
2969     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 19, 0, 9);
2970     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 19, 1, -18);
2971     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 19, 2, -18);
2972     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 20, 0, 9);
2973     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 20, 1, 9);
2974     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 21, 0, 0);
2975     test("abcdefghij", 5, 0, "", 0, 0, 0);
2976     test("abcdefghij", 5, 0, "", 0, 1, 0);
2977     test("abcdefghij", 5, 0, "", 1, 0, 0);
2978     test("abcdefghij", 5, 0, "abcde", 0, 0, 0);
2979     test("abcdefghij", 5, 0, "abcde", 0, 1, -1);
2980     test("abcdefghij", 5, 0, "abcde", 0, 2, -2);
2981     test("abcdefghij", 5, 0, "abcde", 0, 4, -4);
2982     test("abcdefghij", 5, 0, "abcde", 0, 5, -5);
2983     test("abcdefghij", 5, 0, "abcde", 0, 6, -5);
2984     test("abcdefghij", 5, 0, "abcde", 1, 0, 0);
2985     test("abcdefghij", 5, 0, "abcde", 1, 1, -1);
2986     test("abcdefghij", 5, 0, "abcde", 1, 2, -2);
2987     test("abcdefghij", 5, 0, "abcde", 1, 3, -3);
2988     test("abcdefghij", 5, 0, "abcde", 1, 4, -4);
2989     test("abcdefghij", 5, 0, "abcde", 1, 5, -4);
2990     test("abcdefghij", 5, 0, "abcde", 2, 0, 0);
2991     test("abcdefghij", 5, 0, "abcde", 2, 1, -1);
2992     test("abcdefghij", 5, 0, "abcde", 2, 2, -2);
2993     test("abcdefghij", 5, 0, "abcde", 2, 3, -3);
2994     test("abcdefghij", 5, 0, "abcde", 2, 4, -3);
2995     test("abcdefghij", 5, 0, "abcde", 4, 0, 0);
2996     test("abcdefghij", 5, 0, "abcde", 4, 1, -1);
2997     test("abcdefghij", 5, 0, "abcde", 4, 2, -1);
2998     test("abcdefghij", 5, 0, "abcde", 5, 0, 0);
2999     test("abcdefghij", 5, 0, "abcde", 5, 1, 0);
3000     test("abcdefghij", 5, 0, "abcde", 6, 0, 0);
3001     test("abcdefghij", 5, 0, "abcdefghij", 0, 0, 0);
3002     test("abcdefghij", 5, 0, "abcdefghij", 0, 1, -1);
3003     test("abcdefghij", 5, 0, "abcdefghij", 0, 5, -5);
3004     test("abcdefghij", 5, 0, "abcdefghij", 0, 9, -9);
3005     test("abcdefghij", 5, 0, "abcdefghij", 0, 10, -10);
3006     test("abcdefghij", 5, 0, "abcdefghij", 0, 11, -10);
3007     test("abcdefghij", 5, 0, "abcdefghij", 1, 0, 0);
3008     test("abcdefghij", 5, 0, "abcdefghij", 1, 1, -1);
3009     test("abcdefghij", 5, 0, "abcdefghij", 1, 4, -4);
3010     test("abcdefghij", 5, 0, "abcdefghij", 1, 8, -8);
3011     test("abcdefghij", 5, 0, "abcdefghij", 1, 9, -9);
3012     test("abcdefghij", 5, 0, "abcdefghij", 1, 10, -9);
3013     test("abcdefghij", 5, 0, "abcdefghij", 5, 0, 0);
3014     test("abcdefghij", 5, 0, "abcdefghij", 5, 1, -1);
3015     test("abcdefghij", 5, 0, "abcdefghij", 5, 2, -2);
3016     test("abcdefghij", 5, 0, "abcdefghij", 5, 4, -4);
3017     test("abcdefghij", 5, 0, "abcdefghij", 5, 5, -5);
3018     test("abcdefghij", 5, 0, "abcdefghij", 5, 6, -5);
3019     test("abcdefghij", 5, 0, "abcdefghij", 9, 0, 0);
3020     test("abcdefghij", 5, 0, "abcdefghij", 9, 1, -1);
3021     test("abcdefghij", 5, 0, "abcdefghij", 9, 2, -1);
3022     test("abcdefghij", 5, 0, "abcdefghij", 10, 0, 0);
3023     test("abcdefghij", 5, 0, "abcdefghij", 10, 1, 0);
3024     test("abcdefghij", 5, 0, "abcdefghij", 11, 0, 0);
3025     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 0, 0, 0);
3026     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 0, 1, -1);
3027     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 0, 10, -10);
3028     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 0, 19, -19);
3029     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 0, 20, -20);
3030     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 0, 21, -20);
3031     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 1, 0, 0);
3032     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 1, 1, -1);
3033     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 1, 9, -9);
3034     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 1, 18, -18);
3035     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 1, 19, -19);
3036     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 1, 20, -19);
3037     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 10, 0, 0);
3038     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 10, 1, -1);
3039     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 10, 5, -5);
3040     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 10, 9, -9);
3041     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 10, 10, -10);
3042     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 10, 11, -10);
3043     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 19, 0, 0);
3044     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 19, 1, -1);
3045     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 19, 2, -1);
3046     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 20, 0, 0);
3047     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 20, 1, 0);
3048     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 21, 0, 0);
3049     test("abcdefghij", 5, 1, "", 0, 0, 1);
3050     test("abcdefghij", 5, 1, "", 0, 1, 1);
3051     test("abcdefghij", 5, 1, "", 1, 0, 0);
3052     test("abcdefghij", 5, 1, "abcde", 0, 0, 1);
3053     test("abcdefghij", 5, 1, "abcde", 0, 1, 5);
3054     test("abcdefghij", 5, 1, "abcde", 0, 2, 5);
3055     test("abcdefghij", 5, 1, "abcde", 0, 4, 5);
3056     test("abcdefghij", 5, 1, "abcde", 0, 5, 5);
3057     test("abcdefghij", 5, 1, "abcde", 0, 6, 5);
3058     test("abcdefghij", 5, 1, "abcde", 1, 0, 1);
3059     test("abcdefghij", 5, 1, "abcde", 1, 1, 4);
3060     test("abcdefghij", 5, 1, "abcde", 1, 2, 4);
3061     test("abcdefghij", 5, 1, "abcde", 1, 3, 4);
3062     test("abcdefghij", 5, 1, "abcde", 1, 4, 4);
3063 }
3064 
test29()3065 void test29()
3066 {
3067     test("abcdefghij", 5, 1, "abcde", 1, 5, 4);
3068     test("abcdefghij", 5, 1, "abcde", 2, 0, 1);
3069     test("abcdefghij", 5, 1, "abcde", 2, 1, 3);
3070     test("abcdefghij", 5, 1, "abcde", 2, 2, 3);
3071     test("abcdefghij", 5, 1, "abcde", 2, 3, 3);
3072     test("abcdefghij", 5, 1, "abcde", 2, 4, 3);
3073     test("abcdefghij", 5, 1, "abcde", 4, 0, 1);
3074     test("abcdefghij", 5, 1, "abcde", 4, 1, 1);
3075     test("abcdefghij", 5, 1, "abcde", 4, 2, 1);
3076     test("abcdefghij", 5, 1, "abcde", 5, 0, 1);
3077     test("abcdefghij", 5, 1, "abcde", 5, 1, 1);
3078     test("abcdefghij", 5, 1, "abcde", 6, 0, 0);
3079     test("abcdefghij", 5, 1, "abcdefghij", 0, 0, 1);
3080     test("abcdefghij", 5, 1, "abcdefghij", 0, 1, 5);
3081     test("abcdefghij", 5, 1, "abcdefghij", 0, 5, 5);
3082     test("abcdefghij", 5, 1, "abcdefghij", 0, 9, 5);
3083     test("abcdefghij", 5, 1, "abcdefghij", 0, 10, 5);
3084     test("abcdefghij", 5, 1, "abcdefghij", 0, 11, 5);
3085     test("abcdefghij", 5, 1, "abcdefghij", 1, 0, 1);
3086     test("abcdefghij", 5, 1, "abcdefghij", 1, 1, 4);
3087     test("abcdefghij", 5, 1, "abcdefghij", 1, 4, 4);
3088     test("abcdefghij", 5, 1, "abcdefghij", 1, 8, 4);
3089     test("abcdefghij", 5, 1, "abcdefghij", 1, 9, 4);
3090     test("abcdefghij", 5, 1, "abcdefghij", 1, 10, 4);
3091     test("abcdefghij", 5, 1, "abcdefghij", 5, 0, 1);
3092     test("abcdefghij", 5, 1, "abcdefghij", 5, 1, 0);
3093     test("abcdefghij", 5, 1, "abcdefghij", 5, 2, -1);
3094     test("abcdefghij", 5, 1, "abcdefghij", 5, 4, -3);
3095     test("abcdefghij", 5, 1, "abcdefghij", 5, 5, -4);
3096     test("abcdefghij", 5, 1, "abcdefghij", 5, 6, -4);
3097     test("abcdefghij", 5, 1, "abcdefghij", 9, 0, 1);
3098     test("abcdefghij", 5, 1, "abcdefghij", 9, 1, -4);
3099     test("abcdefghij", 5, 1, "abcdefghij", 9, 2, -4);
3100     test("abcdefghij", 5, 1, "abcdefghij", 10, 0, 1);
3101     test("abcdefghij", 5, 1, "abcdefghij", 10, 1, 1);
3102     test("abcdefghij", 5, 1, "abcdefghij", 11, 0, 0);
3103     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 0, 0, 1);
3104     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 0, 1, 5);
3105     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 0, 10, 5);
3106     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 0, 19, 5);
3107     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 0, 20, 5);
3108     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 0, 21, 5);
3109     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 1, 0, 1);
3110     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 1, 1, 4);
3111     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 1, 9, 4);
3112     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 1, 18, 4);
3113     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 1, 19, 4);
3114     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 1, 20, 4);
3115     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 10, 0, 1);
3116     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 10, 1, -5);
3117     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 10, 5, -5);
3118     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 10, 9, -5);
3119     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 10, 10, -5);
3120     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 10, 11, -5);
3121     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 19, 0, 1);
3122     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 19, 1, -14);
3123     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 19, 2, -14);
3124     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 20, 0, 1);
3125     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 20, 1, 1);
3126     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 21, 0, 0);
3127     test("abcdefghij", 5, 2, "", 0, 0, 2);
3128     test("abcdefghij", 5, 2, "", 0, 1, 2);
3129     test("abcdefghij", 5, 2, "", 1, 0, 0);
3130     test("abcdefghij", 5, 2, "abcde", 0, 0, 2);
3131     test("abcdefghij", 5, 2, "abcde", 0, 1, 5);
3132     test("abcdefghij", 5, 2, "abcde", 0, 2, 5);
3133     test("abcdefghij", 5, 2, "abcde", 0, 4, 5);
3134     test("abcdefghij", 5, 2, "abcde", 0, 5, 5);
3135     test("abcdefghij", 5, 2, "abcde", 0, 6, 5);
3136     test("abcdefghij", 5, 2, "abcde", 1, 0, 2);
3137     test("abcdefghij", 5, 2, "abcde", 1, 1, 4);
3138     test("abcdefghij", 5, 2, "abcde", 1, 2, 4);
3139     test("abcdefghij", 5, 2, "abcde", 1, 3, 4);
3140     test("abcdefghij", 5, 2, "abcde", 1, 4, 4);
3141     test("abcdefghij", 5, 2, "abcde", 1, 5, 4);
3142     test("abcdefghij", 5, 2, "abcde", 2, 0, 2);
3143     test("abcdefghij", 5, 2, "abcde", 2, 1, 3);
3144     test("abcdefghij", 5, 2, "abcde", 2, 2, 3);
3145     test("abcdefghij", 5, 2, "abcde", 2, 3, 3);
3146     test("abcdefghij", 5, 2, "abcde", 2, 4, 3);
3147     test("abcdefghij", 5, 2, "abcde", 4, 0, 2);
3148     test("abcdefghij", 5, 2, "abcde", 4, 1, 1);
3149     test("abcdefghij", 5, 2, "abcde", 4, 2, 1);
3150     test("abcdefghij", 5, 2, "abcde", 5, 0, 2);
3151     test("abcdefghij", 5, 2, "abcde", 5, 1, 2);
3152     test("abcdefghij", 5, 2, "abcde", 6, 0, 0);
3153     test("abcdefghij", 5, 2, "abcdefghij", 0, 0, 2);
3154     test("abcdefghij", 5, 2, "abcdefghij", 0, 1, 5);
3155     test("abcdefghij", 5, 2, "abcdefghij", 0, 5, 5);
3156     test("abcdefghij", 5, 2, "abcdefghij", 0, 9, 5);
3157     test("abcdefghij", 5, 2, "abcdefghij", 0, 10, 5);
3158     test("abcdefghij", 5, 2, "abcdefghij", 0, 11, 5);
3159     test("abcdefghij", 5, 2, "abcdefghij", 1, 0, 2);
3160     test("abcdefghij", 5, 2, "abcdefghij", 1, 1, 4);
3161     test("abcdefghij", 5, 2, "abcdefghij", 1, 4, 4);
3162     test("abcdefghij", 5, 2, "abcdefghij", 1, 8, 4);
3163     test("abcdefghij", 5, 2, "abcdefghij", 1, 9, 4);
3164     test("abcdefghij", 5, 2, "abcdefghij", 1, 10, 4);
3165     test("abcdefghij", 5, 2, "abcdefghij", 5, 0, 2);
3166     test("abcdefghij", 5, 2, "abcdefghij", 5, 1, 1);
3167 }
3168 
test30()3169 void test30()
3170 {
3171     test("abcdefghij", 5, 2, "abcdefghij", 5, 2, 0);
3172     test("abcdefghij", 5, 2, "abcdefghij", 5, 4, -2);
3173     test("abcdefghij", 5, 2, "abcdefghij", 5, 5, -3);
3174     test("abcdefghij", 5, 2, "abcdefghij", 5, 6, -3);
3175     test("abcdefghij", 5, 2, "abcdefghij", 9, 0, 2);
3176     test("abcdefghij", 5, 2, "abcdefghij", 9, 1, -4);
3177     test("abcdefghij", 5, 2, "abcdefghij", 9, 2, -4);
3178     test("abcdefghij", 5, 2, "abcdefghij", 10, 0, 2);
3179     test("abcdefghij", 5, 2, "abcdefghij", 10, 1, 2);
3180     test("abcdefghij", 5, 2, "abcdefghij", 11, 0, 0);
3181     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 0, 0, 2);
3182     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 0, 1, 5);
3183     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 0, 10, 5);
3184     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 0, 19, 5);
3185     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 0, 20, 5);
3186     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 0, 21, 5);
3187     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 1, 0, 2);
3188     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 1, 1, 4);
3189     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 1, 9, 4);
3190     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 1, 18, 4);
3191     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 1, 19, 4);
3192     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 1, 20, 4);
3193     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 10, 0, 2);
3194     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 10, 1, -5);
3195     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 10, 5, -5);
3196     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 10, 9, -5);
3197     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 10, 10, -5);
3198     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 10, 11, -5);
3199     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 19, 0, 2);
3200     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 19, 1, -14);
3201     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 19, 2, -14);
3202     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 20, 0, 2);
3203     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 20, 1, 2);
3204     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 21, 0, 0);
3205     test("abcdefghij", 5, 4, "", 0, 0, 4);
3206     test("abcdefghij", 5, 4, "", 0, 1, 4);
3207     test("abcdefghij", 5, 4, "", 1, 0, 0);
3208     test("abcdefghij", 5, 4, "abcde", 0, 0, 4);
3209     test("abcdefghij", 5, 4, "abcde", 0, 1, 5);
3210     test("abcdefghij", 5, 4, "abcde", 0, 2, 5);
3211     test("abcdefghij", 5, 4, "abcde", 0, 4, 5);
3212     test("abcdefghij", 5, 4, "abcde", 0, 5, 5);
3213     test("abcdefghij", 5, 4, "abcde", 0, 6, 5);
3214     test("abcdefghij", 5, 4, "abcde", 1, 0, 4);
3215     test("abcdefghij", 5, 4, "abcde", 1, 1, 4);
3216     test("abcdefghij", 5, 4, "abcde", 1, 2, 4);
3217     test("abcdefghij", 5, 4, "abcde", 1, 3, 4);
3218     test("abcdefghij", 5, 4, "abcde", 1, 4, 4);
3219     test("abcdefghij", 5, 4, "abcde", 1, 5, 4);
3220     test("abcdefghij", 5, 4, "abcde", 2, 0, 4);
3221     test("abcdefghij", 5, 4, "abcde", 2, 1, 3);
3222     test("abcdefghij", 5, 4, "abcde", 2, 2, 3);
3223     test("abcdefghij", 5, 4, "abcde", 2, 3, 3);
3224     test("abcdefghij", 5, 4, "abcde", 2, 4, 3);
3225     test("abcdefghij", 5, 4, "abcde", 4, 0, 4);
3226     test("abcdefghij", 5, 4, "abcde", 4, 1, 1);
3227     test("abcdefghij", 5, 4, "abcde", 4, 2, 1);
3228     test("abcdefghij", 5, 4, "abcde", 5, 0, 4);
3229     test("abcdefghij", 5, 4, "abcde", 5, 1, 4);
3230     test("abcdefghij", 5, 4, "abcde", 6, 0, 0);
3231     test("abcdefghij", 5, 4, "abcdefghij", 0, 0, 4);
3232     test("abcdefghij", 5, 4, "abcdefghij", 0, 1, 5);
3233     test("abcdefghij", 5, 4, "abcdefghij", 0, 5, 5);
3234     test("abcdefghij", 5, 4, "abcdefghij", 0, 9, 5);
3235     test("abcdefghij", 5, 4, "abcdefghij", 0, 10, 5);
3236     test("abcdefghij", 5, 4, "abcdefghij", 0, 11, 5);
3237     test("abcdefghij", 5, 4, "abcdefghij", 1, 0, 4);
3238     test("abcdefghij", 5, 4, "abcdefghij", 1, 1, 4);
3239     test("abcdefghij", 5, 4, "abcdefghij", 1, 4, 4);
3240     test("abcdefghij", 5, 4, "abcdefghij", 1, 8, 4);
3241     test("abcdefghij", 5, 4, "abcdefghij", 1, 9, 4);
3242     test("abcdefghij", 5, 4, "abcdefghij", 1, 10, 4);
3243     test("abcdefghij", 5, 4, "abcdefghij", 5, 0, 4);
3244     test("abcdefghij", 5, 4, "abcdefghij", 5, 1, 3);
3245     test("abcdefghij", 5, 4, "abcdefghij", 5, 2, 2);
3246     test("abcdefghij", 5, 4, "abcdefghij", 5, 4, 0);
3247     test("abcdefghij", 5, 4, "abcdefghij", 5, 5, -1);
3248     test("abcdefghij", 5, 4, "abcdefghij", 5, 6, -1);
3249     test("abcdefghij", 5, 4, "abcdefghij", 9, 0, 4);
3250     test("abcdefghij", 5, 4, "abcdefghij", 9, 1, -4);
3251     test("abcdefghij", 5, 4, "abcdefghij", 9, 2, -4);
3252     test("abcdefghij", 5, 4, "abcdefghij", 10, 0, 4);
3253     test("abcdefghij", 5, 4, "abcdefghij", 10, 1, 4);
3254     test("abcdefghij", 5, 4, "abcdefghij", 11, 0, 0);
3255     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 0, 0, 4);
3256     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 0, 1, 5);
3257     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 0, 10, 5);
3258     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 0, 19, 5);
3259     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 0, 20, 5);
3260     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 0, 21, 5);
3261     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 1, 0, 4);
3262     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 1, 1, 4);
3263     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 1, 9, 4);
3264     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 1, 18, 4);
3265     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 1, 19, 4);
3266     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 1, 20, 4);
3267     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 10, 0, 4);
3268     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 10, 1, -5);
3269     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 10, 5, -5);
3270     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 10, 9, -5);
3271 }
3272 
test31()3273 void test31()
3274 {
3275     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 10, 10, -5);
3276     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 10, 11, -5);
3277     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 19, 0, 4);
3278     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 19, 1, -14);
3279     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 19, 2, -14);
3280     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 20, 0, 4);
3281     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 20, 1, 4);
3282     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 21, 0, 0);
3283     test("abcdefghij", 5, 5, "", 0, 0, 5);
3284     test("abcdefghij", 5, 5, "", 0, 1, 5);
3285     test("abcdefghij", 5, 5, "", 1, 0, 0);
3286     test("abcdefghij", 5, 5, "abcde", 0, 0, 5);
3287     test("abcdefghij", 5, 5, "abcde", 0, 1, 5);
3288     test("abcdefghij", 5, 5, "abcde", 0, 2, 5);
3289     test("abcdefghij", 5, 5, "abcde", 0, 4, 5);
3290     test("abcdefghij", 5, 5, "abcde", 0, 5, 5);
3291     test("abcdefghij", 5, 5, "abcde", 0, 6, 5);
3292     test("abcdefghij", 5, 5, "abcde", 1, 0, 5);
3293     test("abcdefghij", 5, 5, "abcde", 1, 1, 4);
3294     test("abcdefghij", 5, 5, "abcde", 1, 2, 4);
3295     test("abcdefghij", 5, 5, "abcde", 1, 3, 4);
3296     test("abcdefghij", 5, 5, "abcde", 1, 4, 4);
3297     test("abcdefghij", 5, 5, "abcde", 1, 5, 4);
3298     test("abcdefghij", 5, 5, "abcde", 2, 0, 5);
3299     test("abcdefghij", 5, 5, "abcde", 2, 1, 3);
3300     test("abcdefghij", 5, 5, "abcde", 2, 2, 3);
3301     test("abcdefghij", 5, 5, "abcde", 2, 3, 3);
3302     test("abcdefghij", 5, 5, "abcde", 2, 4, 3);
3303     test("abcdefghij", 5, 5, "abcde", 4, 0, 5);
3304     test("abcdefghij", 5, 5, "abcde", 4, 1, 1);
3305     test("abcdefghij", 5, 5, "abcde", 4, 2, 1);
3306     test("abcdefghij", 5, 5, "abcde", 5, 0, 5);
3307     test("abcdefghij", 5, 5, "abcde", 5, 1, 5);
3308     test("abcdefghij", 5, 5, "abcde", 6, 0, 0);
3309     test("abcdefghij", 5, 5, "abcdefghij", 0, 0, 5);
3310     test("abcdefghij", 5, 5, "abcdefghij", 0, 1, 5);
3311     test("abcdefghij", 5, 5, "abcdefghij", 0, 5, 5);
3312     test("abcdefghij", 5, 5, "abcdefghij", 0, 9, 5);
3313     test("abcdefghij", 5, 5, "abcdefghij", 0, 10, 5);
3314     test("abcdefghij", 5, 5, "abcdefghij", 0, 11, 5);
3315     test("abcdefghij", 5, 5, "abcdefghij", 1, 0, 5);
3316     test("abcdefghij", 5, 5, "abcdefghij", 1, 1, 4);
3317     test("abcdefghij", 5, 5, "abcdefghij", 1, 4, 4);
3318     test("abcdefghij", 5, 5, "abcdefghij", 1, 8, 4);
3319     test("abcdefghij", 5, 5, "abcdefghij", 1, 9, 4);
3320     test("abcdefghij", 5, 5, "abcdefghij", 1, 10, 4);
3321     test("abcdefghij", 5, 5, "abcdefghij", 5, 0, 5);
3322     test("abcdefghij", 5, 5, "abcdefghij", 5, 1, 4);
3323     test("abcdefghij", 5, 5, "abcdefghij", 5, 2, 3);
3324     test("abcdefghij", 5, 5, "abcdefghij", 5, 4, 1);
3325     test("abcdefghij", 5, 5, "abcdefghij", 5, 5, 0);
3326     test("abcdefghij", 5, 5, "abcdefghij", 5, 6, 0);
3327     test("abcdefghij", 5, 5, "abcdefghij", 9, 0, 5);
3328     test("abcdefghij", 5, 5, "abcdefghij", 9, 1, -4);
3329     test("abcdefghij", 5, 5, "abcdefghij", 9, 2, -4);
3330     test("abcdefghij", 5, 5, "abcdefghij", 10, 0, 5);
3331     test("abcdefghij", 5, 5, "abcdefghij", 10, 1, 5);
3332     test("abcdefghij", 5, 5, "abcdefghij", 11, 0, 0);
3333     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 0, 0, 5);
3334     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 0, 1, 5);
3335     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 0, 10, 5);
3336     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 0, 19, 5);
3337     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 0, 20, 5);
3338     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 0, 21, 5);
3339     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 1, 0, 5);
3340     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 1, 1, 4);
3341     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 1, 9, 4);
3342     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 1, 18, 4);
3343     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 1, 19, 4);
3344     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 1, 20, 4);
3345     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 10, 0, 5);
3346     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 10, 1, -5);
3347     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 10, 5, -5);
3348     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 10, 9, -5);
3349     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 10, 10, -5);
3350     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 10, 11, -5);
3351     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 19, 0, 5);
3352     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 19, 1, -14);
3353     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 19, 2, -14);
3354     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 20, 0, 5);
3355     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 20, 1, 5);
3356     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 21, 0, 0);
3357     test("abcdefghij", 5, 6, "", 0, 0, 5);
3358     test("abcdefghij", 5, 6, "", 0, 1, 5);
3359     test("abcdefghij", 5, 6, "", 1, 0, 0);
3360     test("abcdefghij", 5, 6, "abcde", 0, 0, 5);
3361     test("abcdefghij", 5, 6, "abcde", 0, 1, 5);
3362     test("abcdefghij", 5, 6, "abcde", 0, 2, 5);
3363     test("abcdefghij", 5, 6, "abcde", 0, 4, 5);
3364     test("abcdefghij", 5, 6, "abcde", 0, 5, 5);
3365     test("abcdefghij", 5, 6, "abcde", 0, 6, 5);
3366     test("abcdefghij", 5, 6, "abcde", 1, 0, 5);
3367     test("abcdefghij", 5, 6, "abcde", 1, 1, 4);
3368     test("abcdefghij", 5, 6, "abcde", 1, 2, 4);
3369     test("abcdefghij", 5, 6, "abcde", 1, 3, 4);
3370     test("abcdefghij", 5, 6, "abcde", 1, 4, 4);
3371     test("abcdefghij", 5, 6, "abcde", 1, 5, 4);
3372     test("abcdefghij", 5, 6, "abcde", 2, 0, 5);
3373     test("abcdefghij", 5, 6, "abcde", 2, 1, 3);
3374     test("abcdefghij", 5, 6, "abcde", 2, 2, 3);
3375 }
3376 
test32()3377 void test32()
3378 {
3379     test("abcdefghij", 5, 6, "abcde", 2, 3, 3);
3380     test("abcdefghij", 5, 6, "abcde", 2, 4, 3);
3381     test("abcdefghij", 5, 6, "abcde", 4, 0, 5);
3382     test("abcdefghij", 5, 6, "abcde", 4, 1, 1);
3383     test("abcdefghij", 5, 6, "abcde", 4, 2, 1);
3384     test("abcdefghij", 5, 6, "abcde", 5, 0, 5);
3385     test("abcdefghij", 5, 6, "abcde", 5, 1, 5);
3386     test("abcdefghij", 5, 6, "abcde", 6, 0, 0);
3387     test("abcdefghij", 5, 6, "abcdefghij", 0, 0, 5);
3388     test("abcdefghij", 5, 6, "abcdefghij", 0, 1, 5);
3389     test("abcdefghij", 5, 6, "abcdefghij", 0, 5, 5);
3390     test("abcdefghij", 5, 6, "abcdefghij", 0, 9, 5);
3391     test("abcdefghij", 5, 6, "abcdefghij", 0, 10, 5);
3392     test("abcdefghij", 5, 6, "abcdefghij", 0, 11, 5);
3393     test("abcdefghij", 5, 6, "abcdefghij", 1, 0, 5);
3394     test("abcdefghij", 5, 6, "abcdefghij", 1, 1, 4);
3395     test("abcdefghij", 5, 6, "abcdefghij", 1, 4, 4);
3396     test("abcdefghij", 5, 6, "abcdefghij", 1, 8, 4);
3397     test("abcdefghij", 5, 6, "abcdefghij", 1, 9, 4);
3398     test("abcdefghij", 5, 6, "abcdefghij", 1, 10, 4);
3399     test("abcdefghij", 5, 6, "abcdefghij", 5, 0, 5);
3400     test("abcdefghij", 5, 6, "abcdefghij", 5, 1, 4);
3401     test("abcdefghij", 5, 6, "abcdefghij", 5, 2, 3);
3402     test("abcdefghij", 5, 6, "abcdefghij", 5, 4, 1);
3403     test("abcdefghij", 5, 6, "abcdefghij", 5, 5, 0);
3404     test("abcdefghij", 5, 6, "abcdefghij", 5, 6, 0);
3405     test("abcdefghij", 5, 6, "abcdefghij", 9, 0, 5);
3406     test("abcdefghij", 5, 6, "abcdefghij", 9, 1, -4);
3407     test("abcdefghij", 5, 6, "abcdefghij", 9, 2, -4);
3408     test("abcdefghij", 5, 6, "abcdefghij", 10, 0, 5);
3409     test("abcdefghij", 5, 6, "abcdefghij", 10, 1, 5);
3410     test("abcdefghij", 5, 6, "abcdefghij", 11, 0, 0);
3411     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 0, 0, 5);
3412     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 0, 1, 5);
3413     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 0, 10, 5);
3414     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 0, 19, 5);
3415     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 0, 20, 5);
3416     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 0, 21, 5);
3417     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 1, 0, 5);
3418     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 1, 1, 4);
3419     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 1, 9, 4);
3420     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 1, 18, 4);
3421     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 1, 19, 4);
3422     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 1, 20, 4);
3423     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 10, 0, 5);
3424     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 10, 1, -5);
3425     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 10, 5, -5);
3426     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 10, 9, -5);
3427     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 10, 10, -5);
3428     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 10, 11, -5);
3429     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 19, 0, 5);
3430     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 19, 1, -14);
3431     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 19, 2, -14);
3432     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 20, 0, 5);
3433     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 20, 1, 5);
3434     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 21, 0, 0);
3435     test("abcdefghij", 9, 0, "", 0, 0, 0);
3436     test("abcdefghij", 9, 0, "", 0, 1, 0);
3437     test("abcdefghij", 9, 0, "", 1, 0, 0);
3438     test("abcdefghij", 9, 0, "abcde", 0, 0, 0);
3439     test("abcdefghij", 9, 0, "abcde", 0, 1, -1);
3440     test("abcdefghij", 9, 0, "abcde", 0, 2, -2);
3441     test("abcdefghij", 9, 0, "abcde", 0, 4, -4);
3442     test("abcdefghij", 9, 0, "abcde", 0, 5, -5);
3443     test("abcdefghij", 9, 0, "abcde", 0, 6, -5);
3444     test("abcdefghij", 9, 0, "abcde", 1, 0, 0);
3445     test("abcdefghij", 9, 0, "abcde", 1, 1, -1);
3446     test("abcdefghij", 9, 0, "abcde", 1, 2, -2);
3447     test("abcdefghij", 9, 0, "abcde", 1, 3, -3);
3448     test("abcdefghij", 9, 0, "abcde", 1, 4, -4);
3449     test("abcdefghij", 9, 0, "abcde", 1, 5, -4);
3450     test("abcdefghij", 9, 0, "abcde", 2, 0, 0);
3451     test("abcdefghij", 9, 0, "abcde", 2, 1, -1);
3452     test("abcdefghij", 9, 0, "abcde", 2, 2, -2);
3453     test("abcdefghij", 9, 0, "abcde", 2, 3, -3);
3454     test("abcdefghij", 9, 0, "abcde", 2, 4, -3);
3455     test("abcdefghij", 9, 0, "abcde", 4, 0, 0);
3456     test("abcdefghij", 9, 0, "abcde", 4, 1, -1);
3457     test("abcdefghij", 9, 0, "abcde", 4, 2, -1);
3458     test("abcdefghij", 9, 0, "abcde", 5, 0, 0);
3459     test("abcdefghij", 9, 0, "abcde", 5, 1, 0);
3460     test("abcdefghij", 9, 0, "abcde", 6, 0, 0);
3461     test("abcdefghij", 9, 0, "abcdefghij", 0, 0, 0);
3462     test("abcdefghij", 9, 0, "abcdefghij", 0, 1, -1);
3463     test("abcdefghij", 9, 0, "abcdefghij", 0, 5, -5);
3464     test("abcdefghij", 9, 0, "abcdefghij", 0, 9, -9);
3465     test("abcdefghij", 9, 0, "abcdefghij", 0, 10, -10);
3466     test("abcdefghij", 9, 0, "abcdefghij", 0, 11, -10);
3467     test("abcdefghij", 9, 0, "abcdefghij", 1, 0, 0);
3468     test("abcdefghij", 9, 0, "abcdefghij", 1, 1, -1);
3469     test("abcdefghij", 9, 0, "abcdefghij", 1, 4, -4);
3470     test("abcdefghij", 9, 0, "abcdefghij", 1, 8, -8);
3471     test("abcdefghij", 9, 0, "abcdefghij", 1, 9, -9);
3472     test("abcdefghij", 9, 0, "abcdefghij", 1, 10, -9);
3473     test("abcdefghij", 9, 0, "abcdefghij", 5, 0, 0);
3474     test("abcdefghij", 9, 0, "abcdefghij", 5, 1, -1);
3475     test("abcdefghij", 9, 0, "abcdefghij", 5, 2, -2);
3476     test("abcdefghij", 9, 0, "abcdefghij", 5, 4, -4);
3477     test("abcdefghij", 9, 0, "abcdefghij", 5, 5, -5);
3478     test("abcdefghij", 9, 0, "abcdefghij", 5, 6, -5);
3479 }
3480 
test33()3481 void test33()
3482 {
3483     test("abcdefghij", 9, 0, "abcdefghij", 9, 0, 0);
3484     test("abcdefghij", 9, 0, "abcdefghij", 9, 1, -1);
3485     test("abcdefghij", 9, 0, "abcdefghij", 9, 2, -1);
3486     test("abcdefghij", 9, 0, "abcdefghij", 10, 0, 0);
3487     test("abcdefghij", 9, 0, "abcdefghij", 10, 1, 0);
3488     test("abcdefghij", 9, 0, "abcdefghij", 11, 0, 0);
3489     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 0, 0, 0);
3490     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 0, 1, -1);
3491     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 0, 10, -10);
3492     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 0, 19, -19);
3493     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 0, 20, -20);
3494     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 0, 21, -20);
3495     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 1, 0, 0);
3496     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 1, 1, -1);
3497     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 1, 9, -9);
3498     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 1, 18, -18);
3499     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 1, 19, -19);
3500     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 1, 20, -19);
3501     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 10, 0, 0);
3502     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 10, 1, -1);
3503     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 10, 5, -5);
3504     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 10, 9, -9);
3505     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 10, 10, -10);
3506     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 10, 11, -10);
3507     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 19, 0, 0);
3508     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 19, 1, -1);
3509     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 19, 2, -1);
3510     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 20, 0, 0);
3511     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 20, 1, 0);
3512     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 21, 0, 0);
3513     test("abcdefghij", 9, 1, "", 0, 0, 1);
3514     test("abcdefghij", 9, 1, "", 0, 1, 1);
3515     test("abcdefghij", 9, 1, "", 1, 0, 0);
3516     test("abcdefghij", 9, 1, "abcde", 0, 0, 1);
3517     test("abcdefghij", 9, 1, "abcde", 0, 1, 9);
3518     test("abcdefghij", 9, 1, "abcde", 0, 2, 9);
3519     test("abcdefghij", 9, 1, "abcde", 0, 4, 9);
3520     test("abcdefghij", 9, 1, "abcde", 0, 5, 9);
3521     test("abcdefghij", 9, 1, "abcde", 0, 6, 9);
3522     test("abcdefghij", 9, 1, "abcde", 1, 0, 1);
3523     test("abcdefghij", 9, 1, "abcde", 1, 1, 8);
3524     test("abcdefghij", 9, 1, "abcde", 1, 2, 8);
3525     test("abcdefghij", 9, 1, "abcde", 1, 3, 8);
3526     test("abcdefghij", 9, 1, "abcde", 1, 4, 8);
3527     test("abcdefghij", 9, 1, "abcde", 1, 5, 8);
3528     test("abcdefghij", 9, 1, "abcde", 2, 0, 1);
3529     test("abcdefghij", 9, 1, "abcde", 2, 1, 7);
3530     test("abcdefghij", 9, 1, "abcde", 2, 2, 7);
3531     test("abcdefghij", 9, 1, "abcde", 2, 3, 7);
3532     test("abcdefghij", 9, 1, "abcde", 2, 4, 7);
3533     test("abcdefghij", 9, 1, "abcde", 4, 0, 1);
3534     test("abcdefghij", 9, 1, "abcde", 4, 1, 5);
3535     test("abcdefghij", 9, 1, "abcde", 4, 2, 5);
3536     test("abcdefghij", 9, 1, "abcde", 5, 0, 1);
3537     test("abcdefghij", 9, 1, "abcde", 5, 1, 1);
3538     test("abcdefghij", 9, 1, "abcde", 6, 0, 0);
3539     test("abcdefghij", 9, 1, "abcdefghij", 0, 0, 1);
3540     test("abcdefghij", 9, 1, "abcdefghij", 0, 1, 9);
3541     test("abcdefghij", 9, 1, "abcdefghij", 0, 5, 9);
3542     test("abcdefghij", 9, 1, "abcdefghij", 0, 9, 9);
3543     test("abcdefghij", 9, 1, "abcdefghij", 0, 10, 9);
3544     test("abcdefghij", 9, 1, "abcdefghij", 0, 11, 9);
3545     test("abcdefghij", 9, 1, "abcdefghij", 1, 0, 1);
3546     test("abcdefghij", 9, 1, "abcdefghij", 1, 1, 8);
3547     test("abcdefghij", 9, 1, "abcdefghij", 1, 4, 8);
3548     test("abcdefghij", 9, 1, "abcdefghij", 1, 8, 8);
3549     test("abcdefghij", 9, 1, "abcdefghij", 1, 9, 8);
3550     test("abcdefghij", 9, 1, "abcdefghij", 1, 10, 8);
3551     test("abcdefghij", 9, 1, "abcdefghij", 5, 0, 1);
3552     test("abcdefghij", 9, 1, "abcdefghij", 5, 1, 4);
3553     test("abcdefghij", 9, 1, "abcdefghij", 5, 2, 4);
3554     test("abcdefghij", 9, 1, "abcdefghij", 5, 4, 4);
3555     test("abcdefghij", 9, 1, "abcdefghij", 5, 5, 4);
3556     test("abcdefghij", 9, 1, "abcdefghij", 5, 6, 4);
3557     test("abcdefghij", 9, 1, "abcdefghij", 9, 0, 1);
3558     test("abcdefghij", 9, 1, "abcdefghij", 9, 1, 0);
3559     test("abcdefghij", 9, 1, "abcdefghij", 9, 2, 0);
3560     test("abcdefghij", 9, 1, "abcdefghij", 10, 0, 1);
3561     test("abcdefghij", 9, 1, "abcdefghij", 10, 1, 1);
3562     test("abcdefghij", 9, 1, "abcdefghij", 11, 0, 0);
3563     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 0, 0, 1);
3564     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 0, 1, 9);
3565     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 0, 10, 9);
3566     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 0, 19, 9);
3567     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 0, 20, 9);
3568     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 0, 21, 9);
3569     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 1, 0, 1);
3570     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 1, 1, 8);
3571     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 1, 9, 8);
3572     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 1, 18, 8);
3573     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 1, 19, 8);
3574     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 1, 20, 8);
3575     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 10, 0, 1);
3576     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 10, 1, -1);
3577     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 10, 5, -1);
3578     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 10, 9, -1);
3579     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 10, 10, -1);
3580     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 10, 11, -1);
3581     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 19, 0, 1);
3582     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 19, 1, -10);
3583 }
3584 
test34()3585 void test34()
3586 {
3587     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 19, 2, -10);
3588     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 20, 0, 1);
3589     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 20, 1, 1);
3590     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 21, 0, 0);
3591     test("abcdefghij", 9, 2, "", 0, 0, 1);
3592     test("abcdefghij", 9, 2, "", 0, 1, 1);
3593     test("abcdefghij", 9, 2, "", 1, 0, 0);
3594     test("abcdefghij", 9, 2, "abcde", 0, 0, 1);
3595     test("abcdefghij", 9, 2, "abcde", 0, 1, 9);
3596     test("abcdefghij", 9, 2, "abcde", 0, 2, 9);
3597     test("abcdefghij", 9, 2, "abcde", 0, 4, 9);
3598     test("abcdefghij", 9, 2, "abcde", 0, 5, 9);
3599     test("abcdefghij", 9, 2, "abcde", 0, 6, 9);
3600     test("abcdefghij", 9, 2, "abcde", 1, 0, 1);
3601     test("abcdefghij", 9, 2, "abcde", 1, 1, 8);
3602     test("abcdefghij", 9, 2, "abcde", 1, 2, 8);
3603     test("abcdefghij", 9, 2, "abcde", 1, 3, 8);
3604     test("abcdefghij", 9, 2, "abcde", 1, 4, 8);
3605     test("abcdefghij", 9, 2, "abcde", 1, 5, 8);
3606     test("abcdefghij", 9, 2, "abcde", 2, 0, 1);
3607     test("abcdefghij", 9, 2, "abcde", 2, 1, 7);
3608     test("abcdefghij", 9, 2, "abcde", 2, 2, 7);
3609     test("abcdefghij", 9, 2, "abcde", 2, 3, 7);
3610     test("abcdefghij", 9, 2, "abcde", 2, 4, 7);
3611     test("abcdefghij", 9, 2, "abcde", 4, 0, 1);
3612     test("abcdefghij", 9, 2, "abcde", 4, 1, 5);
3613     test("abcdefghij", 9, 2, "abcde", 4, 2, 5);
3614     test("abcdefghij", 9, 2, "abcde", 5, 0, 1);
3615     test("abcdefghij", 9, 2, "abcde", 5, 1, 1);
3616     test("abcdefghij", 9, 2, "abcde", 6, 0, 0);
3617     test("abcdefghij", 9, 2, "abcdefghij", 0, 0, 1);
3618     test("abcdefghij", 9, 2, "abcdefghij", 0, 1, 9);
3619     test("abcdefghij", 9, 2, "abcdefghij", 0, 5, 9);
3620     test("abcdefghij", 9, 2, "abcdefghij", 0, 9, 9);
3621     test("abcdefghij", 9, 2, "abcdefghij", 0, 10, 9);
3622     test("abcdefghij", 9, 2, "abcdefghij", 0, 11, 9);
3623     test("abcdefghij", 9, 2, "abcdefghij", 1, 0, 1);
3624     test("abcdefghij", 9, 2, "abcdefghij", 1, 1, 8);
3625     test("abcdefghij", 9, 2, "abcdefghij", 1, 4, 8);
3626     test("abcdefghij", 9, 2, "abcdefghij", 1, 8, 8);
3627     test("abcdefghij", 9, 2, "abcdefghij", 1, 9, 8);
3628     test("abcdefghij", 9, 2, "abcdefghij", 1, 10, 8);
3629     test("abcdefghij", 9, 2, "abcdefghij", 5, 0, 1);
3630     test("abcdefghij", 9, 2, "abcdefghij", 5, 1, 4);
3631     test("abcdefghij", 9, 2, "abcdefghij", 5, 2, 4);
3632     test("abcdefghij", 9, 2, "abcdefghij", 5, 4, 4);
3633     test("abcdefghij", 9, 2, "abcdefghij", 5, 5, 4);
3634     test("abcdefghij", 9, 2, "abcdefghij", 5, 6, 4);
3635     test("abcdefghij", 9, 2, "abcdefghij", 9, 0, 1);
3636     test("abcdefghij", 9, 2, "abcdefghij", 9, 1, 0);
3637     test("abcdefghij", 9, 2, "abcdefghij", 9, 2, 0);
3638     test("abcdefghij", 9, 2, "abcdefghij", 10, 0, 1);
3639     test("abcdefghij", 9, 2, "abcdefghij", 10, 1, 1);
3640     test("abcdefghij", 9, 2, "abcdefghij", 11, 0, 0);
3641     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 0, 0, 1);
3642     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 0, 1, 9);
3643     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 0, 10, 9);
3644     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 0, 19, 9);
3645     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 0, 20, 9);
3646     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 0, 21, 9);
3647     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 1, 0, 1);
3648     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 1, 1, 8);
3649     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 1, 9, 8);
3650     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 1, 18, 8);
3651     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 1, 19, 8);
3652     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 1, 20, 8);
3653     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 10, 0, 1);
3654     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 10, 1, -1);
3655     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 10, 5, -1);
3656     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 10, 9, -1);
3657     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 10, 10, -1);
3658     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 10, 11, -1);
3659     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 19, 0, 1);
3660     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 19, 1, -10);
3661     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 19, 2, -10);
3662     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 20, 0, 1);
3663     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 20, 1, 1);
3664     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 21, 0, 0);
3665     test("abcdefghij", 10, 0, "", 0, 0, 0);
3666     test("abcdefghij", 10, 0, "", 0, 1, 0);
3667     test("abcdefghij", 10, 0, "", 1, 0, 0);
3668     test("abcdefghij", 10, 0, "abcde", 0, 0, 0);
3669     test("abcdefghij", 10, 0, "abcde", 0, 1, -1);
3670     test("abcdefghij", 10, 0, "abcde", 0, 2, -2);
3671     test("abcdefghij", 10, 0, "abcde", 0, 4, -4);
3672     test("abcdefghij", 10, 0, "abcde", 0, 5, -5);
3673     test("abcdefghij", 10, 0, "abcde", 0, 6, -5);
3674     test("abcdefghij", 10, 0, "abcde", 1, 0, 0);
3675     test("abcdefghij", 10, 0, "abcde", 1, 1, -1);
3676     test("abcdefghij", 10, 0, "abcde", 1, 2, -2);
3677     test("abcdefghij", 10, 0, "abcde", 1, 3, -3);
3678     test("abcdefghij", 10, 0, "abcde", 1, 4, -4);
3679     test("abcdefghij", 10, 0, "abcde", 1, 5, -4);
3680     test("abcdefghij", 10, 0, "abcde", 2, 0, 0);
3681     test("abcdefghij", 10, 0, "abcde", 2, 1, -1);
3682     test("abcdefghij", 10, 0, "abcde", 2, 2, -2);
3683     test("abcdefghij", 10, 0, "abcde", 2, 3, -3);
3684     test("abcdefghij", 10, 0, "abcde", 2, 4, -3);
3685     test("abcdefghij", 10, 0, "abcde", 4, 0, 0);
3686     test("abcdefghij", 10, 0, "abcde", 4, 1, -1);
3687 }
3688 
test35()3689 void test35()
3690 {
3691     test("abcdefghij", 10, 0, "abcde", 4, 2, -1);
3692     test("abcdefghij", 10, 0, "abcde", 5, 0, 0);
3693     test("abcdefghij", 10, 0, "abcde", 5, 1, 0);
3694     test("abcdefghij", 10, 0, "abcde", 6, 0, 0);
3695     test("abcdefghij", 10, 0, "abcdefghij", 0, 0, 0);
3696     test("abcdefghij", 10, 0, "abcdefghij", 0, 1, -1);
3697     test("abcdefghij", 10, 0, "abcdefghij", 0, 5, -5);
3698     test("abcdefghij", 10, 0, "abcdefghij", 0, 9, -9);
3699     test("abcdefghij", 10, 0, "abcdefghij", 0, 10, -10);
3700     test("abcdefghij", 10, 0, "abcdefghij", 0, 11, -10);
3701     test("abcdefghij", 10, 0, "abcdefghij", 1, 0, 0);
3702     test("abcdefghij", 10, 0, "abcdefghij", 1, 1, -1);
3703     test("abcdefghij", 10, 0, "abcdefghij", 1, 4, -4);
3704     test("abcdefghij", 10, 0, "abcdefghij", 1, 8, -8);
3705     test("abcdefghij", 10, 0, "abcdefghij", 1, 9, -9);
3706     test("abcdefghij", 10, 0, "abcdefghij", 1, 10, -9);
3707     test("abcdefghij", 10, 0, "abcdefghij", 5, 0, 0);
3708     test("abcdefghij", 10, 0, "abcdefghij", 5, 1, -1);
3709     test("abcdefghij", 10, 0, "abcdefghij", 5, 2, -2);
3710     test("abcdefghij", 10, 0, "abcdefghij", 5, 4, -4);
3711     test("abcdefghij", 10, 0, "abcdefghij", 5, 5, -5);
3712     test("abcdefghij", 10, 0, "abcdefghij", 5, 6, -5);
3713     test("abcdefghij", 10, 0, "abcdefghij", 9, 0, 0);
3714     test("abcdefghij", 10, 0, "abcdefghij", 9, 1, -1);
3715     test("abcdefghij", 10, 0, "abcdefghij", 9, 2, -1);
3716     test("abcdefghij", 10, 0, "abcdefghij", 10, 0, 0);
3717     test("abcdefghij", 10, 0, "abcdefghij", 10, 1, 0);
3718     test("abcdefghij", 10, 0, "abcdefghij", 11, 0, 0);
3719     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 0, 0, 0);
3720     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 0, 1, -1);
3721     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 0, 10, -10);
3722     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 0, 19, -19);
3723     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 0, 20, -20);
3724     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 0, 21, -20);
3725     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 1, 0, 0);
3726     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 1, 1, -1);
3727     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 1, 9, -9);
3728     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 1, 18, -18);
3729     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 1, 19, -19);
3730     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 1, 20, -19);
3731     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 10, 0, 0);
3732     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 10, 1, -1);
3733     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 10, 5, -5);
3734     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 10, 9, -9);
3735     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 10, 10, -10);
3736     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 10, 11, -10);
3737     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 19, 0, 0);
3738     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 19, 1, -1);
3739     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 19, 2, -1);
3740     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 20, 0, 0);
3741     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 20, 1, 0);
3742     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 21, 0, 0);
3743     test("abcdefghij", 10, 1, "", 0, 0, 0);
3744     test("abcdefghij", 10, 1, "", 0, 1, 0);
3745     test("abcdefghij", 10, 1, "", 1, 0, 0);
3746     test("abcdefghij", 10, 1, "abcde", 0, 0, 0);
3747     test("abcdefghij", 10, 1, "abcde", 0, 1, -1);
3748     test("abcdefghij", 10, 1, "abcde", 0, 2, -2);
3749     test("abcdefghij", 10, 1, "abcde", 0, 4, -4);
3750     test("abcdefghij", 10, 1, "abcde", 0, 5, -5);
3751     test("abcdefghij", 10, 1, "abcde", 0, 6, -5);
3752     test("abcdefghij", 10, 1, "abcde", 1, 0, 0);
3753     test("abcdefghij", 10, 1, "abcde", 1, 1, -1);
3754     test("abcdefghij", 10, 1, "abcde", 1, 2, -2);
3755     test("abcdefghij", 10, 1, "abcde", 1, 3, -3);
3756     test("abcdefghij", 10, 1, "abcde", 1, 4, -4);
3757     test("abcdefghij", 10, 1, "abcde", 1, 5, -4);
3758     test("abcdefghij", 10, 1, "abcde", 2, 0, 0);
3759     test("abcdefghij", 10, 1, "abcde", 2, 1, -1);
3760     test("abcdefghij", 10, 1, "abcde", 2, 2, -2);
3761     test("abcdefghij", 10, 1, "abcde", 2, 3, -3);
3762     test("abcdefghij", 10, 1, "abcde", 2, 4, -3);
3763     test("abcdefghij", 10, 1, "abcde", 4, 0, 0);
3764     test("abcdefghij", 10, 1, "abcde", 4, 1, -1);
3765     test("abcdefghij", 10, 1, "abcde", 4, 2, -1);
3766     test("abcdefghij", 10, 1, "abcde", 5, 0, 0);
3767     test("abcdefghij", 10, 1, "abcde", 5, 1, 0);
3768     test("abcdefghij", 10, 1, "abcde", 6, 0, 0);
3769     test("abcdefghij", 10, 1, "abcdefghij", 0, 0, 0);
3770     test("abcdefghij", 10, 1, "abcdefghij", 0, 1, -1);
3771     test("abcdefghij", 10, 1, "abcdefghij", 0, 5, -5);
3772     test("abcdefghij", 10, 1, "abcdefghij", 0, 9, -9);
3773     test("abcdefghij", 10, 1, "abcdefghij", 0, 10, -10);
3774     test("abcdefghij", 10, 1, "abcdefghij", 0, 11, -10);
3775     test("abcdefghij", 10, 1, "abcdefghij", 1, 0, 0);
3776     test("abcdefghij", 10, 1, "abcdefghij", 1, 1, -1);
3777     test("abcdefghij", 10, 1, "abcdefghij", 1, 4, -4);
3778     test("abcdefghij", 10, 1, "abcdefghij", 1, 8, -8);
3779     test("abcdefghij", 10, 1, "abcdefghij", 1, 9, -9);
3780     test("abcdefghij", 10, 1, "abcdefghij", 1, 10, -9);
3781     test("abcdefghij", 10, 1, "abcdefghij", 5, 0, 0);
3782     test("abcdefghij", 10, 1, "abcdefghij", 5, 1, -1);
3783     test("abcdefghij", 10, 1, "abcdefghij", 5, 2, -2);
3784     test("abcdefghij", 10, 1, "abcdefghij", 5, 4, -4);
3785     test("abcdefghij", 10, 1, "abcdefghij", 5, 5, -5);
3786     test("abcdefghij", 10, 1, "abcdefghij", 5, 6, -5);
3787     test("abcdefghij", 10, 1, "abcdefghij", 9, 0, 0);
3788     test("abcdefghij", 10, 1, "abcdefghij", 9, 1, -1);
3789     test("abcdefghij", 10, 1, "abcdefghij", 9, 2, -1);
3790     test("abcdefghij", 10, 1, "abcdefghij", 10, 0, 0);
3791 }
3792 
test36()3793 void test36()
3794 {
3795     test("abcdefghij", 10, 1, "abcdefghij", 10, 1, 0);
3796     test("abcdefghij", 10, 1, "abcdefghij", 11, 0, 0);
3797     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 0, 0, 0);
3798     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 0, 1, -1);
3799     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 0, 10, -10);
3800     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 0, 19, -19);
3801     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 0, 20, -20);
3802     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 0, 21, -20);
3803     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 1, 0, 0);
3804     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 1, 1, -1);
3805     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 1, 9, -9);
3806     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 1, 18, -18);
3807     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 1, 19, -19);
3808     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 1, 20, -19);
3809     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 10, 0, 0);
3810     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 10, 1, -1);
3811     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 10, 5, -5);
3812     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 10, 9, -9);
3813     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 10, 10, -10);
3814     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 10, 11, -10);
3815     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 19, 0, 0);
3816     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 19, 1, -1);
3817     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 19, 2, -1);
3818     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 20, 0, 0);
3819     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 20, 1, 0);
3820     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 21, 0, 0);
3821     test("abcdefghij", 11, 0, "", 0, 0, 0);
3822     test("abcdefghij", 11, 0, "", 0, 1, 0);
3823     test("abcdefghij", 11, 0, "", 1, 0, 0);
3824     test("abcdefghij", 11, 0, "abcde", 0, 0, 0);
3825     test("abcdefghij", 11, 0, "abcde", 0, 1, 0);
3826     test("abcdefghij", 11, 0, "abcde", 0, 2, 0);
3827     test("abcdefghij", 11, 0, "abcde", 0, 4, 0);
3828     test("abcdefghij", 11, 0, "abcde", 0, 5, 0);
3829     test("abcdefghij", 11, 0, "abcde", 0, 6, 0);
3830     test("abcdefghij", 11, 0, "abcde", 1, 0, 0);
3831     test("abcdefghij", 11, 0, "abcde", 1, 1, 0);
3832     test("abcdefghij", 11, 0, "abcde", 1, 2, 0);
3833     test("abcdefghij", 11, 0, "abcde", 1, 3, 0);
3834     test("abcdefghij", 11, 0, "abcde", 1, 4, 0);
3835     test("abcdefghij", 11, 0, "abcde", 1, 5, 0);
3836     test("abcdefghij", 11, 0, "abcde", 2, 0, 0);
3837     test("abcdefghij", 11, 0, "abcde", 2, 1, 0);
3838     test("abcdefghij", 11, 0, "abcde", 2, 2, 0);
3839     test("abcdefghij", 11, 0, "abcde", 2, 3, 0);
3840     test("abcdefghij", 11, 0, "abcde", 2, 4, 0);
3841     test("abcdefghij", 11, 0, "abcde", 4, 0, 0);
3842     test("abcdefghij", 11, 0, "abcde", 4, 1, 0);
3843     test("abcdefghij", 11, 0, "abcde", 4, 2, 0);
3844     test("abcdefghij", 11, 0, "abcde", 5, 0, 0);
3845     test("abcdefghij", 11, 0, "abcde", 5, 1, 0);
3846     test("abcdefghij", 11, 0, "abcde", 6, 0, 0);
3847     test("abcdefghij", 11, 0, "abcdefghij", 0, 0, 0);
3848     test("abcdefghij", 11, 0, "abcdefghij", 0, 1, 0);
3849     test("abcdefghij", 11, 0, "abcdefghij", 0, 5, 0);
3850     test("abcdefghij", 11, 0, "abcdefghij", 0, 9, 0);
3851     test("abcdefghij", 11, 0, "abcdefghij", 0, 10, 0);
3852     test("abcdefghij", 11, 0, "abcdefghij", 0, 11, 0);
3853     test("abcdefghij", 11, 0, "abcdefghij", 1, 0, 0);
3854     test("abcdefghij", 11, 0, "abcdefghij", 1, 1, 0);
3855     test("abcdefghij", 11, 0, "abcdefghij", 1, 4, 0);
3856     test("abcdefghij", 11, 0, "abcdefghij", 1, 8, 0);
3857     test("abcdefghij", 11, 0, "abcdefghij", 1, 9, 0);
3858     test("abcdefghij", 11, 0, "abcdefghij", 1, 10, 0);
3859     test("abcdefghij", 11, 0, "abcdefghij", 5, 0, 0);
3860     test("abcdefghij", 11, 0, "abcdefghij", 5, 1, 0);
3861     test("abcdefghij", 11, 0, "abcdefghij", 5, 2, 0);
3862     test("abcdefghij", 11, 0, "abcdefghij", 5, 4, 0);
3863     test("abcdefghij", 11, 0, "abcdefghij", 5, 5, 0);
3864     test("abcdefghij", 11, 0, "abcdefghij", 5, 6, 0);
3865     test("abcdefghij", 11, 0, "abcdefghij", 9, 0, 0);
3866     test("abcdefghij", 11, 0, "abcdefghij", 9, 1, 0);
3867     test("abcdefghij", 11, 0, "abcdefghij", 9, 2, 0);
3868     test("abcdefghij", 11, 0, "abcdefghij", 10, 0, 0);
3869     test("abcdefghij", 11, 0, "abcdefghij", 10, 1, 0);
3870     test("abcdefghij", 11, 0, "abcdefghij", 11, 0, 0);
3871     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0, 0, 0);
3872     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0, 1, 0);
3873     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0, 10, 0);
3874     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0, 19, 0);
3875     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0, 20, 0);
3876     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0, 21, 0);
3877     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 1, 0, 0);
3878     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 1, 1, 0);
3879     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 1, 9, 0);
3880     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 1, 18, 0);
3881     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 1, 19, 0);
3882     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 1, 20, 0);
3883     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 10, 0, 0);
3884     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 10, 1, 0);
3885     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 10, 5, 0);
3886     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 10, 9, 0);
3887     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 10, 10, 0);
3888     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 10, 11, 0);
3889     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 19, 0, 0);
3890     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 19, 1, 0);
3891     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 19, 2, 0);
3892     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 20, 0, 0);
3893     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 20, 1, 0);
3894     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 21, 0, 0);
3895 }
3896 
test37()3897 void test37()
3898 {
3899     test("abcdefghijklmnopqrst", 0, 0, "", 0, 0, 0);
3900     test("abcdefghijklmnopqrst", 0, 0, "", 0, 1, 0);
3901     test("abcdefghijklmnopqrst", 0, 0, "", 1, 0, 0);
3902     test("abcdefghijklmnopqrst", 0, 0, "abcde", 0, 0, 0);
3903     test("abcdefghijklmnopqrst", 0, 0, "abcde", 0, 1, -1);
3904     test("abcdefghijklmnopqrst", 0, 0, "abcde", 0, 2, -2);
3905     test("abcdefghijklmnopqrst", 0, 0, "abcde", 0, 4, -4);
3906     test("abcdefghijklmnopqrst", 0, 0, "abcde", 0, 5, -5);
3907     test("abcdefghijklmnopqrst", 0, 0, "abcde", 0, 6, -5);
3908     test("abcdefghijklmnopqrst", 0, 0, "abcde", 1, 0, 0);
3909     test("abcdefghijklmnopqrst", 0, 0, "abcde", 1, 1, -1);
3910     test("abcdefghijklmnopqrst", 0, 0, "abcde", 1, 2, -2);
3911     test("abcdefghijklmnopqrst", 0, 0, "abcde", 1, 3, -3);
3912     test("abcdefghijklmnopqrst", 0, 0, "abcde", 1, 4, -4);
3913     test("abcdefghijklmnopqrst", 0, 0, "abcde", 1, 5, -4);
3914     test("abcdefghijklmnopqrst", 0, 0, "abcde", 2, 0, 0);
3915     test("abcdefghijklmnopqrst", 0, 0, "abcde", 2, 1, -1);
3916     test("abcdefghijklmnopqrst", 0, 0, "abcde", 2, 2, -2);
3917     test("abcdefghijklmnopqrst", 0, 0, "abcde", 2, 3, -3);
3918     test("abcdefghijklmnopqrst", 0, 0, "abcde", 2, 4, -3);
3919     test("abcdefghijklmnopqrst", 0, 0, "abcde", 4, 0, 0);
3920     test("abcdefghijklmnopqrst", 0, 0, "abcde", 4, 1, -1);
3921     test("abcdefghijklmnopqrst", 0, 0, "abcde", 4, 2, -1);
3922     test("abcdefghijklmnopqrst", 0, 0, "abcde", 5, 0, 0);
3923     test("abcdefghijklmnopqrst", 0, 0, "abcde", 5, 1, 0);
3924     test("abcdefghijklmnopqrst", 0, 0, "abcde", 6, 0, 0);
3925     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 0, 0, 0);
3926     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 0, 1, -1);
3927     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 0, 5, -5);
3928     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 0, 9, -9);
3929     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 0, 10, -10);
3930     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 0, 11, -10);
3931     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 1, 0, 0);
3932     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 1, 1, -1);
3933     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 1, 4, -4);
3934     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 1, 8, -8);
3935     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 1, 9, -9);
3936     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 1, 10, -9);
3937     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 5, 0, 0);
3938     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 5, 1, -1);
3939     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 5, 2, -2);
3940     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 5, 4, -4);
3941     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 5, 5, -5);
3942     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 5, 6, -5);
3943     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 9, 0, 0);
3944     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 9, 1, -1);
3945     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 9, 2, -1);
3946     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 10, 0, 0);
3947     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 10, 1, 0);
3948     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 11, 0, 0);
3949     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 0, 0, 0);
3950     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 0, 1, -1);
3951     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 0, 10, -10);
3952     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 0, 19, -19);
3953     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 0, 20, -20);
3954     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 0, 21, -20);
3955     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 1, 0, 0);
3956     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 1, 1, -1);
3957     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 1, 9, -9);
3958     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 1, 18, -18);
3959     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 1, 19, -19);
3960     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 1, 20, -19);
3961     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 10, 0, 0);
3962     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 10, 1, -1);
3963     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 10, 5, -5);
3964     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 10, 9, -9);
3965     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 10, 10, -10);
3966     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 10, 11, -10);
3967     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 19, 0, 0);
3968     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 19, 1, -1);
3969     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 19, 2, -1);
3970     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 20, 0, 0);
3971     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 20, 1, 0);
3972     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 21, 0, 0);
3973     test("abcdefghijklmnopqrst", 0, 1, "", 0, 0, 1);
3974     test("abcdefghijklmnopqrst", 0, 1, "", 0, 1, 1);
3975     test("abcdefghijklmnopqrst", 0, 1, "", 1, 0, 0);
3976     test("abcdefghijklmnopqrst", 0, 1, "abcde", 0, 0, 1);
3977     test("abcdefghijklmnopqrst", 0, 1, "abcde", 0, 1, 0);
3978     test("abcdefghijklmnopqrst", 0, 1, "abcde", 0, 2, -1);
3979     test("abcdefghijklmnopqrst", 0, 1, "abcde", 0, 4, -3);
3980     test("abcdefghijklmnopqrst", 0, 1, "abcde", 0, 5, -4);
3981     test("abcdefghijklmnopqrst", 0, 1, "abcde", 0, 6, -4);
3982     test("abcdefghijklmnopqrst", 0, 1, "abcde", 1, 0, 1);
3983     test("abcdefghijklmnopqrst", 0, 1, "abcde", 1, 1, -1);
3984     test("abcdefghijklmnopqrst", 0, 1, "abcde", 1, 2, -1);
3985     test("abcdefghijklmnopqrst", 0, 1, "abcde", 1, 3, -1);
3986     test("abcdefghijklmnopqrst", 0, 1, "abcde", 1, 4, -1);
3987     test("abcdefghijklmnopqrst", 0, 1, "abcde", 1, 5, -1);
3988     test("abcdefghijklmnopqrst", 0, 1, "abcde", 2, 0, 1);
3989     test("abcdefghijklmnopqrst", 0, 1, "abcde", 2, 1, -2);
3990     test("abcdefghijklmnopqrst", 0, 1, "abcde", 2, 2, -2);
3991     test("abcdefghijklmnopqrst", 0, 1, "abcde", 2, 3, -2);
3992     test("abcdefghijklmnopqrst", 0, 1, "abcde", 2, 4, -2);
3993     test("abcdefghijklmnopqrst", 0, 1, "abcde", 4, 0, 1);
3994     test("abcdefghijklmnopqrst", 0, 1, "abcde", 4, 1, -4);
3995     test("abcdefghijklmnopqrst", 0, 1, "abcde", 4, 2, -4);
3996     test("abcdefghijklmnopqrst", 0, 1, "abcde", 5, 0, 1);
3997     test("abcdefghijklmnopqrst", 0, 1, "abcde", 5, 1, 1);
3998     test("abcdefghijklmnopqrst", 0, 1, "abcde", 6, 0, 0);
3999 }
4000 
test38()4001 void test38()
4002 {
4003     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 0, 0, 1);
4004     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 0, 1, 0);
4005     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 0, 5, -4);
4006     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 0, 9, -8);
4007     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 0, 10, -9);
4008     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 0, 11, -9);
4009     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 1, 0, 1);
4010     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 1, 1, -1);
4011     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 1, 4, -1);
4012     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 1, 8, -1);
4013     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 1, 9, -1);
4014     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 1, 10, -1);
4015     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 5, 0, 1);
4016     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 5, 1, -5);
4017     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 5, 2, -5);
4018     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 5, 4, -5);
4019     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 5, 5, -5);
4020     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 5, 6, -5);
4021     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 9, 0, 1);
4022     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 9, 1, -9);
4023     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 9, 2, -9);
4024     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 10, 0, 1);
4025     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 10, 1, 1);
4026     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 11, 0, 0);
4027     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 0, 0, 1);
4028     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 0, 1, 0);
4029     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 0, 10, -9);
4030     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 0, 19, -18);
4031     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 0, 20, -19);
4032     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 0, 21, -19);
4033     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 1, 0, 1);
4034     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 1, 1, -1);
4035     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 1, 9, -1);
4036     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 1, 18, -1);
4037     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 1, 19, -1);
4038     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 1, 20, -1);
4039     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 10, 0, 1);
4040     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 10, 1, -10);
4041     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 10, 5, -10);
4042     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 10, 9, -10);
4043     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 10, 10, -10);
4044     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 10, 11, -10);
4045     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 19, 0, 1);
4046     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 19, 1, -19);
4047     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 19, 2, -19);
4048     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 20, 0, 1);
4049     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 20, 1, 1);
4050     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 21, 0, 0);
4051     test("abcdefghijklmnopqrst", 0, 10, "", 0, 0, 10);
4052     test("abcdefghijklmnopqrst", 0, 10, "", 0, 1, 10);
4053     test("abcdefghijklmnopqrst", 0, 10, "", 1, 0, 0);
4054     test("abcdefghijklmnopqrst", 0, 10, "abcde", 0, 0, 10);
4055     test("abcdefghijklmnopqrst", 0, 10, "abcde", 0, 1, 9);
4056     test("abcdefghijklmnopqrst", 0, 10, "abcde", 0, 2, 8);
4057     test("abcdefghijklmnopqrst", 0, 10, "abcde", 0, 4, 6);
4058     test("abcdefghijklmnopqrst", 0, 10, "abcde", 0, 5, 5);
4059     test("abcdefghijklmnopqrst", 0, 10, "abcde", 0, 6, 5);
4060     test("abcdefghijklmnopqrst", 0, 10, "abcde", 1, 0, 10);
4061     test("abcdefghijklmnopqrst", 0, 10, "abcde", 1, 1, -1);
4062     test("abcdefghijklmnopqrst", 0, 10, "abcde", 1, 2, -1);
4063     test("abcdefghijklmnopqrst", 0, 10, "abcde", 1, 3, -1);
4064     test("abcdefghijklmnopqrst", 0, 10, "abcde", 1, 4, -1);
4065     test("abcdefghijklmnopqrst", 0, 10, "abcde", 1, 5, -1);
4066     test("abcdefghijklmnopqrst", 0, 10, "abcde", 2, 0, 10);
4067     test("abcdefghijklmnopqrst", 0, 10, "abcde", 2, 1, -2);
4068     test("abcdefghijklmnopqrst", 0, 10, "abcde", 2, 2, -2);
4069     test("abcdefghijklmnopqrst", 0, 10, "abcde", 2, 3, -2);
4070     test("abcdefghijklmnopqrst", 0, 10, "abcde", 2, 4, -2);
4071     test("abcdefghijklmnopqrst", 0, 10, "abcde", 4, 0, 10);
4072     test("abcdefghijklmnopqrst", 0, 10, "abcde", 4, 1, -4);
4073     test("abcdefghijklmnopqrst", 0, 10, "abcde", 4, 2, -4);
4074     test("abcdefghijklmnopqrst", 0, 10, "abcde", 5, 0, 10);
4075     test("abcdefghijklmnopqrst", 0, 10, "abcde", 5, 1, 10);
4076     test("abcdefghijklmnopqrst", 0, 10, "abcde", 6, 0, 0);
4077     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 0, 0, 10);
4078     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 0, 1, 9);
4079     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 0, 5, 5);
4080     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 0, 9, 1);
4081     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 0, 10, 0);
4082     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 0, 11, 0);
4083     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 1, 0, 10);
4084     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 1, 1, -1);
4085     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 1, 4, -1);
4086     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 1, 8, -1);
4087     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 1, 9, -1);
4088     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 1, 10, -1);
4089     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 5, 0, 10);
4090     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 5, 1, -5);
4091     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 5, 2, -5);
4092     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 5, 4, -5);
4093     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 5, 5, -5);
4094     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 5, 6, -5);
4095     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 9, 0, 10);
4096     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 9, 1, -9);
4097     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 9, 2, -9);
4098     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 10, 0, 10);
4099     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 10, 1, 10);
4100     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 11, 0, 0);
4101     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 0, 0, 10);
4102     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 0, 1, 9);
4103 }
4104 
test39()4105 void test39()
4106 {
4107     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 0, 10, 0);
4108     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 0, 19, -9);
4109     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 0, 20, -10);
4110     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 0, 21, -10);
4111     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 1, 0, 10);
4112     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 1, 1, -1);
4113     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 1, 9, -1);
4114     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 1, 18, -1);
4115     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 1, 19, -1);
4116     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 1, 20, -1);
4117     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 10, 0, 10);
4118     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 10, 1, -10);
4119     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 10, 5, -10);
4120     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 10, 9, -10);
4121     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 10, 10, -10);
4122     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 10, 11, -10);
4123     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 19, 0, 10);
4124     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 19, 1, -19);
4125     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 19, 2, -19);
4126     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 20, 0, 10);
4127     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 20, 1, 10);
4128     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 21, 0, 0);
4129     test("abcdefghijklmnopqrst", 0, 19, "", 0, 0, 19);
4130     test("abcdefghijklmnopqrst", 0, 19, "", 0, 1, 19);
4131     test("abcdefghijklmnopqrst", 0, 19, "", 1, 0, 0);
4132     test("abcdefghijklmnopqrst", 0, 19, "abcde", 0, 0, 19);
4133     test("abcdefghijklmnopqrst", 0, 19, "abcde", 0, 1, 18);
4134     test("abcdefghijklmnopqrst", 0, 19, "abcde", 0, 2, 17);
4135     test("abcdefghijklmnopqrst", 0, 19, "abcde", 0, 4, 15);
4136     test("abcdefghijklmnopqrst", 0, 19, "abcde", 0, 5, 14);
4137     test("abcdefghijklmnopqrst", 0, 19, "abcde", 0, 6, 14);
4138     test("abcdefghijklmnopqrst", 0, 19, "abcde", 1, 0, 19);
4139     test("abcdefghijklmnopqrst", 0, 19, "abcde", 1, 1, -1);
4140     test("abcdefghijklmnopqrst", 0, 19, "abcde", 1, 2, -1);
4141     test("abcdefghijklmnopqrst", 0, 19, "abcde", 1, 3, -1);
4142     test("abcdefghijklmnopqrst", 0, 19, "abcde", 1, 4, -1);
4143     test("abcdefghijklmnopqrst", 0, 19, "abcde", 1, 5, -1);
4144     test("abcdefghijklmnopqrst", 0, 19, "abcde", 2, 0, 19);
4145     test("abcdefghijklmnopqrst", 0, 19, "abcde", 2, 1, -2);
4146     test("abcdefghijklmnopqrst", 0, 19, "abcde", 2, 2, -2);
4147     test("abcdefghijklmnopqrst", 0, 19, "abcde", 2, 3, -2);
4148     test("abcdefghijklmnopqrst", 0, 19, "abcde", 2, 4, -2);
4149     test("abcdefghijklmnopqrst", 0, 19, "abcde", 4, 0, 19);
4150     test("abcdefghijklmnopqrst", 0, 19, "abcde", 4, 1, -4);
4151     test("abcdefghijklmnopqrst", 0, 19, "abcde", 4, 2, -4);
4152     test("abcdefghijklmnopqrst", 0, 19, "abcde", 5, 0, 19);
4153     test("abcdefghijklmnopqrst", 0, 19, "abcde", 5, 1, 19);
4154     test("abcdefghijklmnopqrst", 0, 19, "abcde", 6, 0, 0);
4155     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 0, 0, 19);
4156     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 0, 1, 18);
4157     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 0, 5, 14);
4158     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 0, 9, 10);
4159     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 0, 10, 9);
4160     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 0, 11, 9);
4161     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 1, 0, 19);
4162     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 1, 1, -1);
4163     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 1, 4, -1);
4164     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 1, 8, -1);
4165     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 1, 9, -1);
4166     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 1, 10, -1);
4167     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 5, 0, 19);
4168     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 5, 1, -5);
4169     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 5, 2, -5);
4170     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 5, 4, -5);
4171     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 5, 5, -5);
4172     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 5, 6, -5);
4173     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 9, 0, 19);
4174     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 9, 1, -9);
4175     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 9, 2, -9);
4176     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 10, 0, 19);
4177     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 10, 1, 19);
4178     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 11, 0, 0);
4179     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 0, 0, 19);
4180     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 0, 1, 18);
4181     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 0, 10, 9);
4182     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 0, 19, 0);
4183     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 0, 20, -1);
4184     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 0, 21, -1);
4185     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 1, 0, 19);
4186     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 1, 1, -1);
4187     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 1, 9, -1);
4188     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 1, 18, -1);
4189     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 1, 19, -1);
4190     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 1, 20, -1);
4191     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 10, 0, 19);
4192     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 10, 1, -10);
4193     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 10, 5, -10);
4194     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 10, 9, -10);
4195     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 10, 10, -10);
4196     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 10, 11, -10);
4197     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 19, 0, 19);
4198     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 19, 1, -19);
4199     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 19, 2, -19);
4200     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 20, 0, 19);
4201     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 20, 1, 19);
4202     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 21, 0, 0);
4203     test("abcdefghijklmnopqrst", 0, 20, "", 0, 0, 20);
4204     test("abcdefghijklmnopqrst", 0, 20, "", 0, 1, 20);
4205     test("abcdefghijklmnopqrst", 0, 20, "", 1, 0, 0);
4206     test("abcdefghijklmnopqrst", 0, 20, "abcde", 0, 0, 20);
4207 }
4208 
test40()4209 void test40()
4210 {
4211     test("abcdefghijklmnopqrst", 0, 20, "abcde", 0, 1, 19);
4212     test("abcdefghijklmnopqrst", 0, 20, "abcde", 0, 2, 18);
4213     test("abcdefghijklmnopqrst", 0, 20, "abcde", 0, 4, 16);
4214     test("abcdefghijklmnopqrst", 0, 20, "abcde", 0, 5, 15);
4215     test("abcdefghijklmnopqrst", 0, 20, "abcde", 0, 6, 15);
4216     test("abcdefghijklmnopqrst", 0, 20, "abcde", 1, 0, 20);
4217     test("abcdefghijklmnopqrst", 0, 20, "abcde", 1, 1, -1);
4218     test("abcdefghijklmnopqrst", 0, 20, "abcde", 1, 2, -1);
4219     test("abcdefghijklmnopqrst", 0, 20, "abcde", 1, 3, -1);
4220     test("abcdefghijklmnopqrst", 0, 20, "abcde", 1, 4, -1);
4221     test("abcdefghijklmnopqrst", 0, 20, "abcde", 1, 5, -1);
4222     test("abcdefghijklmnopqrst", 0, 20, "abcde", 2, 0, 20);
4223     test("abcdefghijklmnopqrst", 0, 20, "abcde", 2, 1, -2);
4224     test("abcdefghijklmnopqrst", 0, 20, "abcde", 2, 2, -2);
4225     test("abcdefghijklmnopqrst", 0, 20, "abcde", 2, 3, -2);
4226     test("abcdefghijklmnopqrst", 0, 20, "abcde", 2, 4, -2);
4227     test("abcdefghijklmnopqrst", 0, 20, "abcde", 4, 0, 20);
4228     test("abcdefghijklmnopqrst", 0, 20, "abcde", 4, 1, -4);
4229     test("abcdefghijklmnopqrst", 0, 20, "abcde", 4, 2, -4);
4230     test("abcdefghijklmnopqrst", 0, 20, "abcde", 5, 0, 20);
4231     test("abcdefghijklmnopqrst", 0, 20, "abcde", 5, 1, 20);
4232     test("abcdefghijklmnopqrst", 0, 20, "abcde", 6, 0, 0);
4233     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 0, 0, 20);
4234     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 0, 1, 19);
4235     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 0, 5, 15);
4236     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 0, 9, 11);
4237     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 0, 10, 10);
4238     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 0, 11, 10);
4239     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 1, 0, 20);
4240     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 1, 1, -1);
4241     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 1, 4, -1);
4242     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 1, 8, -1);
4243     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 1, 9, -1);
4244     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 1, 10, -1);
4245     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 5, 0, 20);
4246     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 5, 1, -5);
4247     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 5, 2, -5);
4248     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 5, 4, -5);
4249     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 5, 5, -5);
4250     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 5, 6, -5);
4251     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 9, 0, 20);
4252     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 9, 1, -9);
4253     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 9, 2, -9);
4254     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 10, 0, 20);
4255     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 10, 1, 20);
4256     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 11, 0, 0);
4257     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 0, 0, 20);
4258     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 0, 1, 19);
4259     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 0, 10, 10);
4260     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 0, 19, 1);
4261     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 0, 20, 0);
4262     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 0, 21, 0);
4263     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 1, 0, 20);
4264     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 1, 1, -1);
4265     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 1, 9, -1);
4266     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 1, 18, -1);
4267     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 1, 19, -1);
4268     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 1, 20, -1);
4269     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 10, 0, 20);
4270     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 10, 1, -10);
4271     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 10, 5, -10);
4272     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 10, 9, -10);
4273     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 10, 10, -10);
4274     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 10, 11, -10);
4275     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 19, 0, 20);
4276     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 19, 1, -19);
4277     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 19, 2, -19);
4278     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 20, 0, 20);
4279     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 20, 1, 20);
4280     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 21, 0, 0);
4281     test("abcdefghijklmnopqrst", 0, 21, "", 0, 0, 20);
4282     test("abcdefghijklmnopqrst", 0, 21, "", 0, 1, 20);
4283     test("abcdefghijklmnopqrst", 0, 21, "", 1, 0, 0);
4284     test("abcdefghijklmnopqrst", 0, 21, "abcde", 0, 0, 20);
4285     test("abcdefghijklmnopqrst", 0, 21, "abcde", 0, 1, 19);
4286     test("abcdefghijklmnopqrst", 0, 21, "abcde", 0, 2, 18);
4287     test("abcdefghijklmnopqrst", 0, 21, "abcde", 0, 4, 16);
4288     test("abcdefghijklmnopqrst", 0, 21, "abcde", 0, 5, 15);
4289     test("abcdefghijklmnopqrst", 0, 21, "abcde", 0, 6, 15);
4290     test("abcdefghijklmnopqrst", 0, 21, "abcde", 1, 0, 20);
4291     test("abcdefghijklmnopqrst", 0, 21, "abcde", 1, 1, -1);
4292     test("abcdefghijklmnopqrst", 0, 21, "abcde", 1, 2, -1);
4293     test("abcdefghijklmnopqrst", 0, 21, "abcde", 1, 3, -1);
4294     test("abcdefghijklmnopqrst", 0, 21, "abcde", 1, 4, -1);
4295     test("abcdefghijklmnopqrst", 0, 21, "abcde", 1, 5, -1);
4296     test("abcdefghijklmnopqrst", 0, 21, "abcde", 2, 0, 20);
4297     test("abcdefghijklmnopqrst", 0, 21, "abcde", 2, 1, -2);
4298     test("abcdefghijklmnopqrst", 0, 21, "abcde", 2, 2, -2);
4299     test("abcdefghijklmnopqrst", 0, 21, "abcde", 2, 3, -2);
4300     test("abcdefghijklmnopqrst", 0, 21, "abcde", 2, 4, -2);
4301     test("abcdefghijklmnopqrst", 0, 21, "abcde", 4, 0, 20);
4302     test("abcdefghijklmnopqrst", 0, 21, "abcde", 4, 1, -4);
4303     test("abcdefghijklmnopqrst", 0, 21, "abcde", 4, 2, -4);
4304     test("abcdefghijklmnopqrst", 0, 21, "abcde", 5, 0, 20);
4305     test("abcdefghijklmnopqrst", 0, 21, "abcde", 5, 1, 20);
4306     test("abcdefghijklmnopqrst", 0, 21, "abcde", 6, 0, 0);
4307     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 0, 0, 20);
4308     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 0, 1, 19);
4309     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 0, 5, 15);
4310     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 0, 9, 11);
4311 }
4312 
test41()4313 void test41()
4314 {
4315     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 0, 10, 10);
4316     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 0, 11, 10);
4317     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 1, 0, 20);
4318     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 1, 1, -1);
4319     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 1, 4, -1);
4320     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 1, 8, -1);
4321     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 1, 9, -1);
4322     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 1, 10, -1);
4323     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 5, 0, 20);
4324     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 5, 1, -5);
4325     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 5, 2, -5);
4326     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 5, 4, -5);
4327     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 5, 5, -5);
4328     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 5, 6, -5);
4329     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 9, 0, 20);
4330     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 9, 1, -9);
4331     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 9, 2, -9);
4332     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 10, 0, 20);
4333     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 10, 1, 20);
4334     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 11, 0, 0);
4335     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 0, 0, 20);
4336     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 0, 1, 19);
4337     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 0, 10, 10);
4338     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 0, 19, 1);
4339     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 0, 20, 0);
4340     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 0, 21, 0);
4341     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 1, 0, 20);
4342     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 1, 1, -1);
4343     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 1, 9, -1);
4344     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 1, 18, -1);
4345     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 1, 19, -1);
4346     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 1, 20, -1);
4347     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 10, 0, 20);
4348     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 10, 1, -10);
4349     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 10, 5, -10);
4350     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 10, 9, -10);
4351     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 10, 10, -10);
4352     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 10, 11, -10);
4353     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 19, 0, 20);
4354     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 19, 1, -19);
4355     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 19, 2, -19);
4356     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 20, 0, 20);
4357     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 20, 1, 20);
4358     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 21, 0, 0);
4359     test("abcdefghijklmnopqrst", 1, 0, "", 0, 0, 0);
4360     test("abcdefghijklmnopqrst", 1, 0, "", 0, 1, 0);
4361     test("abcdefghijklmnopqrst", 1, 0, "", 1, 0, 0);
4362     test("abcdefghijklmnopqrst", 1, 0, "abcde", 0, 0, 0);
4363     test("abcdefghijklmnopqrst", 1, 0, "abcde", 0, 1, -1);
4364     test("abcdefghijklmnopqrst", 1, 0, "abcde", 0, 2, -2);
4365     test("abcdefghijklmnopqrst", 1, 0, "abcde", 0, 4, -4);
4366     test("abcdefghijklmnopqrst", 1, 0, "abcde", 0, 5, -5);
4367     test("abcdefghijklmnopqrst", 1, 0, "abcde", 0, 6, -5);
4368     test("abcdefghijklmnopqrst", 1, 0, "abcde", 1, 0, 0);
4369     test("abcdefghijklmnopqrst", 1, 0, "abcde", 1, 1, -1);
4370     test("abcdefghijklmnopqrst", 1, 0, "abcde", 1, 2, -2);
4371     test("abcdefghijklmnopqrst", 1, 0, "abcde", 1, 3, -3);
4372     test("abcdefghijklmnopqrst", 1, 0, "abcde", 1, 4, -4);
4373     test("abcdefghijklmnopqrst", 1, 0, "abcde", 1, 5, -4);
4374     test("abcdefghijklmnopqrst", 1, 0, "abcde", 2, 0, 0);
4375     test("abcdefghijklmnopqrst", 1, 0, "abcde", 2, 1, -1);
4376     test("abcdefghijklmnopqrst", 1, 0, "abcde", 2, 2, -2);
4377     test("abcdefghijklmnopqrst", 1, 0, "abcde", 2, 3, -3);
4378     test("abcdefghijklmnopqrst", 1, 0, "abcde", 2, 4, -3);
4379     test("abcdefghijklmnopqrst", 1, 0, "abcde", 4, 0, 0);
4380     test("abcdefghijklmnopqrst", 1, 0, "abcde", 4, 1, -1);
4381     test("abcdefghijklmnopqrst", 1, 0, "abcde", 4, 2, -1);
4382     test("abcdefghijklmnopqrst", 1, 0, "abcde", 5, 0, 0);
4383     test("abcdefghijklmnopqrst", 1, 0, "abcde", 5, 1, 0);
4384     test("abcdefghijklmnopqrst", 1, 0, "abcde", 6, 0, 0);
4385     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 0, 0, 0);
4386     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 0, 1, -1);
4387     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 0, 5, -5);
4388     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 0, 9, -9);
4389     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 0, 10, -10);
4390     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 0, 11, -10);
4391     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 1, 0, 0);
4392     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 1, 1, -1);
4393     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 1, 4, -4);
4394     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 1, 8, -8);
4395     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 1, 9, -9);
4396     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 1, 10, -9);
4397     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 5, 0, 0);
4398     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 5, 1, -1);
4399     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 5, 2, -2);
4400     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 5, 4, -4);
4401     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 5, 5, -5);
4402     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 5, 6, -5);
4403     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 9, 0, 0);
4404     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 9, 1, -1);
4405     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 9, 2, -1);
4406     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 10, 0, 0);
4407     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 10, 1, 0);
4408     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 11, 0, 0);
4409     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 0, 0, 0);
4410     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 0, 1, -1);
4411     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 0, 10, -10);
4412     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 0, 19, -19);
4413     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 0, 20, -20);
4414     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 0, 21, -20);
4415 }
4416 
test42()4417 void test42()
4418 {
4419     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 1, 0, 0);
4420     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 1, 1, -1);
4421     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 1, 9, -9);
4422     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 1, 18, -18);
4423     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 1, 19, -19);
4424     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 1, 20, -19);
4425     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 10, 0, 0);
4426     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 10, 1, -1);
4427     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 10, 5, -5);
4428     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 10, 9, -9);
4429     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 10, 10, -10);
4430     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 10, 11, -10);
4431     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 19, 0, 0);
4432     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 19, 1, -1);
4433     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 19, 2, -1);
4434     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 20, 0, 0);
4435     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 20, 1, 0);
4436     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 21, 0, 0);
4437     test("abcdefghijklmnopqrst", 1, 1, "", 0, 0, 1);
4438     test("abcdefghijklmnopqrst", 1, 1, "", 0, 1, 1);
4439     test("abcdefghijklmnopqrst", 1, 1, "", 1, 0, 0);
4440     test("abcdefghijklmnopqrst", 1, 1, "abcde", 0, 0, 1);
4441     test("abcdefghijklmnopqrst", 1, 1, "abcde", 0, 1, 1);
4442     test("abcdefghijklmnopqrst", 1, 1, "abcde", 0, 2, 1);
4443     test("abcdefghijklmnopqrst", 1, 1, "abcde", 0, 4, 1);
4444     test("abcdefghijklmnopqrst", 1, 1, "abcde", 0, 5, 1);
4445     test("abcdefghijklmnopqrst", 1, 1, "abcde", 0, 6, 1);
4446     test("abcdefghijklmnopqrst", 1, 1, "abcde", 1, 0, 1);
4447     test("abcdefghijklmnopqrst", 1, 1, "abcde", 1, 1, 0);
4448     test("abcdefghijklmnopqrst", 1, 1, "abcde", 1, 2, -1);
4449     test("abcdefghijklmnopqrst", 1, 1, "abcde", 1, 3, -2);
4450     test("abcdefghijklmnopqrst", 1, 1, "abcde", 1, 4, -3);
4451     test("abcdefghijklmnopqrst", 1, 1, "abcde", 1, 5, -3);
4452     test("abcdefghijklmnopqrst", 1, 1, "abcde", 2, 0, 1);
4453     test("abcdefghijklmnopqrst", 1, 1, "abcde", 2, 1, -1);
4454     test("abcdefghijklmnopqrst", 1, 1, "abcde", 2, 2, -1);
4455     test("abcdefghijklmnopqrst", 1, 1, "abcde", 2, 3, -1);
4456     test("abcdefghijklmnopqrst", 1, 1, "abcde", 2, 4, -1);
4457     test("abcdefghijklmnopqrst", 1, 1, "abcde", 4, 0, 1);
4458     test("abcdefghijklmnopqrst", 1, 1, "abcde", 4, 1, -3);
4459     test("abcdefghijklmnopqrst", 1, 1, "abcde", 4, 2, -3);
4460     test("abcdefghijklmnopqrst", 1, 1, "abcde", 5, 0, 1);
4461     test("abcdefghijklmnopqrst", 1, 1, "abcde", 5, 1, 1);
4462     test("abcdefghijklmnopqrst", 1, 1, "abcde", 6, 0, 0);
4463     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 0, 0, 1);
4464     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 0, 1, 1);
4465     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 0, 5, 1);
4466     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 0, 9, 1);
4467     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 0, 10, 1);
4468     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 0, 11, 1);
4469     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 1, 0, 1);
4470     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 1, 1, 0);
4471     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 1, 4, -3);
4472     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 1, 8, -7);
4473     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 1, 9, -8);
4474     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 1, 10, -8);
4475     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 5, 0, 1);
4476     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 5, 1, -4);
4477     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 5, 2, -4);
4478     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 5, 4, -4);
4479     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 5, 5, -4);
4480     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 5, 6, -4);
4481     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 9, 0, 1);
4482     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 9, 1, -8);
4483     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 9, 2, -8);
4484     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 10, 0, 1);
4485     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 10, 1, 1);
4486     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 11, 0, 0);
4487     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 0, 0, 1);
4488     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 0, 1, 1);
4489     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 0, 10, 1);
4490     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 0, 19, 1);
4491     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 0, 20, 1);
4492     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 0, 21, 1);
4493     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 1, 0, 1);
4494     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 1, 1, 0);
4495     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 1, 9, -8);
4496     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 1, 18, -17);
4497     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 1, 19, -18);
4498     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 1, 20, -18);
4499     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 10, 0, 1);
4500     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 10, 1, -9);
4501     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 10, 5, -9);
4502     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 10, 9, -9);
4503     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 10, 10, -9);
4504     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 10, 11, -9);
4505     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 19, 0, 1);
4506     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 19, 1, -18);
4507     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 19, 2, -18);
4508     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 20, 0, 1);
4509     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 20, 1, 1);
4510     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 21, 0, 0);
4511     test("abcdefghijklmnopqrst", 1, 9, "", 0, 0, 9);
4512     test("abcdefghijklmnopqrst", 1, 9, "", 0, 1, 9);
4513     test("abcdefghijklmnopqrst", 1, 9, "", 1, 0, 0);
4514     test("abcdefghijklmnopqrst", 1, 9, "abcde", 0, 0, 9);
4515     test("abcdefghijklmnopqrst", 1, 9, "abcde", 0, 1, 1);
4516     test("abcdefghijklmnopqrst", 1, 9, "abcde", 0, 2, 1);
4517     test("abcdefghijklmnopqrst", 1, 9, "abcde", 0, 4, 1);
4518     test("abcdefghijklmnopqrst", 1, 9, "abcde", 0, 5, 1);
4519 }
4520 
test43()4521 void test43()
4522 {
4523     test("abcdefghijklmnopqrst", 1, 9, "abcde", 0, 6, 1);
4524     test("abcdefghijklmnopqrst", 1, 9, "abcde", 1, 0, 9);
4525     test("abcdefghijklmnopqrst", 1, 9, "abcde", 1, 1, 8);
4526     test("abcdefghijklmnopqrst", 1, 9, "abcde", 1, 2, 7);
4527     test("abcdefghijklmnopqrst", 1, 9, "abcde", 1, 3, 6);
4528     test("abcdefghijklmnopqrst", 1, 9, "abcde", 1, 4, 5);
4529     test("abcdefghijklmnopqrst", 1, 9, "abcde", 1, 5, 5);
4530     test("abcdefghijklmnopqrst", 1, 9, "abcde", 2, 0, 9);
4531     test("abcdefghijklmnopqrst", 1, 9, "abcde", 2, 1, -1);
4532     test("abcdefghijklmnopqrst", 1, 9, "abcde", 2, 2, -1);
4533     test("abcdefghijklmnopqrst", 1, 9, "abcde", 2, 3, -1);
4534     test("abcdefghijklmnopqrst", 1, 9, "abcde", 2, 4, -1);
4535     test("abcdefghijklmnopqrst", 1, 9, "abcde", 4, 0, 9);
4536     test("abcdefghijklmnopqrst", 1, 9, "abcde", 4, 1, -3);
4537     test("abcdefghijklmnopqrst", 1, 9, "abcde", 4, 2, -3);
4538     test("abcdefghijklmnopqrst", 1, 9, "abcde", 5, 0, 9);
4539     test("abcdefghijklmnopqrst", 1, 9, "abcde", 5, 1, 9);
4540     test("abcdefghijklmnopqrst", 1, 9, "abcde", 6, 0, 0);
4541     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 0, 0, 9);
4542     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 0, 1, 1);
4543     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 0, 5, 1);
4544     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 0, 9, 1);
4545     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 0, 10, 1);
4546     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 0, 11, 1);
4547     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 1, 0, 9);
4548     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 1, 1, 8);
4549     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 1, 4, 5);
4550     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 1, 8, 1);
4551     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 1, 9, 0);
4552     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 1, 10, 0);
4553     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 5, 0, 9);
4554     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 5, 1, -4);
4555     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 5, 2, -4);
4556     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 5, 4, -4);
4557     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 5, 5, -4);
4558     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 5, 6, -4);
4559     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 9, 0, 9);
4560     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 9, 1, -8);
4561     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 9, 2, -8);
4562     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 10, 0, 9);
4563     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 10, 1, 9);
4564     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 11, 0, 0);
4565     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 0, 0, 9);
4566     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 0, 1, 1);
4567     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 0, 10, 1);
4568     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 0, 19, 1);
4569     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 0, 20, 1);
4570     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 0, 21, 1);
4571     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 1, 0, 9);
4572     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 1, 1, 8);
4573     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 1, 9, 0);
4574     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 1, 18, -9);
4575     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 1, 19, -10);
4576     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 1, 20, -10);
4577     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 10, 0, 9);
4578     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 10, 1, -9);
4579     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 10, 5, -9);
4580     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 10, 9, -9);
4581     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 10, 10, -9);
4582     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 10, 11, -9);
4583     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 19, 0, 9);
4584     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 19, 1, -18);
4585     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 19, 2, -18);
4586     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 20, 0, 9);
4587     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 20, 1, 9);
4588     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 21, 0, 0);
4589     test("abcdefghijklmnopqrst", 1, 18, "", 0, 0, 18);
4590     test("abcdefghijklmnopqrst", 1, 18, "", 0, 1, 18);
4591     test("abcdefghijklmnopqrst", 1, 18, "", 1, 0, 0);
4592     test("abcdefghijklmnopqrst", 1, 18, "abcde", 0, 0, 18);
4593     test("abcdefghijklmnopqrst", 1, 18, "abcde", 0, 1, 1);
4594     test("abcdefghijklmnopqrst", 1, 18, "abcde", 0, 2, 1);
4595     test("abcdefghijklmnopqrst", 1, 18, "abcde", 0, 4, 1);
4596     test("abcdefghijklmnopqrst", 1, 18, "abcde", 0, 5, 1);
4597     test("abcdefghijklmnopqrst", 1, 18, "abcde", 0, 6, 1);
4598     test("abcdefghijklmnopqrst", 1, 18, "abcde", 1, 0, 18);
4599     test("abcdefghijklmnopqrst", 1, 18, "abcde", 1, 1, 17);
4600     test("abcdefghijklmnopqrst", 1, 18, "abcde", 1, 2, 16);
4601     test("abcdefghijklmnopqrst", 1, 18, "abcde", 1, 3, 15);
4602     test("abcdefghijklmnopqrst", 1, 18, "abcde", 1, 4, 14);
4603     test("abcdefghijklmnopqrst", 1, 18, "abcde", 1, 5, 14);
4604     test("abcdefghijklmnopqrst", 1, 18, "abcde", 2, 0, 18);
4605     test("abcdefghijklmnopqrst", 1, 18, "abcde", 2, 1, -1);
4606     test("abcdefghijklmnopqrst", 1, 18, "abcde", 2, 2, -1);
4607     test("abcdefghijklmnopqrst", 1, 18, "abcde", 2, 3, -1);
4608     test("abcdefghijklmnopqrst", 1, 18, "abcde", 2, 4, -1);
4609     test("abcdefghijklmnopqrst", 1, 18, "abcde", 4, 0, 18);
4610     test("abcdefghijklmnopqrst", 1, 18, "abcde", 4, 1, -3);
4611     test("abcdefghijklmnopqrst", 1, 18, "abcde", 4, 2, -3);
4612     test("abcdefghijklmnopqrst", 1, 18, "abcde", 5, 0, 18);
4613     test("abcdefghijklmnopqrst", 1, 18, "abcde", 5, 1, 18);
4614     test("abcdefghijklmnopqrst", 1, 18, "abcde", 6, 0, 0);
4615     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 0, 0, 18);
4616     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 0, 1, 1);
4617     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 0, 5, 1);
4618     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 0, 9, 1);
4619     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 0, 10, 1);
4620     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 0, 11, 1);
4621     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 1, 0, 18);
4622     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 1, 1, 17);
4623 }
4624 
test44()4625 void test44()
4626 {
4627     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 1, 4, 14);
4628     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 1, 8, 10);
4629     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 1, 9, 9);
4630     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 1, 10, 9);
4631     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 5, 0, 18);
4632     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 5, 1, -4);
4633     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 5, 2, -4);
4634     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 5, 4, -4);
4635     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 5, 5, -4);
4636     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 5, 6, -4);
4637     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 9, 0, 18);
4638     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 9, 1, -8);
4639     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 9, 2, -8);
4640     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 10, 0, 18);
4641     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 10, 1, 18);
4642     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 11, 0, 0);
4643     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 0, 0, 18);
4644     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 0, 1, 1);
4645     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 0, 10, 1);
4646     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 0, 19, 1);
4647     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 0, 20, 1);
4648     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 0, 21, 1);
4649     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 1, 0, 18);
4650     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 1, 1, 17);
4651     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 1, 9, 9);
4652     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 1, 18, 0);
4653     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 1, 19, -1);
4654     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 1, 20, -1);
4655     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 10, 0, 18);
4656     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 10, 1, -9);
4657     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 10, 5, -9);
4658     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 10, 9, -9);
4659     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 10, 10, -9);
4660     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 10, 11, -9);
4661     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 19, 0, 18);
4662     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 19, 1, -18);
4663     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 19, 2, -18);
4664     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 20, 0, 18);
4665     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 20, 1, 18);
4666     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 21, 0, 0);
4667     test("abcdefghijklmnopqrst", 1, 19, "", 0, 0, 19);
4668     test("abcdefghijklmnopqrst", 1, 19, "", 0, 1, 19);
4669     test("abcdefghijklmnopqrst", 1, 19, "", 1, 0, 0);
4670     test("abcdefghijklmnopqrst", 1, 19, "abcde", 0, 0, 19);
4671     test("abcdefghijklmnopqrst", 1, 19, "abcde", 0, 1, 1);
4672     test("abcdefghijklmnopqrst", 1, 19, "abcde", 0, 2, 1);
4673     test("abcdefghijklmnopqrst", 1, 19, "abcde", 0, 4, 1);
4674     test("abcdefghijklmnopqrst", 1, 19, "abcde", 0, 5, 1);
4675     test("abcdefghijklmnopqrst", 1, 19, "abcde", 0, 6, 1);
4676     test("abcdefghijklmnopqrst", 1, 19, "abcde", 1, 0, 19);
4677     test("abcdefghijklmnopqrst", 1, 19, "abcde", 1, 1, 18);
4678     test("abcdefghijklmnopqrst", 1, 19, "abcde", 1, 2, 17);
4679     test("abcdefghijklmnopqrst", 1, 19, "abcde", 1, 3, 16);
4680     test("abcdefghijklmnopqrst", 1, 19, "abcde", 1, 4, 15);
4681     test("abcdefghijklmnopqrst", 1, 19, "abcde", 1, 5, 15);
4682     test("abcdefghijklmnopqrst", 1, 19, "abcde", 2, 0, 19);
4683     test("abcdefghijklmnopqrst", 1, 19, "abcde", 2, 1, -1);
4684     test("abcdefghijklmnopqrst", 1, 19, "abcde", 2, 2, -1);
4685     test("abcdefghijklmnopqrst", 1, 19, "abcde", 2, 3, -1);
4686     test("abcdefghijklmnopqrst", 1, 19, "abcde", 2, 4, -1);
4687     test("abcdefghijklmnopqrst", 1, 19, "abcde", 4, 0, 19);
4688     test("abcdefghijklmnopqrst", 1, 19, "abcde", 4, 1, -3);
4689     test("abcdefghijklmnopqrst", 1, 19, "abcde", 4, 2, -3);
4690     test("abcdefghijklmnopqrst", 1, 19, "abcde", 5, 0, 19);
4691     test("abcdefghijklmnopqrst", 1, 19, "abcde", 5, 1, 19);
4692     test("abcdefghijklmnopqrst", 1, 19, "abcde", 6, 0, 0);
4693     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 0, 0, 19);
4694     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 0, 1, 1);
4695     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 0, 5, 1);
4696     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 0, 9, 1);
4697     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 0, 10, 1);
4698     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 0, 11, 1);
4699     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 1, 0, 19);
4700     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 1, 1, 18);
4701     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 1, 4, 15);
4702     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 1, 8, 11);
4703     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 1, 9, 10);
4704     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 1, 10, 10);
4705     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 5, 0, 19);
4706     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 5, 1, -4);
4707     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 5, 2, -4);
4708     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 5, 4, -4);
4709     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 5, 5, -4);
4710     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 5, 6, -4);
4711     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 9, 0, 19);
4712     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 9, 1, -8);
4713     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 9, 2, -8);
4714     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 10, 0, 19);
4715     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 10, 1, 19);
4716     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 11, 0, 0);
4717     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 0, 0, 19);
4718     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 0, 1, 1);
4719     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 0, 10, 1);
4720     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 0, 19, 1);
4721     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 0, 20, 1);
4722     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 0, 21, 1);
4723     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 1, 0, 19);
4724     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 1, 1, 18);
4725     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 1, 9, 10);
4726     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 1, 18, 1);
4727 }
4728 
test45()4729 void test45()
4730 {
4731     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 1, 19, 0);
4732     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 1, 20, 0);
4733     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 10, 0, 19);
4734     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 10, 1, -9);
4735     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 10, 5, -9);
4736     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 10, 9, -9);
4737     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 10, 10, -9);
4738     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 10, 11, -9);
4739     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 19, 0, 19);
4740     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 19, 1, -18);
4741     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 19, 2, -18);
4742     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 20, 0, 19);
4743     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 20, 1, 19);
4744     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 21, 0, 0);
4745     test("abcdefghijklmnopqrst", 1, 20, "", 0, 0, 19);
4746     test("abcdefghijklmnopqrst", 1, 20, "", 0, 1, 19);
4747     test("abcdefghijklmnopqrst", 1, 20, "", 1, 0, 0);
4748     test("abcdefghijklmnopqrst", 1, 20, "abcde", 0, 0, 19);
4749     test("abcdefghijklmnopqrst", 1, 20, "abcde", 0, 1, 1);
4750     test("abcdefghijklmnopqrst", 1, 20, "abcde", 0, 2, 1);
4751     test("abcdefghijklmnopqrst", 1, 20, "abcde", 0, 4, 1);
4752     test("abcdefghijklmnopqrst", 1, 20, "abcde", 0, 5, 1);
4753     test("abcdefghijklmnopqrst", 1, 20, "abcde", 0, 6, 1);
4754     test("abcdefghijklmnopqrst", 1, 20, "abcde", 1, 0, 19);
4755     test("abcdefghijklmnopqrst", 1, 20, "abcde", 1, 1, 18);
4756     test("abcdefghijklmnopqrst", 1, 20, "abcde", 1, 2, 17);
4757     test("abcdefghijklmnopqrst", 1, 20, "abcde", 1, 3, 16);
4758     test("abcdefghijklmnopqrst", 1, 20, "abcde", 1, 4, 15);
4759     test("abcdefghijklmnopqrst", 1, 20, "abcde", 1, 5, 15);
4760     test("abcdefghijklmnopqrst", 1, 20, "abcde", 2, 0, 19);
4761     test("abcdefghijklmnopqrst", 1, 20, "abcde", 2, 1, -1);
4762     test("abcdefghijklmnopqrst", 1, 20, "abcde", 2, 2, -1);
4763     test("abcdefghijklmnopqrst", 1, 20, "abcde", 2, 3, -1);
4764     test("abcdefghijklmnopqrst", 1, 20, "abcde", 2, 4, -1);
4765     test("abcdefghijklmnopqrst", 1, 20, "abcde", 4, 0, 19);
4766     test("abcdefghijklmnopqrst", 1, 20, "abcde", 4, 1, -3);
4767     test("abcdefghijklmnopqrst", 1, 20, "abcde", 4, 2, -3);
4768     test("abcdefghijklmnopqrst", 1, 20, "abcde", 5, 0, 19);
4769     test("abcdefghijklmnopqrst", 1, 20, "abcde", 5, 1, 19);
4770     test("abcdefghijklmnopqrst", 1, 20, "abcde", 6, 0, 0);
4771     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 0, 0, 19);
4772     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 0, 1, 1);
4773     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 0, 5, 1);
4774     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 0, 9, 1);
4775     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 0, 10, 1);
4776     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 0, 11, 1);
4777     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 1, 0, 19);
4778     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 1, 1, 18);
4779     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 1, 4, 15);
4780     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 1, 8, 11);
4781     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 1, 9, 10);
4782     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 1, 10, 10);
4783     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 5, 0, 19);
4784     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 5, 1, -4);
4785     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 5, 2, -4);
4786     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 5, 4, -4);
4787     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 5, 5, -4);
4788     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 5, 6, -4);
4789     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 9, 0, 19);
4790     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 9, 1, -8);
4791     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 9, 2, -8);
4792     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 10, 0, 19);
4793     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 10, 1, 19);
4794     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 11, 0, 0);
4795     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 0, 0, 19);
4796     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 0, 1, 1);
4797     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 0, 10, 1);
4798     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 0, 19, 1);
4799     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 0, 20, 1);
4800     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 0, 21, 1);
4801     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 1, 0, 19);
4802     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 1, 1, 18);
4803     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 1, 9, 10);
4804     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 1, 18, 1);
4805     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 1, 19, 0);
4806     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 1, 20, 0);
4807     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 10, 0, 19);
4808     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 10, 1, -9);
4809     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 10, 5, -9);
4810     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 10, 9, -9);
4811     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 10, 10, -9);
4812     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 10, 11, -9);
4813     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 19, 0, 19);
4814     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 19, 1, -18);
4815     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 19, 2, -18);
4816     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 20, 0, 19);
4817     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 20, 1, 19);
4818     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 21, 0, 0);
4819     test("abcdefghijklmnopqrst", 10, 0, "", 0, 0, 0);
4820     test("abcdefghijklmnopqrst", 10, 0, "", 0, 1, 0);
4821     test("abcdefghijklmnopqrst", 10, 0, "", 1, 0, 0);
4822     test("abcdefghijklmnopqrst", 10, 0, "abcde", 0, 0, 0);
4823     test("abcdefghijklmnopqrst", 10, 0, "abcde", 0, 1, -1);
4824     test("abcdefghijklmnopqrst", 10, 0, "abcde", 0, 2, -2);
4825     test("abcdefghijklmnopqrst", 10, 0, "abcde", 0, 4, -4);
4826     test("abcdefghijklmnopqrst", 10, 0, "abcde", 0, 5, -5);
4827     test("abcdefghijklmnopqrst", 10, 0, "abcde", 0, 6, -5);
4828     test("abcdefghijklmnopqrst", 10, 0, "abcde", 1, 0, 0);
4829     test("abcdefghijklmnopqrst", 10, 0, "abcde", 1, 1, -1);
4830     test("abcdefghijklmnopqrst", 10, 0, "abcde", 1, 2, -2);
4831 }
4832 
test46()4833 void test46()
4834 {
4835     test("abcdefghijklmnopqrst", 10, 0, "abcde", 1, 3, -3);
4836     test("abcdefghijklmnopqrst", 10, 0, "abcde", 1, 4, -4);
4837     test("abcdefghijklmnopqrst", 10, 0, "abcde", 1, 5, -4);
4838     test("abcdefghijklmnopqrst", 10, 0, "abcde", 2, 0, 0);
4839     test("abcdefghijklmnopqrst", 10, 0, "abcde", 2, 1, -1);
4840     test("abcdefghijklmnopqrst", 10, 0, "abcde", 2, 2, -2);
4841     test("abcdefghijklmnopqrst", 10, 0, "abcde", 2, 3, -3);
4842     test("abcdefghijklmnopqrst", 10, 0, "abcde", 2, 4, -3);
4843     test("abcdefghijklmnopqrst", 10, 0, "abcde", 4, 0, 0);
4844     test("abcdefghijklmnopqrst", 10, 0, "abcde", 4, 1, -1);
4845     test("abcdefghijklmnopqrst", 10, 0, "abcde", 4, 2, -1);
4846     test("abcdefghijklmnopqrst", 10, 0, "abcde", 5, 0, 0);
4847     test("abcdefghijklmnopqrst", 10, 0, "abcde", 5, 1, 0);
4848     test("abcdefghijklmnopqrst", 10, 0, "abcde", 6, 0, 0);
4849     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 0, 0, 0);
4850     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 0, 1, -1);
4851     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 0, 5, -5);
4852     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 0, 9, -9);
4853     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 0, 10, -10);
4854     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 0, 11, -10);
4855     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 1, 0, 0);
4856     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 1, 1, -1);
4857     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 1, 4, -4);
4858     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 1, 8, -8);
4859     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 1, 9, -9);
4860     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 1, 10, -9);
4861     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 5, 0, 0);
4862     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 5, 1, -1);
4863     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 5, 2, -2);
4864     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 5, 4, -4);
4865     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 5, 5, -5);
4866     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 5, 6, -5);
4867     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 9, 0, 0);
4868     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 9, 1, -1);
4869     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 9, 2, -1);
4870     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 10, 0, 0);
4871     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 10, 1, 0);
4872     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 11, 0, 0);
4873     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 0, 0, 0);
4874     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 0, 1, -1);
4875     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 0, 10, -10);
4876     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 0, 19, -19);
4877     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 0, 20, -20);
4878     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 0, 21, -20);
4879     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 1, 0, 0);
4880     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 1, 1, -1);
4881     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 1, 9, -9);
4882     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 1, 18, -18);
4883     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 1, 19, -19);
4884     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 1, 20, -19);
4885     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 10, 0, 0);
4886     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 10, 1, -1);
4887     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 10, 5, -5);
4888     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 10, 9, -9);
4889     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 10, 10, -10);
4890     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 10, 11, -10);
4891     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 19, 0, 0);
4892     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 19, 1, -1);
4893     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 19, 2, -1);
4894     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 20, 0, 0);
4895     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 20, 1, 0);
4896     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 21, 0, 0);
4897     test("abcdefghijklmnopqrst", 10, 1, "", 0, 0, 1);
4898     test("abcdefghijklmnopqrst", 10, 1, "", 0, 1, 1);
4899     test("abcdefghijklmnopqrst", 10, 1, "", 1, 0, 0);
4900     test("abcdefghijklmnopqrst", 10, 1, "abcde", 0, 0, 1);
4901     test("abcdefghijklmnopqrst", 10, 1, "abcde", 0, 1, 10);
4902     test("abcdefghijklmnopqrst", 10, 1, "abcde", 0, 2, 10);
4903     test("abcdefghijklmnopqrst", 10, 1, "abcde", 0, 4, 10);
4904     test("abcdefghijklmnopqrst", 10, 1, "abcde", 0, 5, 10);
4905     test("abcdefghijklmnopqrst", 10, 1, "abcde", 0, 6, 10);
4906     test("abcdefghijklmnopqrst", 10, 1, "abcde", 1, 0, 1);
4907     test("abcdefghijklmnopqrst", 10, 1, "abcde", 1, 1, 9);
4908     test("abcdefghijklmnopqrst", 10, 1, "abcde", 1, 2, 9);
4909     test("abcdefghijklmnopqrst", 10, 1, "abcde", 1, 3, 9);
4910     test("abcdefghijklmnopqrst", 10, 1, "abcde", 1, 4, 9);
4911     test("abcdefghijklmnopqrst", 10, 1, "abcde", 1, 5, 9);
4912     test("abcdefghijklmnopqrst", 10, 1, "abcde", 2, 0, 1);
4913     test("abcdefghijklmnopqrst", 10, 1, "abcde", 2, 1, 8);
4914     test("abcdefghijklmnopqrst", 10, 1, "abcde", 2, 2, 8);
4915     test("abcdefghijklmnopqrst", 10, 1, "abcde", 2, 3, 8);
4916     test("abcdefghijklmnopqrst", 10, 1, "abcde", 2, 4, 8);
4917     test("abcdefghijklmnopqrst", 10, 1, "abcde", 4, 0, 1);
4918     test("abcdefghijklmnopqrst", 10, 1, "abcde", 4, 1, 6);
4919     test("abcdefghijklmnopqrst", 10, 1, "abcde", 4, 2, 6);
4920     test("abcdefghijklmnopqrst", 10, 1, "abcde", 5, 0, 1);
4921     test("abcdefghijklmnopqrst", 10, 1, "abcde", 5, 1, 1);
4922     test("abcdefghijklmnopqrst", 10, 1, "abcde", 6, 0, 0);
4923     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 0, 0, 1);
4924     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 0, 1, 10);
4925     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 0, 5, 10);
4926     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 0, 9, 10);
4927     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 0, 10, 10);
4928     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 0, 11, 10);
4929     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 1, 0, 1);
4930     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 1, 1, 9);
4931     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 1, 4, 9);
4932     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 1, 8, 9);
4933     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 1, 9, 9);
4934     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 1, 10, 9);
4935 }
4936 
test47()4937 void test47()
4938 {
4939     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 5, 0, 1);
4940     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 5, 1, 5);
4941     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 5, 2, 5);
4942     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 5, 4, 5);
4943     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 5, 5, 5);
4944     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 5, 6, 5);
4945     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 9, 0, 1);
4946     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 9, 1, 1);
4947     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 9, 2, 1);
4948     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 10, 0, 1);
4949     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 10, 1, 1);
4950     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 11, 0, 0);
4951     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 0, 0, 1);
4952     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 0, 1, 10);
4953     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 0, 10, 10);
4954     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 0, 19, 10);
4955     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 0, 20, 10);
4956     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 0, 21, 10);
4957     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 1, 0, 1);
4958     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 1, 1, 9);
4959     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 1, 9, 9);
4960     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 1, 18, 9);
4961     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 1, 19, 9);
4962     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 1, 20, 9);
4963     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 10, 0, 1);
4964     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 10, 1, 0);
4965     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 10, 5, -4);
4966     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 10, 9, -8);
4967     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 10, 10, -9);
4968     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 10, 11, -9);
4969     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 19, 0, 1);
4970     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 19, 1, -9);
4971     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 19, 2, -9);
4972     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 20, 0, 1);
4973     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 20, 1, 1);
4974     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 21, 0, 0);
4975     test("abcdefghijklmnopqrst", 10, 5, "", 0, 0, 5);
4976     test("abcdefghijklmnopqrst", 10, 5, "", 0, 1, 5);
4977     test("abcdefghijklmnopqrst", 10, 5, "", 1, 0, 0);
4978     test("abcdefghijklmnopqrst", 10, 5, "abcde", 0, 0, 5);
4979     test("abcdefghijklmnopqrst", 10, 5, "abcde", 0, 1, 10);
4980     test("abcdefghijklmnopqrst", 10, 5, "abcde", 0, 2, 10);
4981     test("abcdefghijklmnopqrst", 10, 5, "abcde", 0, 4, 10);
4982     test("abcdefghijklmnopqrst", 10, 5, "abcde", 0, 5, 10);
4983     test("abcdefghijklmnopqrst", 10, 5, "abcde", 0, 6, 10);
4984     test("abcdefghijklmnopqrst", 10, 5, "abcde", 1, 0, 5);
4985     test("abcdefghijklmnopqrst", 10, 5, "abcde", 1, 1, 9);
4986     test("abcdefghijklmnopqrst", 10, 5, "abcde", 1, 2, 9);
4987     test("abcdefghijklmnopqrst", 10, 5, "abcde", 1, 3, 9);
4988     test("abcdefghijklmnopqrst", 10, 5, "abcde", 1, 4, 9);
4989     test("abcdefghijklmnopqrst", 10, 5, "abcde", 1, 5, 9);
4990     test("abcdefghijklmnopqrst", 10, 5, "abcde", 2, 0, 5);
4991     test("abcdefghijklmnopqrst", 10, 5, "abcde", 2, 1, 8);
4992     test("abcdefghijklmnopqrst", 10, 5, "abcde", 2, 2, 8);
4993     test("abcdefghijklmnopqrst", 10, 5, "abcde", 2, 3, 8);
4994     test("abcdefghijklmnopqrst", 10, 5, "abcde", 2, 4, 8);
4995     test("abcdefghijklmnopqrst", 10, 5, "abcde", 4, 0, 5);
4996     test("abcdefghijklmnopqrst", 10, 5, "abcde", 4, 1, 6);
4997     test("abcdefghijklmnopqrst", 10, 5, "abcde", 4, 2, 6);
4998     test("abcdefghijklmnopqrst", 10, 5, "abcde", 5, 0, 5);
4999     test("abcdefghijklmnopqrst", 10, 5, "abcde", 5, 1, 5);
5000     test("abcdefghijklmnopqrst", 10, 5, "abcde", 6, 0, 0);
5001     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 0, 0, 5);
5002     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 0, 1, 10);
5003     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 0, 5, 10);
5004     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 0, 9, 10);
5005     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 0, 10, 10);
5006     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 0, 11, 10);
5007     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 1, 0, 5);
5008     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 1, 1, 9);
5009     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 1, 4, 9);
5010     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 1, 8, 9);
5011     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 1, 9, 9);
5012     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 1, 10, 9);
5013     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 5, 0, 5);
5014     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 5, 1, 5);
5015     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 5, 2, 5);
5016     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 5, 4, 5);
5017     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 5, 5, 5);
5018     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 5, 6, 5);
5019     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 9, 0, 5);
5020     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 9, 1, 1);
5021     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 9, 2, 1);
5022     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 10, 0, 5);
5023     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 10, 1, 5);
5024     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 11, 0, 0);
5025     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 0, 0, 5);
5026     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 0, 1, 10);
5027     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 0, 10, 10);
5028     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 0, 19, 10);
5029     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 0, 20, 10);
5030     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 0, 21, 10);
5031     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 1, 0, 5);
5032     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 1, 1, 9);
5033     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 1, 9, 9);
5034     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 1, 18, 9);
5035     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 1, 19, 9);
5036     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 1, 20, 9);
5037     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 10, 0, 5);
5038     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 10, 1, 4);
5039 }
5040 
test48()5041 void test48()
5042 {
5043     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 10, 5, 0);
5044     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 10, 9, -4);
5045     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 10, 10, -5);
5046     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 10, 11, -5);
5047     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 19, 0, 5);
5048     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 19, 1, -9);
5049     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 19, 2, -9);
5050     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 20, 0, 5);
5051     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 20, 1, 5);
5052     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 21, 0, 0);
5053     test("abcdefghijklmnopqrst", 10, 9, "", 0, 0, 9);
5054     test("abcdefghijklmnopqrst", 10, 9, "", 0, 1, 9);
5055     test("abcdefghijklmnopqrst", 10, 9, "", 1, 0, 0);
5056     test("abcdefghijklmnopqrst", 10, 9, "abcde", 0, 0, 9);
5057     test("abcdefghijklmnopqrst", 10, 9, "abcde", 0, 1, 10);
5058     test("abcdefghijklmnopqrst", 10, 9, "abcde", 0, 2, 10);
5059     test("abcdefghijklmnopqrst", 10, 9, "abcde", 0, 4, 10);
5060     test("abcdefghijklmnopqrst", 10, 9, "abcde", 0, 5, 10);
5061     test("abcdefghijklmnopqrst", 10, 9, "abcde", 0, 6, 10);
5062     test("abcdefghijklmnopqrst", 10, 9, "abcde", 1, 0, 9);
5063     test("abcdefghijklmnopqrst", 10, 9, "abcde", 1, 1, 9);
5064     test("abcdefghijklmnopqrst", 10, 9, "abcde", 1, 2, 9);
5065     test("abcdefghijklmnopqrst", 10, 9, "abcde", 1, 3, 9);
5066     test("abcdefghijklmnopqrst", 10, 9, "abcde", 1, 4, 9);
5067     test("abcdefghijklmnopqrst", 10, 9, "abcde", 1, 5, 9);
5068     test("abcdefghijklmnopqrst", 10, 9, "abcde", 2, 0, 9);
5069     test("abcdefghijklmnopqrst", 10, 9, "abcde", 2, 1, 8);
5070     test("abcdefghijklmnopqrst", 10, 9, "abcde", 2, 2, 8);
5071     test("abcdefghijklmnopqrst", 10, 9, "abcde", 2, 3, 8);
5072     test("abcdefghijklmnopqrst", 10, 9, "abcde", 2, 4, 8);
5073     test("abcdefghijklmnopqrst", 10, 9, "abcde", 4, 0, 9);
5074     test("abcdefghijklmnopqrst", 10, 9, "abcde", 4, 1, 6);
5075     test("abcdefghijklmnopqrst", 10, 9, "abcde", 4, 2, 6);
5076     test("abcdefghijklmnopqrst", 10, 9, "abcde", 5, 0, 9);
5077     test("abcdefghijklmnopqrst", 10, 9, "abcde", 5, 1, 9);
5078     test("abcdefghijklmnopqrst", 10, 9, "abcde", 6, 0, 0);
5079     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 0, 0, 9);
5080     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 0, 1, 10);
5081     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 0, 5, 10);
5082     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 0, 9, 10);
5083     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 0, 10, 10);
5084     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 0, 11, 10);
5085     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 1, 0, 9);
5086     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 1, 1, 9);
5087     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 1, 4, 9);
5088     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 1, 8, 9);
5089     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 1, 9, 9);
5090     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 1, 10, 9);
5091     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 5, 0, 9);
5092     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 5, 1, 5);
5093     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 5, 2, 5);
5094     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 5, 4, 5);
5095     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 5, 5, 5);
5096     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 5, 6, 5);
5097     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 9, 0, 9);
5098     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 9, 1, 1);
5099     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 9, 2, 1);
5100     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 10, 0, 9);
5101     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 10, 1, 9);
5102     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 11, 0, 0);
5103     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 0, 0, 9);
5104     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 0, 1, 10);
5105     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 0, 10, 10);
5106     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 0, 19, 10);
5107     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 0, 20, 10);
5108     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 0, 21, 10);
5109     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 1, 0, 9);
5110     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 1, 1, 9);
5111     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 1, 9, 9);
5112     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 1, 18, 9);
5113     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 1, 19, 9);
5114     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 1, 20, 9);
5115     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 10, 0, 9);
5116     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 10, 1, 8);
5117     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 10, 5, 4);
5118     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 10, 9, 0);
5119     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 10, 10, -1);
5120     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 10, 11, -1);
5121     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 19, 0, 9);
5122     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 19, 1, -9);
5123     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 19, 2, -9);
5124     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 20, 0, 9);
5125     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 20, 1, 9);
5126     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 21, 0, 0);
5127     test("abcdefghijklmnopqrst", 10, 10, "", 0, 0, 10);
5128     test("abcdefghijklmnopqrst", 10, 10, "", 0, 1, 10);
5129     test("abcdefghijklmnopqrst", 10, 10, "", 1, 0, 0);
5130     test("abcdefghijklmnopqrst", 10, 10, "abcde", 0, 0, 10);
5131     test("abcdefghijklmnopqrst", 10, 10, "abcde", 0, 1, 10);
5132     test("abcdefghijklmnopqrst", 10, 10, "abcde", 0, 2, 10);
5133     test("abcdefghijklmnopqrst", 10, 10, "abcde", 0, 4, 10);
5134     test("abcdefghijklmnopqrst", 10, 10, "abcde", 0, 5, 10);
5135     test("abcdefghijklmnopqrst", 10, 10, "abcde", 0, 6, 10);
5136     test("abcdefghijklmnopqrst", 10, 10, "abcde", 1, 0, 10);
5137     test("abcdefghijklmnopqrst", 10, 10, "abcde", 1, 1, 9);
5138     test("abcdefghijklmnopqrst", 10, 10, "abcde", 1, 2, 9);
5139     test("abcdefghijklmnopqrst", 10, 10, "abcde", 1, 3, 9);
5140     test("abcdefghijklmnopqrst", 10, 10, "abcde", 1, 4, 9);
5141     test("abcdefghijklmnopqrst", 10, 10, "abcde", 1, 5, 9);
5142     test("abcdefghijklmnopqrst", 10, 10, "abcde", 2, 0, 10);
5143 }
5144 
test49()5145 void test49()
5146 {
5147     test("abcdefghijklmnopqrst", 10, 10, "abcde", 2, 1, 8);
5148     test("abcdefghijklmnopqrst", 10, 10, "abcde", 2, 2, 8);
5149     test("abcdefghijklmnopqrst", 10, 10, "abcde", 2, 3, 8);
5150     test("abcdefghijklmnopqrst", 10, 10, "abcde", 2, 4, 8);
5151     test("abcdefghijklmnopqrst", 10, 10, "abcde", 4, 0, 10);
5152     test("abcdefghijklmnopqrst", 10, 10, "abcde", 4, 1, 6);
5153     test("abcdefghijklmnopqrst", 10, 10, "abcde", 4, 2, 6);
5154     test("abcdefghijklmnopqrst", 10, 10, "abcde", 5, 0, 10);
5155     test("abcdefghijklmnopqrst", 10, 10, "abcde", 5, 1, 10);
5156     test("abcdefghijklmnopqrst", 10, 10, "abcde", 6, 0, 0);
5157     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 0, 0, 10);
5158     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 0, 1, 10);
5159     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 0, 5, 10);
5160     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 0, 9, 10);
5161     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 0, 10, 10);
5162     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 0, 11, 10);
5163     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 1, 0, 10);
5164     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 1, 1, 9);
5165     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 1, 4, 9);
5166     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 1, 8, 9);
5167     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 1, 9, 9);
5168     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 1, 10, 9);
5169     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 5, 0, 10);
5170     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 5, 1, 5);
5171     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 5, 2, 5);
5172     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 5, 4, 5);
5173     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 5, 5, 5);
5174     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 5, 6, 5);
5175     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 9, 0, 10);
5176     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 9, 1, 1);
5177     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 9, 2, 1);
5178     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 10, 0, 10);
5179     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 10, 1, 10);
5180     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 11, 0, 0);
5181     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 0, 0, 10);
5182     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 0, 1, 10);
5183     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 0, 10, 10);
5184     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 0, 19, 10);
5185     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 0, 20, 10);
5186     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 0, 21, 10);
5187     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 1, 0, 10);
5188     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 1, 1, 9);
5189     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 1, 9, 9);
5190     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 1, 18, 9);
5191     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 1, 19, 9);
5192     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 1, 20, 9);
5193     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 10, 0, 10);
5194     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 10, 1, 9);
5195     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 10, 5, 5);
5196     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 10, 9, 1);
5197     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 10, 10, 0);
5198     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 10, 11, 0);
5199     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 19, 0, 10);
5200     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 19, 1, -9);
5201     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 19, 2, -9);
5202     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 20, 0, 10);
5203     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 20, 1, 10);
5204     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 21, 0, 0);
5205     test("abcdefghijklmnopqrst", 10, 11, "", 0, 0, 10);
5206     test("abcdefghijklmnopqrst", 10, 11, "", 0, 1, 10);
5207     test("abcdefghijklmnopqrst", 10, 11, "", 1, 0, 0);
5208     test("abcdefghijklmnopqrst", 10, 11, "abcde", 0, 0, 10);
5209     test("abcdefghijklmnopqrst", 10, 11, "abcde", 0, 1, 10);
5210     test("abcdefghijklmnopqrst", 10, 11, "abcde", 0, 2, 10);
5211     test("abcdefghijklmnopqrst", 10, 11, "abcde", 0, 4, 10);
5212     test("abcdefghijklmnopqrst", 10, 11, "abcde", 0, 5, 10);
5213     test("abcdefghijklmnopqrst", 10, 11, "abcde", 0, 6, 10);
5214     test("abcdefghijklmnopqrst", 10, 11, "abcde", 1, 0, 10);
5215     test("abcdefghijklmnopqrst", 10, 11, "abcde", 1, 1, 9);
5216     test("abcdefghijklmnopqrst", 10, 11, "abcde", 1, 2, 9);
5217     test("abcdefghijklmnopqrst", 10, 11, "abcde", 1, 3, 9);
5218     test("abcdefghijklmnopqrst", 10, 11, "abcde", 1, 4, 9);
5219     test("abcdefghijklmnopqrst", 10, 11, "abcde", 1, 5, 9);
5220     test("abcdefghijklmnopqrst", 10, 11, "abcde", 2, 0, 10);
5221     test("abcdefghijklmnopqrst", 10, 11, "abcde", 2, 1, 8);
5222     test("abcdefghijklmnopqrst", 10, 11, "abcde", 2, 2, 8);
5223     test("abcdefghijklmnopqrst", 10, 11, "abcde", 2, 3, 8);
5224     test("abcdefghijklmnopqrst", 10, 11, "abcde", 2, 4, 8);
5225     test("abcdefghijklmnopqrst", 10, 11, "abcde", 4, 0, 10);
5226     test("abcdefghijklmnopqrst", 10, 11, "abcde", 4, 1, 6);
5227     test("abcdefghijklmnopqrst", 10, 11, "abcde", 4, 2, 6);
5228     test("abcdefghijklmnopqrst", 10, 11, "abcde", 5, 0, 10);
5229     test("abcdefghijklmnopqrst", 10, 11, "abcde", 5, 1, 10);
5230     test("abcdefghijklmnopqrst", 10, 11, "abcde", 6, 0, 0);
5231     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 0, 0, 10);
5232     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 0, 1, 10);
5233     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 0, 5, 10);
5234     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 0, 9, 10);
5235     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 0, 10, 10);
5236     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 0, 11, 10);
5237     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 1, 0, 10);
5238     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 1, 1, 9);
5239     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 1, 4, 9);
5240     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 1, 8, 9);
5241     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 1, 9, 9);
5242     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 1, 10, 9);
5243     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 5, 0, 10);
5244     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 5, 1, 5);
5245     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 5, 2, 5);
5246     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 5, 4, 5);
5247 }
5248 
test50()5249 void test50()
5250 {
5251     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 5, 5, 5);
5252     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 5, 6, 5);
5253     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 9, 0, 10);
5254     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 9, 1, 1);
5255     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 9, 2, 1);
5256     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 10, 0, 10);
5257     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 10, 1, 10);
5258     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 11, 0, 0);
5259     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 0, 0, 10);
5260     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 0, 1, 10);
5261     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 0, 10, 10);
5262     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 0, 19, 10);
5263     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 0, 20, 10);
5264     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 0, 21, 10);
5265     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 1, 0, 10);
5266     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 1, 1, 9);
5267     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 1, 9, 9);
5268     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 1, 18, 9);
5269     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 1, 19, 9);
5270     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 1, 20, 9);
5271     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 10, 0, 10);
5272     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 10, 1, 9);
5273     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 10, 5, 5);
5274     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 10, 9, 1);
5275     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 10, 10, 0);
5276     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 10, 11, 0);
5277     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 19, 0, 10);
5278     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 19, 1, -9);
5279     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 19, 2, -9);
5280     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 20, 0, 10);
5281     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 20, 1, 10);
5282     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 21, 0, 0);
5283     test("abcdefghijklmnopqrst", 19, 0, "", 0, 0, 0);
5284     test("abcdefghijklmnopqrst", 19, 0, "", 0, 1, 0);
5285     test("abcdefghijklmnopqrst", 19, 0, "", 1, 0, 0);
5286     test("abcdefghijklmnopqrst", 19, 0, "abcde", 0, 0, 0);
5287     test("abcdefghijklmnopqrst", 19, 0, "abcde", 0, 1, -1);
5288     test("abcdefghijklmnopqrst", 19, 0, "abcde", 0, 2, -2);
5289     test("abcdefghijklmnopqrst", 19, 0, "abcde", 0, 4, -4);
5290     test("abcdefghijklmnopqrst", 19, 0, "abcde", 0, 5, -5);
5291     test("abcdefghijklmnopqrst", 19, 0, "abcde", 0, 6, -5);
5292     test("abcdefghijklmnopqrst", 19, 0, "abcde", 1, 0, 0);
5293     test("abcdefghijklmnopqrst", 19, 0, "abcde", 1, 1, -1);
5294     test("abcdefghijklmnopqrst", 19, 0, "abcde", 1, 2, -2);
5295     test("abcdefghijklmnopqrst", 19, 0, "abcde", 1, 3, -3);
5296     test("abcdefghijklmnopqrst", 19, 0, "abcde", 1, 4, -4);
5297     test("abcdefghijklmnopqrst", 19, 0, "abcde", 1, 5, -4);
5298     test("abcdefghijklmnopqrst", 19, 0, "abcde", 2, 0, 0);
5299     test("abcdefghijklmnopqrst", 19, 0, "abcde", 2, 1, -1);
5300     test("abcdefghijklmnopqrst", 19, 0, "abcde", 2, 2, -2);
5301     test("abcdefghijklmnopqrst", 19, 0, "abcde", 2, 3, -3);
5302     test("abcdefghijklmnopqrst", 19, 0, "abcde", 2, 4, -3);
5303     test("abcdefghijklmnopqrst", 19, 0, "abcde", 4, 0, 0);
5304     test("abcdefghijklmnopqrst", 19, 0, "abcde", 4, 1, -1);
5305     test("abcdefghijklmnopqrst", 19, 0, "abcde", 4, 2, -1);
5306     test("abcdefghijklmnopqrst", 19, 0, "abcde", 5, 0, 0);
5307     test("abcdefghijklmnopqrst", 19, 0, "abcde", 5, 1, 0);
5308     test("abcdefghijklmnopqrst", 19, 0, "abcde", 6, 0, 0);
5309     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 0, 0, 0);
5310     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 0, 1, -1);
5311     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 0, 5, -5);
5312     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 0, 9, -9);
5313     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 0, 10, -10);
5314     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 0, 11, -10);
5315     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 1, 0, 0);
5316     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 1, 1, -1);
5317     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 1, 4, -4);
5318     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 1, 8, -8);
5319     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 1, 9, -9);
5320     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 1, 10, -9);
5321     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 5, 0, 0);
5322     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 5, 1, -1);
5323     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 5, 2, -2);
5324     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 5, 4, -4);
5325     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 5, 5, -5);
5326     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 5, 6, -5);
5327     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 9, 0, 0);
5328     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 9, 1, -1);
5329     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 9, 2, -1);
5330     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 10, 0, 0);
5331     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 10, 1, 0);
5332     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 11, 0, 0);
5333     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 0, 0, 0);
5334     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 0, 1, -1);
5335     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 0, 10, -10);
5336     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 0, 19, -19);
5337     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 0, 20, -20);
5338     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 0, 21, -20);
5339     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 1, 0, 0);
5340     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 1, 1, -1);
5341     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 1, 9, -9);
5342     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 1, 18, -18);
5343     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 1, 19, -19);
5344     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 1, 20, -19);
5345     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 10, 0, 0);
5346     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 10, 1, -1);
5347     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 10, 5, -5);
5348     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 10, 9, -9);
5349     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 10, 10, -10);
5350     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 10, 11, -10);
5351 }
5352 
test51()5353 void test51()
5354 {
5355     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 19, 0, 0);
5356     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 19, 1, -1);
5357     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 19, 2, -1);
5358     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 20, 0, 0);
5359     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 20, 1, 0);
5360     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 21, 0, 0);
5361     test("abcdefghijklmnopqrst", 19, 1, "", 0, 0, 1);
5362     test("abcdefghijklmnopqrst", 19, 1, "", 0, 1, 1);
5363     test("abcdefghijklmnopqrst", 19, 1, "", 1, 0, 0);
5364     test("abcdefghijklmnopqrst", 19, 1, "abcde", 0, 0, 1);
5365     test("abcdefghijklmnopqrst", 19, 1, "abcde", 0, 1, 19);
5366     test("abcdefghijklmnopqrst", 19, 1, "abcde", 0, 2, 19);
5367     test("abcdefghijklmnopqrst", 19, 1, "abcde", 0, 4, 19);
5368     test("abcdefghijklmnopqrst", 19, 1, "abcde", 0, 5, 19);
5369     test("abcdefghijklmnopqrst", 19, 1, "abcde", 0, 6, 19);
5370     test("abcdefghijklmnopqrst", 19, 1, "abcde", 1, 0, 1);
5371     test("abcdefghijklmnopqrst", 19, 1, "abcde", 1, 1, 18);
5372     test("abcdefghijklmnopqrst", 19, 1, "abcde", 1, 2, 18);
5373     test("abcdefghijklmnopqrst", 19, 1, "abcde", 1, 3, 18);
5374     test("abcdefghijklmnopqrst", 19, 1, "abcde", 1, 4, 18);
5375     test("abcdefghijklmnopqrst", 19, 1, "abcde", 1, 5, 18);
5376     test("abcdefghijklmnopqrst", 19, 1, "abcde", 2, 0, 1);
5377     test("abcdefghijklmnopqrst", 19, 1, "abcde", 2, 1, 17);
5378     test("abcdefghijklmnopqrst", 19, 1, "abcde", 2, 2, 17);
5379     test("abcdefghijklmnopqrst", 19, 1, "abcde", 2, 3, 17);
5380     test("abcdefghijklmnopqrst", 19, 1, "abcde", 2, 4, 17);
5381     test("abcdefghijklmnopqrst", 19, 1, "abcde", 4, 0, 1);
5382     test("abcdefghijklmnopqrst", 19, 1, "abcde", 4, 1, 15);
5383     test("abcdefghijklmnopqrst", 19, 1, "abcde", 4, 2, 15);
5384     test("abcdefghijklmnopqrst", 19, 1, "abcde", 5, 0, 1);
5385     test("abcdefghijklmnopqrst", 19, 1, "abcde", 5, 1, 1);
5386     test("abcdefghijklmnopqrst", 19, 1, "abcde", 6, 0, 0);
5387     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 0, 0, 1);
5388     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 0, 1, 19);
5389     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 0, 5, 19);
5390     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 0, 9, 19);
5391     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 0, 10, 19);
5392     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 0, 11, 19);
5393     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 1, 0, 1);
5394     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 1, 1, 18);
5395     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 1, 4, 18);
5396     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 1, 8, 18);
5397     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 1, 9, 18);
5398     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 1, 10, 18);
5399     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 5, 0, 1);
5400     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 5, 1, 14);
5401     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 5, 2, 14);
5402     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 5, 4, 14);
5403     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 5, 5, 14);
5404     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 5, 6, 14);
5405     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 9, 0, 1);
5406     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 9, 1, 10);
5407     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 9, 2, 10);
5408     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 10, 0, 1);
5409     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 10, 1, 1);
5410     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 11, 0, 0);
5411     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 0, 0, 1);
5412     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 0, 1, 19);
5413     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 0, 10, 19);
5414     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 0, 19, 19);
5415     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 0, 20, 19);
5416     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 0, 21, 19);
5417     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 1, 0, 1);
5418     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 1, 1, 18);
5419     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 1, 9, 18);
5420     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 1, 18, 18);
5421     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 1, 19, 18);
5422     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 1, 20, 18);
5423     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 10, 0, 1);
5424     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 10, 1, 9);
5425     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 10, 5, 9);
5426     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 10, 9, 9);
5427     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 10, 10, 9);
5428     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 10, 11, 9);
5429     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 19, 0, 1);
5430     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 19, 1, 0);
5431     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 19, 2, 0);
5432     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 20, 0, 1);
5433     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 20, 1, 1);
5434     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 21, 0, 0);
5435     test("abcdefghijklmnopqrst", 19, 2, "", 0, 0, 1);
5436     test("abcdefghijklmnopqrst", 19, 2, "", 0, 1, 1);
5437     test("abcdefghijklmnopqrst", 19, 2, "", 1, 0, 0);
5438     test("abcdefghijklmnopqrst", 19, 2, "abcde", 0, 0, 1);
5439     test("abcdefghijklmnopqrst", 19, 2, "abcde", 0, 1, 19);
5440     test("abcdefghijklmnopqrst", 19, 2, "abcde", 0, 2, 19);
5441     test("abcdefghijklmnopqrst", 19, 2, "abcde", 0, 4, 19);
5442     test("abcdefghijklmnopqrst", 19, 2, "abcde", 0, 5, 19);
5443     test("abcdefghijklmnopqrst", 19, 2, "abcde", 0, 6, 19);
5444     test("abcdefghijklmnopqrst", 19, 2, "abcde", 1, 0, 1);
5445     test("abcdefghijklmnopqrst", 19, 2, "abcde", 1, 1, 18);
5446     test("abcdefghijklmnopqrst", 19, 2, "abcde", 1, 2, 18);
5447     test("abcdefghijklmnopqrst", 19, 2, "abcde", 1, 3, 18);
5448     test("abcdefghijklmnopqrst", 19, 2, "abcde", 1, 4, 18);
5449     test("abcdefghijklmnopqrst", 19, 2, "abcde", 1, 5, 18);
5450     test("abcdefghijklmnopqrst", 19, 2, "abcde", 2, 0, 1);
5451     test("abcdefghijklmnopqrst", 19, 2, "abcde", 2, 1, 17);
5452     test("abcdefghijklmnopqrst", 19, 2, "abcde", 2, 2, 17);
5453     test("abcdefghijklmnopqrst", 19, 2, "abcde", 2, 3, 17);
5454     test("abcdefghijklmnopqrst", 19, 2, "abcde", 2, 4, 17);
5455 }
5456 
test52()5457 void test52()
5458 {
5459     test("abcdefghijklmnopqrst", 19, 2, "abcde", 4, 0, 1);
5460     test("abcdefghijklmnopqrst", 19, 2, "abcde", 4, 1, 15);
5461     test("abcdefghijklmnopqrst", 19, 2, "abcde", 4, 2, 15);
5462     test("abcdefghijklmnopqrst", 19, 2, "abcde", 5, 0, 1);
5463     test("abcdefghijklmnopqrst", 19, 2, "abcde", 5, 1, 1);
5464     test("abcdefghijklmnopqrst", 19, 2, "abcde", 6, 0, 0);
5465     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 0, 0, 1);
5466     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 0, 1, 19);
5467     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 0, 5, 19);
5468     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 0, 9, 19);
5469     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 0, 10, 19);
5470     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 0, 11, 19);
5471     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 1, 0, 1);
5472     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 1, 1, 18);
5473     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 1, 4, 18);
5474     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 1, 8, 18);
5475     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 1, 9, 18);
5476     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 1, 10, 18);
5477     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 5, 0, 1);
5478     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 5, 1, 14);
5479     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 5, 2, 14);
5480     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 5, 4, 14);
5481     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 5, 5, 14);
5482     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 5, 6, 14);
5483     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 9, 0, 1);
5484     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 9, 1, 10);
5485     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 9, 2, 10);
5486     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 10, 0, 1);
5487     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 10, 1, 1);
5488     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 11, 0, 0);
5489     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 0, 0, 1);
5490     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 0, 1, 19);
5491     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 0, 10, 19);
5492     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 0, 19, 19);
5493     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 0, 20, 19);
5494     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 0, 21, 19);
5495     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 1, 0, 1);
5496     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 1, 1, 18);
5497     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 1, 9, 18);
5498     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 1, 18, 18);
5499     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 1, 19, 18);
5500     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 1, 20, 18);
5501     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 10, 0, 1);
5502     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 10, 1, 9);
5503     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 10, 5, 9);
5504     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 10, 9, 9);
5505     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 10, 10, 9);
5506     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 10, 11, 9);
5507     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 19, 0, 1);
5508     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 19, 1, 0);
5509     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 19, 2, 0);
5510     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 20, 0, 1);
5511     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 20, 1, 1);
5512     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 21, 0, 0);
5513     test("abcdefghijklmnopqrst", 20, 0, "", 0, 0, 0);
5514     test("abcdefghijklmnopqrst", 20, 0, "", 0, 1, 0);
5515     test("abcdefghijklmnopqrst", 20, 0, "", 1, 0, 0);
5516     test("abcdefghijklmnopqrst", 20, 0, "abcde", 0, 0, 0);
5517     test("abcdefghijklmnopqrst", 20, 0, "abcde", 0, 1, -1);
5518     test("abcdefghijklmnopqrst", 20, 0, "abcde", 0, 2, -2);
5519     test("abcdefghijklmnopqrst", 20, 0, "abcde", 0, 4, -4);
5520     test("abcdefghijklmnopqrst", 20, 0, "abcde", 0, 5, -5);
5521     test("abcdefghijklmnopqrst", 20, 0, "abcde", 0, 6, -5);
5522     test("abcdefghijklmnopqrst", 20, 0, "abcde", 1, 0, 0);
5523     test("abcdefghijklmnopqrst", 20, 0, "abcde", 1, 1, -1);
5524     test("abcdefghijklmnopqrst", 20, 0, "abcde", 1, 2, -2);
5525     test("abcdefghijklmnopqrst", 20, 0, "abcde", 1, 3, -3);
5526     test("abcdefghijklmnopqrst", 20, 0, "abcde", 1, 4, -4);
5527     test("abcdefghijklmnopqrst", 20, 0, "abcde", 1, 5, -4);
5528     test("abcdefghijklmnopqrst", 20, 0, "abcde", 2, 0, 0);
5529     test("abcdefghijklmnopqrst", 20, 0, "abcde", 2, 1, -1);
5530     test("abcdefghijklmnopqrst", 20, 0, "abcde", 2, 2, -2);
5531     test("abcdefghijklmnopqrst", 20, 0, "abcde", 2, 3, -3);
5532     test("abcdefghijklmnopqrst", 20, 0, "abcde", 2, 4, -3);
5533     test("abcdefghijklmnopqrst", 20, 0, "abcde", 4, 0, 0);
5534     test("abcdefghijklmnopqrst", 20, 0, "abcde", 4, 1, -1);
5535     test("abcdefghijklmnopqrst", 20, 0, "abcde", 4, 2, -1);
5536     test("abcdefghijklmnopqrst", 20, 0, "abcde", 5, 0, 0);
5537     test("abcdefghijklmnopqrst", 20, 0, "abcde", 5, 1, 0);
5538     test("abcdefghijklmnopqrst", 20, 0, "abcde", 6, 0, 0);
5539     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 0, 0, 0);
5540     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 0, 1, -1);
5541     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 0, 5, -5);
5542     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 0, 9, -9);
5543     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 0, 10, -10);
5544     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 0, 11, -10);
5545     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 1, 0, 0);
5546     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 1, 1, -1);
5547     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 1, 4, -4);
5548     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 1, 8, -8);
5549     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 1, 9, -9);
5550     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 1, 10, -9);
5551     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 5, 0, 0);
5552     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 5, 1, -1);
5553     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 5, 2, -2);
5554     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 5, 4, -4);
5555     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 5, 5, -5);
5556     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 5, 6, -5);
5557     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 9, 0, 0);
5558     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 9, 1, -1);
5559 }
5560 
test53()5561 void test53()
5562 {
5563     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 9, 2, -1);
5564     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 10, 0, 0);
5565     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 10, 1, 0);
5566     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 11, 0, 0);
5567     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 0, 0, 0);
5568     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 0, 1, -1);
5569     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 0, 10, -10);
5570     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 0, 19, -19);
5571     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 0, 20, -20);
5572     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 0, 21, -20);
5573     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 1, 0, 0);
5574     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 1, 1, -1);
5575     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 1, 9, -9);
5576     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 1, 18, -18);
5577     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 1, 19, -19);
5578     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 1, 20, -19);
5579     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 10, 0, 0);
5580     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 10, 1, -1);
5581     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 10, 5, -5);
5582     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 10, 9, -9);
5583     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 10, 10, -10);
5584     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 10, 11, -10);
5585     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 19, 0, 0);
5586     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 19, 1, -1);
5587     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 19, 2, -1);
5588     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 20, 0, 0);
5589     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 20, 1, 0);
5590     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 21, 0, 0);
5591     test("abcdefghijklmnopqrst", 20, 1, "", 0, 0, 0);
5592     test("abcdefghijklmnopqrst", 20, 1, "", 0, 1, 0);
5593     test("abcdefghijklmnopqrst", 20, 1, "", 1, 0, 0);
5594     test("abcdefghijklmnopqrst", 20, 1, "abcde", 0, 0, 0);
5595     test("abcdefghijklmnopqrst", 20, 1, "abcde", 0, 1, -1);
5596     test("abcdefghijklmnopqrst", 20, 1, "abcde", 0, 2, -2);
5597     test("abcdefghijklmnopqrst", 20, 1, "abcde", 0, 4, -4);
5598     test("abcdefghijklmnopqrst", 20, 1, "abcde", 0, 5, -5);
5599     test("abcdefghijklmnopqrst", 20, 1, "abcde", 0, 6, -5);
5600     test("abcdefghijklmnopqrst", 20, 1, "abcde", 1, 0, 0);
5601     test("abcdefghijklmnopqrst", 20, 1, "abcde", 1, 1, -1);
5602     test("abcdefghijklmnopqrst", 20, 1, "abcde", 1, 2, -2);
5603     test("abcdefghijklmnopqrst", 20, 1, "abcde", 1, 3, -3);
5604     test("abcdefghijklmnopqrst", 20, 1, "abcde", 1, 4, -4);
5605     test("abcdefghijklmnopqrst", 20, 1, "abcde", 1, 5, -4);
5606     test("abcdefghijklmnopqrst", 20, 1, "abcde", 2, 0, 0);
5607     test("abcdefghijklmnopqrst", 20, 1, "abcde", 2, 1, -1);
5608     test("abcdefghijklmnopqrst", 20, 1, "abcde", 2, 2, -2);
5609     test("abcdefghijklmnopqrst", 20, 1, "abcde", 2, 3, -3);
5610     test("abcdefghijklmnopqrst", 20, 1, "abcde", 2, 4, -3);
5611     test("abcdefghijklmnopqrst", 20, 1, "abcde", 4, 0, 0);
5612     test("abcdefghijklmnopqrst", 20, 1, "abcde", 4, 1, -1);
5613     test("abcdefghijklmnopqrst", 20, 1, "abcde", 4, 2, -1);
5614     test("abcdefghijklmnopqrst", 20, 1, "abcde", 5, 0, 0);
5615     test("abcdefghijklmnopqrst", 20, 1, "abcde", 5, 1, 0);
5616     test("abcdefghijklmnopqrst", 20, 1, "abcde", 6, 0, 0);
5617     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 0, 0, 0);
5618     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 0, 1, -1);
5619     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 0, 5, -5);
5620     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 0, 9, -9);
5621     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 0, 10, -10);
5622     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 0, 11, -10);
5623     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 1, 0, 0);
5624     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 1, 1, -1);
5625     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 1, 4, -4);
5626     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 1, 8, -8);
5627     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 1, 9, -9);
5628     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 1, 10, -9);
5629     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 5, 0, 0);
5630     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 5, 1, -1);
5631     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 5, 2, -2);
5632     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 5, 4, -4);
5633     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 5, 5, -5);
5634     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 5, 6, -5);
5635     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 9, 0, 0);
5636     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 9, 1, -1);
5637     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 9, 2, -1);
5638     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 10, 0, 0);
5639     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 10, 1, 0);
5640     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 11, 0, 0);
5641     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 0, 0, 0);
5642     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 0, 1, -1);
5643     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 0, 10, -10);
5644     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 0, 19, -19);
5645     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 0, 20, -20);
5646     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 0, 21, -20);
5647     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 1, 0, 0);
5648     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 1, 1, -1);
5649     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 1, 9, -9);
5650     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 1, 18, -18);
5651     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 1, 19, -19);
5652     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 1, 20, -19);
5653     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 10, 0, 0);
5654     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 10, 1, -1);
5655     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 10, 5, -5);
5656     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 10, 9, -9);
5657     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 10, 10, -10);
5658     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 10, 11, -10);
5659     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 19, 0, 0);
5660     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 19, 1, -1);
5661     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 19, 2, -1);
5662     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 20, 0, 0);
5663 }
5664 
test54()5665 void test54()
5666 {
5667     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 20, 1, 0);
5668     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 21, 0, 0);
5669     test("abcdefghijklmnopqrst", 21, 0, "", 0, 0, 0);
5670     test("abcdefghijklmnopqrst", 21, 0, "", 0, 1, 0);
5671     test("abcdefghijklmnopqrst", 21, 0, "", 1, 0, 0);
5672     test("abcdefghijklmnopqrst", 21, 0, "abcde", 0, 0, 0);
5673     test("abcdefghijklmnopqrst", 21, 0, "abcde", 0, 1, 0);
5674     test("abcdefghijklmnopqrst", 21, 0, "abcde", 0, 2, 0);
5675     test("abcdefghijklmnopqrst", 21, 0, "abcde", 0, 4, 0);
5676     test("abcdefghijklmnopqrst", 21, 0, "abcde", 0, 5, 0);
5677     test("abcdefghijklmnopqrst", 21, 0, "abcde", 0, 6, 0);
5678     test("abcdefghijklmnopqrst", 21, 0, "abcde", 1, 0, 0);
5679     test("abcdefghijklmnopqrst", 21, 0, "abcde", 1, 1, 0);
5680     test("abcdefghijklmnopqrst", 21, 0, "abcde", 1, 2, 0);
5681     test("abcdefghijklmnopqrst", 21, 0, "abcde", 1, 3, 0);
5682     test("abcdefghijklmnopqrst", 21, 0, "abcde", 1, 4, 0);
5683     test("abcdefghijklmnopqrst", 21, 0, "abcde", 1, 5, 0);
5684     test("abcdefghijklmnopqrst", 21, 0, "abcde", 2, 0, 0);
5685     test("abcdefghijklmnopqrst", 21, 0, "abcde", 2, 1, 0);
5686     test("abcdefghijklmnopqrst", 21, 0, "abcde", 2, 2, 0);
5687     test("abcdefghijklmnopqrst", 21, 0, "abcde", 2, 3, 0);
5688     test("abcdefghijklmnopqrst", 21, 0, "abcde", 2, 4, 0);
5689     test("abcdefghijklmnopqrst", 21, 0, "abcde", 4, 0, 0);
5690     test("abcdefghijklmnopqrst", 21, 0, "abcde", 4, 1, 0);
5691     test("abcdefghijklmnopqrst", 21, 0, "abcde", 4, 2, 0);
5692     test("abcdefghijklmnopqrst", 21, 0, "abcde", 5, 0, 0);
5693     test("abcdefghijklmnopqrst", 21, 0, "abcde", 5, 1, 0);
5694     test("abcdefghijklmnopqrst", 21, 0, "abcde", 6, 0, 0);
5695     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 0, 0, 0);
5696     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 0, 1, 0);
5697     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 0, 5, 0);
5698     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 0, 9, 0);
5699     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 0, 10, 0);
5700     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 0, 11, 0);
5701     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 1, 0, 0);
5702     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 1, 1, 0);
5703     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 1, 4, 0);
5704     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 1, 8, 0);
5705     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 1, 9, 0);
5706     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 1, 10, 0);
5707     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 5, 0, 0);
5708     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 5, 1, 0);
5709     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 5, 2, 0);
5710     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 5, 4, 0);
5711     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 5, 5, 0);
5712     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 5, 6, 0);
5713     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 9, 0, 0);
5714     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 9, 1, 0);
5715     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 9, 2, 0);
5716     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 10, 0, 0);
5717     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 10, 1, 0);
5718     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 11, 0, 0);
5719     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 0, 0, 0);
5720     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 0, 1, 0);
5721     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 0, 10, 0);
5722     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 0, 19, 0);
5723     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 0, 20, 0);
5724     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 0, 21, 0);
5725     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 1, 0, 0);
5726     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 1, 1, 0);
5727     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 1, 9, 0);
5728     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 1, 18, 0);
5729     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 1, 19, 0);
5730     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 1, 20, 0);
5731     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 10, 0, 0);
5732     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 10, 1, 0);
5733     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 10, 5, 0);
5734     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 10, 9, 0);
5735     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 10, 10, 0);
5736     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 10, 11, 0);
5737     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 19, 0, 0);
5738     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 19, 1, 0);
5739     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 19, 2, 0);
5740     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 20, 0, 0);
5741     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 20, 1, 0);
5742     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 21, 0, 0);
5743 }
5744 
5745 
main()5746 int main () {
5747     test0();
5748     test1();
5749     test2();
5750     test3();
5751     test4();
5752     test5();
5753     test6();
5754     test7();
5755     test8();
5756     test9();
5757     test10();
5758     test11();
5759     test12();
5760     test13();
5761     test14();
5762     test15();
5763     test16();
5764     test17();
5765     test18();
5766     test19();
5767     test20();
5768     test21();
5769     test22();
5770     test23();
5771     test24();
5772     test25();
5773     test26();
5774     test27();
5775     test28();
5776     test29();
5777     test30();
5778     test31();
5779     test32();
5780     test33();
5781     test34();
5782     test35();
5783     test36();
5784     test37();
5785     test38();
5786     test39();
5787     test40();
5788     test41();
5789     test42();
5790     test43();
5791     test44();
5792     test45();
5793     test46();
5794     test47();
5795     test48();
5796     test49();
5797     test50();
5798     test51();
5799     test52();
5800     test53();
5801     test54();
5802 
5803 
5804     {
5805     test("abcde", 5, 1, "", 0, 0, 0);
5806     test("abcde", 2, 4, "", 0, 0, 3);
5807     test("abcde", 2, 4, "abcde", 3, 4, -2);
5808     test("ABCde", 2, 4, "abcde", 2, 4, -1);
5809     }
5810 
5811     {
5812     test(L"abcde", 5, 1, L"", 0, 0, 0);
5813     test(L"abcde", 2, 4, L"", 0, 0, 3);
5814     test(L"abcde", 2, 4, L"abcde", 3, 4, -2);
5815     test(L"ABCde", 2, 4, L"abcde", 2, 4, -1);
5816     }
5817 
5818 #if __cplusplus >= 201103L
5819     {
5820     test(u"abcde", 5, 1, u"", 0, 0, 0);
5821     test(u"abcde", 2, 4, u"", 0, 0, 3);
5822     test(u"abcde", 2, 4, u"abcde", 3, 4, -2);
5823     test(u"ABCde", 2, 4, u"abcde", 2, 4, -1);
5824     }
5825 
5826     {
5827     test(U"abcde", 5, 1, U"", 0, 0, 0);
5828     test(U"abcde", 2, 4, U"", 0, 0, 3);
5829     test(U"abcde", 2, 4, U"abcde", 3, 4, -2);
5830     test(U"ABCde", 2, 4, U"abcde", 2, 4, -1);
5831     }
5832 #endif
5833 
5834 #if _LIBCPP_STD_VER > 11
5835     {
5836     typedef std::experimental::basic_string_view<char, constexpr_char_traits<char>> SV;
5837     constexpr SV  sv1 { "abcde", 5 };
5838     static_assert ( sv1.compare(5, 1, "", 0, 0) == 0, "" );
5839     static_assert ( sv1.compare(2, 4, "", 0, 0) == 1, "" );
5840     static_assert ( sv1.compare(2, 4, "abcde", 3, 4) == -1, "" );
5841     }
5842 #endif
5843 }
5844