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,
14 //             const charT* s, 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,const CharT * s2,size_t n2,int expected)24 void test1 ( std::experimental::basic_string_view<CharT> sv1, size_t pos1, size_t n1,
25              const CharT *s2, size_t n2,
26              int expected ) {
27 
28     try
29     {
30         assert ( sign( sv1.compare(pos1, n1, s2, n2)) == sign(expected));
31         assert(pos1 <= sv1.size());
32     }
33     catch (const std::out_of_range&) { assert(pos1 > sv1.size()); }
34 }
35 
36 
37 template<typename CharT>
test(const CharT * s1,size_t pos1,size_t n1,const CharT * s2,size_t n2,int expected)38 void test ( const CharT *s1, size_t pos1, size_t n1,
39             const CharT *s2, size_t n2,
40             int expected ) {
41     typedef std::experimental::basic_string_view<CharT> string_view_t;
42 
43     string_view_t sv1 ( s1 );
44     test1 (sv1, pos1, n1, s2, n2, expected);
45 }
46 
47 
test0()48 void test0()
49 {
50     test("", 0, 0, "", 0, 0);
51     test("", 0, 0, "abcde", 0, 0);
52     test("", 0, 0, "abcde", 1, -1);
53     test("", 0, 0, "abcde", 2, -2);
54     test("", 0, 0, "abcde", 4, -4);
55     test("", 0, 0, "abcde", 5, -5);
56     test("", 0, 0, "abcdefghij", 0, 0);
57     test("", 0, 0, "abcdefghij", 1, -1);
58     test("", 0, 0, "abcdefghij", 5, -5);
59     test("", 0, 0, "abcdefghij", 9, -9);
60     test("", 0, 0, "abcdefghij", 10, -10);
61     test("", 0, 0, "abcdefghijklmnopqrst", 0, 0);
62     test("", 0, 0, "abcdefghijklmnopqrst", 1, -1);
63     test("", 0, 0, "abcdefghijklmnopqrst", 10, -10);
64     test("", 0, 0, "abcdefghijklmnopqrst", 19, -19);
65     test("", 0, 0, "abcdefghijklmnopqrst", 20, -20);
66     test("", 0, 1, "", 0, 0);
67     test("", 0, 1, "abcde", 0, 0);
68     test("", 0, 1, "abcde", 1, -1);
69     test("", 0, 1, "abcde", 2, -2);
70     test("", 0, 1, "abcde", 4, -4);
71     test("", 0, 1, "abcde", 5, -5);
72     test("", 0, 1, "abcdefghij", 0, 0);
73     test("", 0, 1, "abcdefghij", 1, -1);
74     test("", 0, 1, "abcdefghij", 5, -5);
75     test("", 0, 1, "abcdefghij", 9, -9);
76     test("", 0, 1, "abcdefghij", 10, -10);
77     test("", 0, 1, "abcdefghijklmnopqrst", 0, 0);
78     test("", 0, 1, "abcdefghijklmnopqrst", 1, -1);
79     test("", 0, 1, "abcdefghijklmnopqrst", 10, -10);
80     test("", 0, 1, "abcdefghijklmnopqrst", 19, -19);
81     test("", 0, 1, "abcdefghijklmnopqrst", 20, -20);
82     test("", 1, 0, "", 0, 0);
83     test("", 1, 0, "abcde", 0, 0);
84     test("", 1, 0, "abcde", 1, 0);
85     test("", 1, 0, "abcde", 2, 0);
86     test("", 1, 0, "abcde", 4, 0);
87     test("", 1, 0, "abcde", 5, 0);
88     test("", 1, 0, "abcdefghij", 0, 0);
89     test("", 1, 0, "abcdefghij", 1, 0);
90     test("", 1, 0, "abcdefghij", 5, 0);
91     test("", 1, 0, "abcdefghij", 9, 0);
92     test("", 1, 0, "abcdefghij", 10, 0);
93     test("", 1, 0, "abcdefghijklmnopqrst", 0, 0);
94     test("", 1, 0, "abcdefghijklmnopqrst", 1, 0);
95     test("", 1, 0, "abcdefghijklmnopqrst", 10, 0);
96     test("", 1, 0, "abcdefghijklmnopqrst", 19, 0);
97     test("", 1, 0, "abcdefghijklmnopqrst", 20, 0);
98     test("abcde", 0, 0, "", 0, 0);
99     test("abcde", 0, 0, "abcde", 0, 0);
100     test("abcde", 0, 0, "abcde", 1, -1);
101     test("abcde", 0, 0, "abcde", 2, -2);
102     test("abcde", 0, 0, "abcde", 4, -4);
103     test("abcde", 0, 0, "abcde", 5, -5);
104     test("abcde", 0, 0, "abcdefghij", 0, 0);
105     test("abcde", 0, 0, "abcdefghij", 1, -1);
106     test("abcde", 0, 0, "abcdefghij", 5, -5);
107     test("abcde", 0, 0, "abcdefghij", 9, -9);
108     test("abcde", 0, 0, "abcdefghij", 10, -10);
109     test("abcde", 0, 0, "abcdefghijklmnopqrst", 0, 0);
110     test("abcde", 0, 0, "abcdefghijklmnopqrst", 1, -1);
111     test("abcde", 0, 0, "abcdefghijklmnopqrst", 10, -10);
112     test("abcde", 0, 0, "abcdefghijklmnopqrst", 19, -19);
113     test("abcde", 0, 0, "abcdefghijklmnopqrst", 20, -20);
114     test("abcde", 0, 1, "", 0, 1);
115     test("abcde", 0, 1, "abcde", 0, 1);
116     test("abcde", 0, 1, "abcde", 1, 0);
117     test("abcde", 0, 1, "abcde", 2, -1);
118     test("abcde", 0, 1, "abcde", 4, -3);
119     test("abcde", 0, 1, "abcde", 5, -4);
120     test("abcde", 0, 1, "abcdefghij", 0, 1);
121     test("abcde", 0, 1, "abcdefghij", 1, 0);
122     test("abcde", 0, 1, "abcdefghij", 5, -4);
123     test("abcde", 0, 1, "abcdefghij", 9, -8);
124     test("abcde", 0, 1, "abcdefghij", 10, -9);
125     test("abcde", 0, 1, "abcdefghijklmnopqrst", 0, 1);
126     test("abcde", 0, 1, "abcdefghijklmnopqrst", 1, 0);
127     test("abcde", 0, 1, "abcdefghijklmnopqrst", 10, -9);
128     test("abcde", 0, 1, "abcdefghijklmnopqrst", 19, -18);
129     test("abcde", 0, 1, "abcdefghijklmnopqrst", 20, -19);
130     test("abcde", 0, 2, "", 0, 2);
131     test("abcde", 0, 2, "abcde", 0, 2);
132     test("abcde", 0, 2, "abcde", 1, 1);
133     test("abcde", 0, 2, "abcde", 2, 0);
134     test("abcde", 0, 2, "abcde", 4, -2);
135     test("abcde", 0, 2, "abcde", 5, -3);
136     test("abcde", 0, 2, "abcdefghij", 0, 2);
137     test("abcde", 0, 2, "abcdefghij", 1, 1);
138     test("abcde", 0, 2, "abcdefghij", 5, -3);
139     test("abcde", 0, 2, "abcdefghij", 9, -7);
140     test("abcde", 0, 2, "abcdefghij", 10, -8);
141     test("abcde", 0, 2, "abcdefghijklmnopqrst", 0, 2);
142     test("abcde", 0, 2, "abcdefghijklmnopqrst", 1, 1);
143     test("abcde", 0, 2, "abcdefghijklmnopqrst", 10, -8);
144     test("abcde", 0, 2, "abcdefghijklmnopqrst", 19, -17);
145     test("abcde", 0, 2, "abcdefghijklmnopqrst", 20, -18);
146     test("abcde", 0, 4, "", 0, 4);
147     test("abcde", 0, 4, "abcde", 0, 4);
148     test("abcde", 0, 4, "abcde", 1, 3);
149     test("abcde", 0, 4, "abcde", 2, 2);
150 }
151 
152 
test1()153 void test1()
154 {
155     test("abcde", 0, 4, "abcde", 4, 0);
156     test("abcde", 0, 4, "abcde", 5, -1);
157     test("abcde", 0, 4, "abcdefghij", 0, 4);
158     test("abcde", 0, 4, "abcdefghij", 1, 3);
159     test("abcde", 0, 4, "abcdefghij", 5, -1);
160     test("abcde", 0, 4, "abcdefghij", 9, -5);
161     test("abcde", 0, 4, "abcdefghij", 10, -6);
162     test("abcde", 0, 4, "abcdefghijklmnopqrst", 0, 4);
163     test("abcde", 0, 4, "abcdefghijklmnopqrst", 1, 3);
164     test("abcde", 0, 4, "abcdefghijklmnopqrst", 10, -6);
165     test("abcde", 0, 4, "abcdefghijklmnopqrst", 19, -15);
166     test("abcde", 0, 4, "abcdefghijklmnopqrst", 20, -16);
167     test("abcde", 0, 5, "", 0, 5);
168     test("abcde", 0, 5, "abcde", 0, 5);
169     test("abcde", 0, 5, "abcde", 1, 4);
170     test("abcde", 0, 5, "abcde", 2, 3);
171     test("abcde", 0, 5, "abcde", 4, 1);
172     test("abcde", 0, 5, "abcde", 5, 0);
173     test("abcde", 0, 5, "abcdefghij", 0, 5);
174     test("abcde", 0, 5, "abcdefghij", 1, 4);
175     test("abcde", 0, 5, "abcdefghij", 5, 0);
176     test("abcde", 0, 5, "abcdefghij", 9, -4);
177     test("abcde", 0, 5, "abcdefghij", 10, -5);
178     test("abcde", 0, 5, "abcdefghijklmnopqrst", 0, 5);
179     test("abcde", 0, 5, "abcdefghijklmnopqrst", 1, 4);
180     test("abcde", 0, 5, "abcdefghijklmnopqrst", 10, -5);
181     test("abcde", 0, 5, "abcdefghijklmnopqrst", 19, -14);
182     test("abcde", 0, 5, "abcdefghijklmnopqrst", 20, -15);
183     test("abcde", 0, 6, "", 0, 5);
184     test("abcde", 0, 6, "abcde", 0, 5);
185     test("abcde", 0, 6, "abcde", 1, 4);
186     test("abcde", 0, 6, "abcde", 2, 3);
187     test("abcde", 0, 6, "abcde", 4, 1);
188     test("abcde", 0, 6, "abcde", 5, 0);
189     test("abcde", 0, 6, "abcdefghij", 0, 5);
190     test("abcde", 0, 6, "abcdefghij", 1, 4);
191     test("abcde", 0, 6, "abcdefghij", 5, 0);
192     test("abcde", 0, 6, "abcdefghij", 9, -4);
193     test("abcde", 0, 6, "abcdefghij", 10, -5);
194     test("abcde", 0, 6, "abcdefghijklmnopqrst", 0, 5);
195     test("abcde", 0, 6, "abcdefghijklmnopqrst", 1, 4);
196     test("abcde", 0, 6, "abcdefghijklmnopqrst", 10, -5);
197     test("abcde", 0, 6, "abcdefghijklmnopqrst", 19, -14);
198     test("abcde", 0, 6, "abcdefghijklmnopqrst", 20, -15);
199     test("abcde", 1, 0, "", 0, 0);
200     test("abcde", 1, 0, "abcde", 0, 0);
201     test("abcde", 1, 0, "abcde", 1, -1);
202     test("abcde", 1, 0, "abcde", 2, -2);
203     test("abcde", 1, 0, "abcde", 4, -4);
204     test("abcde", 1, 0, "abcde", 5, -5);
205     test("abcde", 1, 0, "abcdefghij", 0, 0);
206     test("abcde", 1, 0, "abcdefghij", 1, -1);
207     test("abcde", 1, 0, "abcdefghij", 5, -5);
208     test("abcde", 1, 0, "abcdefghij", 9, -9);
209     test("abcde", 1, 0, "abcdefghij", 10, -10);
210     test("abcde", 1, 0, "abcdefghijklmnopqrst", 0, 0);
211     test("abcde", 1, 0, "abcdefghijklmnopqrst", 1, -1);
212     test("abcde", 1, 0, "abcdefghijklmnopqrst", 10, -10);
213     test("abcde", 1, 0, "abcdefghijklmnopqrst", 19, -19);
214     test("abcde", 1, 0, "abcdefghijklmnopqrst", 20, -20);
215     test("abcde", 1, 1, "", 0, 1);
216     test("abcde", 1, 1, "abcde", 0, 1);
217     test("abcde", 1, 1, "abcde", 1, 1);
218     test("abcde", 1, 1, "abcde", 2, 1);
219     test("abcde", 1, 1, "abcde", 4, 1);
220     test("abcde", 1, 1, "abcde", 5, 1);
221     test("abcde", 1, 1, "abcdefghij", 0, 1);
222     test("abcde", 1, 1, "abcdefghij", 1, 1);
223     test("abcde", 1, 1, "abcdefghij", 5, 1);
224     test("abcde", 1, 1, "abcdefghij", 9, 1);
225     test("abcde", 1, 1, "abcdefghij", 10, 1);
226     test("abcde", 1, 1, "abcdefghijklmnopqrst", 0, 1);
227     test("abcde", 1, 1, "abcdefghijklmnopqrst", 1, 1);
228     test("abcde", 1, 1, "abcdefghijklmnopqrst", 10, 1);
229     test("abcde", 1, 1, "abcdefghijklmnopqrst", 19, 1);
230     test("abcde", 1, 1, "abcdefghijklmnopqrst", 20, 1);
231     test("abcde", 1, 2, "", 0, 2);
232     test("abcde", 1, 2, "abcde", 0, 2);
233     test("abcde", 1, 2, "abcde", 1, 1);
234     test("abcde", 1, 2, "abcde", 2, 1);
235     test("abcde", 1, 2, "abcde", 4, 1);
236     test("abcde", 1, 2, "abcde", 5, 1);
237     test("abcde", 1, 2, "abcdefghij", 0, 2);
238     test("abcde", 1, 2, "abcdefghij", 1, 1);
239     test("abcde", 1, 2, "abcdefghij", 5, 1);
240     test("abcde", 1, 2, "abcdefghij", 9, 1);
241     test("abcde", 1, 2, "abcdefghij", 10, 1);
242     test("abcde", 1, 2, "abcdefghijklmnopqrst", 0, 2);
243     test("abcde", 1, 2, "abcdefghijklmnopqrst", 1, 1);
244     test("abcde", 1, 2, "abcdefghijklmnopqrst", 10, 1);
245     test("abcde", 1, 2, "abcdefghijklmnopqrst", 19, 1);
246     test("abcde", 1, 2, "abcdefghijklmnopqrst", 20, 1);
247     test("abcde", 1, 3, "", 0, 3);
248     test("abcde", 1, 3, "abcde", 0, 3);
249     test("abcde", 1, 3, "abcde", 1, 1);
250     test("abcde", 1, 3, "abcde", 2, 1);
251     test("abcde", 1, 3, "abcde", 4, 1);
252     test("abcde", 1, 3, "abcde", 5, 1);
253     test("abcde", 1, 3, "abcdefghij", 0, 3);
254     test("abcde", 1, 3, "abcdefghij", 1, 1);
255 }
256 
257 
test2()258 void test2()
259 {
260     test("abcde", 1, 3, "abcdefghij", 5, 1);
261     test("abcde", 1, 3, "abcdefghij", 9, 1);
262     test("abcde", 1, 3, "abcdefghij", 10, 1);
263     test("abcde", 1, 3, "abcdefghijklmnopqrst", 0, 3);
264     test("abcde", 1, 3, "abcdefghijklmnopqrst", 1, 1);
265     test("abcde", 1, 3, "abcdefghijklmnopqrst", 10, 1);
266     test("abcde", 1, 3, "abcdefghijklmnopqrst", 19, 1);
267     test("abcde", 1, 3, "abcdefghijklmnopqrst", 20, 1);
268     test("abcde", 1, 4, "", 0, 4);
269     test("abcde", 1, 4, "abcde", 0, 4);
270     test("abcde", 1, 4, "abcde", 1, 1);
271     test("abcde", 1, 4, "abcde", 2, 1);
272     test("abcde", 1, 4, "abcde", 4, 1);
273     test("abcde", 1, 4, "abcde", 5, 1);
274     test("abcde", 1, 4, "abcdefghij", 0, 4);
275     test("abcde", 1, 4, "abcdefghij", 1, 1);
276     test("abcde", 1, 4, "abcdefghij", 5, 1);
277     test("abcde", 1, 4, "abcdefghij", 9, 1);
278     test("abcde", 1, 4, "abcdefghij", 10, 1);
279     test("abcde", 1, 4, "abcdefghijklmnopqrst", 0, 4);
280     test("abcde", 1, 4, "abcdefghijklmnopqrst", 1, 1);
281     test("abcde", 1, 4, "abcdefghijklmnopqrst", 10, 1);
282     test("abcde", 1, 4, "abcdefghijklmnopqrst", 19, 1);
283     test("abcde", 1, 4, "abcdefghijklmnopqrst", 20, 1);
284     test("abcde", 1, 5, "", 0, 4);
285     test("abcde", 1, 5, "abcde", 0, 4);
286     test("abcde", 1, 5, "abcde", 1, 1);
287     test("abcde", 1, 5, "abcde", 2, 1);
288     test("abcde", 1, 5, "abcde", 4, 1);
289     test("abcde", 1, 5, "abcde", 5, 1);
290     test("abcde", 1, 5, "abcdefghij", 0, 4);
291     test("abcde", 1, 5, "abcdefghij", 1, 1);
292     test("abcde", 1, 5, "abcdefghij", 5, 1);
293     test("abcde", 1, 5, "abcdefghij", 9, 1);
294     test("abcde", 1, 5, "abcdefghij", 10, 1);
295     test("abcde", 1, 5, "abcdefghijklmnopqrst", 0, 4);
296     test("abcde", 1, 5, "abcdefghijklmnopqrst", 1, 1);
297     test("abcde", 1, 5, "abcdefghijklmnopqrst", 10, 1);
298     test("abcde", 1, 5, "abcdefghijklmnopqrst", 19, 1);
299     test("abcde", 1, 5, "abcdefghijklmnopqrst", 20, 1);
300     test("abcde", 2, 0, "", 0, 0);
301     test("abcde", 2, 0, "abcde", 0, 0);
302     test("abcde", 2, 0, "abcde", 1, -1);
303     test("abcde", 2, 0, "abcde", 2, -2);
304     test("abcde", 2, 0, "abcde", 4, -4);
305     test("abcde", 2, 0, "abcde", 5, -5);
306     test("abcde", 2, 0, "abcdefghij", 0, 0);
307     test("abcde", 2, 0, "abcdefghij", 1, -1);
308     test("abcde", 2, 0, "abcdefghij", 5, -5);
309     test("abcde", 2, 0, "abcdefghij", 9, -9);
310     test("abcde", 2, 0, "abcdefghij", 10, -10);
311     test("abcde", 2, 0, "abcdefghijklmnopqrst", 0, 0);
312     test("abcde", 2, 0, "abcdefghijklmnopqrst", 1, -1);
313     test("abcde", 2, 0, "abcdefghijklmnopqrst", 10, -10);
314     test("abcde", 2, 0, "abcdefghijklmnopqrst", 19, -19);
315     test("abcde", 2, 0, "abcdefghijklmnopqrst", 20, -20);
316     test("abcde", 2, 1, "", 0, 1);
317     test("abcde", 2, 1, "abcde", 0, 1);
318     test("abcde", 2, 1, "abcde", 1, 2);
319     test("abcde", 2, 1, "abcde", 2, 2);
320     test("abcde", 2, 1, "abcde", 4, 2);
321     test("abcde", 2, 1, "abcde", 5, 2);
322     test("abcde", 2, 1, "abcdefghij", 0, 1);
323     test("abcde", 2, 1, "abcdefghij", 1, 2);
324     test("abcde", 2, 1, "abcdefghij", 5, 2);
325     test("abcde", 2, 1, "abcdefghij", 9, 2);
326     test("abcde", 2, 1, "abcdefghij", 10, 2);
327     test("abcde", 2, 1, "abcdefghijklmnopqrst", 0, 1);
328     test("abcde", 2, 1, "abcdefghijklmnopqrst", 1, 2);
329     test("abcde", 2, 1, "abcdefghijklmnopqrst", 10, 2);
330     test("abcde", 2, 1, "abcdefghijklmnopqrst", 19, 2);
331     test("abcde", 2, 1, "abcdefghijklmnopqrst", 20, 2);
332     test("abcde", 2, 2, "", 0, 2);
333     test("abcde", 2, 2, "abcde", 0, 2);
334     test("abcde", 2, 2, "abcde", 1, 2);
335     test("abcde", 2, 2, "abcde", 2, 2);
336     test("abcde", 2, 2, "abcde", 4, 2);
337     test("abcde", 2, 2, "abcde", 5, 2);
338     test("abcde", 2, 2, "abcdefghij", 0, 2);
339     test("abcde", 2, 2, "abcdefghij", 1, 2);
340     test("abcde", 2, 2, "abcdefghij", 5, 2);
341     test("abcde", 2, 2, "abcdefghij", 9, 2);
342     test("abcde", 2, 2, "abcdefghij", 10, 2);
343     test("abcde", 2, 2, "abcdefghijklmnopqrst", 0, 2);
344     test("abcde", 2, 2, "abcdefghijklmnopqrst", 1, 2);
345     test("abcde", 2, 2, "abcdefghijklmnopqrst", 10, 2);
346     test("abcde", 2, 2, "abcdefghijklmnopqrst", 19, 2);
347     test("abcde", 2, 2, "abcdefghijklmnopqrst", 20, 2);
348     test("abcde", 2, 3, "", 0, 3);
349     test("abcde", 2, 3, "abcde", 0, 3);
350     test("abcde", 2, 3, "abcde", 1, 2);
351     test("abcde", 2, 3, "abcde", 2, 2);
352     test("abcde", 2, 3, "abcde", 4, 2);
353     test("abcde", 2, 3, "abcde", 5, 2);
354     test("abcde", 2, 3, "abcdefghij", 0, 3);
355     test("abcde", 2, 3, "abcdefghij", 1, 2);
356     test("abcde", 2, 3, "abcdefghij", 5, 2);
357     test("abcde", 2, 3, "abcdefghij", 9, 2);
358     test("abcde", 2, 3, "abcdefghij", 10, 2);
359     test("abcde", 2, 3, "abcdefghijklmnopqrst", 0, 3);
360 }
361 
362 
test3()363 void test3()
364 {
365     test("abcde", 2, 3, "abcdefghijklmnopqrst", 1, 2);
366     test("abcde", 2, 3, "abcdefghijklmnopqrst", 10, 2);
367     test("abcde", 2, 3, "abcdefghijklmnopqrst", 19, 2);
368     test("abcde", 2, 3, "abcdefghijklmnopqrst", 20, 2);
369     test("abcde", 2, 4, "", 0, 3);
370     test("abcde", 2, 4, "abcde", 0, 3);
371     test("abcde", 2, 4, "abcde", 1, 2);
372     test("abcde", 2, 4, "abcde", 2, 2);
373     test("abcde", 2, 4, "abcde", 4, 2);
374     test("abcde", 2, 4, "abcde", 5, 2);
375     test("abcde", 2, 4, "abcdefghij", 0, 3);
376     test("abcde", 2, 4, "abcdefghij", 1, 2);
377     test("abcde", 2, 4, "abcdefghij", 5, 2);
378     test("abcde", 2, 4, "abcdefghij", 9, 2);
379     test("abcde", 2, 4, "abcdefghij", 10, 2);
380     test("abcde", 2, 4, "abcdefghijklmnopqrst", 0, 3);
381     test("abcde", 2, 4, "abcdefghijklmnopqrst", 1, 2);
382     test("abcde", 2, 4, "abcdefghijklmnopqrst", 10, 2);
383     test("abcde", 2, 4, "abcdefghijklmnopqrst", 19, 2);
384     test("abcde", 2, 4, "abcdefghijklmnopqrst", 20, 2);
385     test("abcde", 4, 0, "", 0, 0);
386     test("abcde", 4, 0, "abcde", 0, 0);
387     test("abcde", 4, 0, "abcde", 1, -1);
388     test("abcde", 4, 0, "abcde", 2, -2);
389     test("abcde", 4, 0, "abcde", 4, -4);
390     test("abcde", 4, 0, "abcde", 5, -5);
391     test("abcde", 4, 0, "abcdefghij", 0, 0);
392     test("abcde", 4, 0, "abcdefghij", 1, -1);
393     test("abcde", 4, 0, "abcdefghij", 5, -5);
394     test("abcde", 4, 0, "abcdefghij", 9, -9);
395     test("abcde", 4, 0, "abcdefghij", 10, -10);
396     test("abcde", 4, 0, "abcdefghijklmnopqrst", 0, 0);
397     test("abcde", 4, 0, "abcdefghijklmnopqrst", 1, -1);
398     test("abcde", 4, 0, "abcdefghijklmnopqrst", 10, -10);
399     test("abcde", 4, 0, "abcdefghijklmnopqrst", 19, -19);
400     test("abcde", 4, 0, "abcdefghijklmnopqrst", 20, -20);
401     test("abcde", 4, 1, "", 0, 1);
402     test("abcde", 4, 1, "abcde", 0, 1);
403     test("abcde", 4, 1, "abcde", 1, 4);
404     test("abcde", 4, 1, "abcde", 2, 4);
405     test("abcde", 4, 1, "abcde", 4, 4);
406     test("abcde", 4, 1, "abcde", 5, 4);
407     test("abcde", 4, 1, "abcdefghij", 0, 1);
408     test("abcde", 4, 1, "abcdefghij", 1, 4);
409     test("abcde", 4, 1, "abcdefghij", 5, 4);
410     test("abcde", 4, 1, "abcdefghij", 9, 4);
411     test("abcde", 4, 1, "abcdefghij", 10, 4);
412     test("abcde", 4, 1, "abcdefghijklmnopqrst", 0, 1);
413     test("abcde", 4, 1, "abcdefghijklmnopqrst", 1, 4);
414     test("abcde", 4, 1, "abcdefghijklmnopqrst", 10, 4);
415     test("abcde", 4, 1, "abcdefghijklmnopqrst", 19, 4);
416     test("abcde", 4, 1, "abcdefghijklmnopqrst", 20, 4);
417     test("abcde", 4, 2, "", 0, 1);
418     test("abcde", 4, 2, "abcde", 0, 1);
419     test("abcde", 4, 2, "abcde", 1, 4);
420     test("abcde", 4, 2, "abcde", 2, 4);
421     test("abcde", 4, 2, "abcde", 4, 4);
422     test("abcde", 4, 2, "abcde", 5, 4);
423     test("abcde", 4, 2, "abcdefghij", 0, 1);
424     test("abcde", 4, 2, "abcdefghij", 1, 4);
425     test("abcde", 4, 2, "abcdefghij", 5, 4);
426     test("abcde", 4, 2, "abcdefghij", 9, 4);
427     test("abcde", 4, 2, "abcdefghij", 10, 4);
428     test("abcde", 4, 2, "abcdefghijklmnopqrst", 0, 1);
429     test("abcde", 4, 2, "abcdefghijklmnopqrst", 1, 4);
430     test("abcde", 4, 2, "abcdefghijklmnopqrst", 10, 4);
431     test("abcde", 4, 2, "abcdefghijklmnopqrst", 19, 4);
432     test("abcde", 4, 2, "abcdefghijklmnopqrst", 20, 4);
433     test("abcde", 5, 0, "", 0, 0);
434     test("abcde", 5, 0, "abcde", 0, 0);
435     test("abcde", 5, 0, "abcde", 1, -1);
436     test("abcde", 5, 0, "abcde", 2, -2);
437     test("abcde", 5, 0, "abcde", 4, -4);
438     test("abcde", 5, 0, "abcde", 5, -5);
439     test("abcde", 5, 0, "abcdefghij", 0, 0);
440     test("abcde", 5, 0, "abcdefghij", 1, -1);
441     test("abcde", 5, 0, "abcdefghij", 5, -5);
442     test("abcde", 5, 0, "abcdefghij", 9, -9);
443     test("abcde", 5, 0, "abcdefghij", 10, -10);
444     test("abcde", 5, 0, "abcdefghijklmnopqrst", 0, 0);
445     test("abcde", 5, 0, "abcdefghijklmnopqrst", 1, -1);
446     test("abcde", 5, 0, "abcdefghijklmnopqrst", 10, -10);
447     test("abcde", 5, 0, "abcdefghijklmnopqrst", 19, -19);
448     test("abcde", 5, 0, "abcdefghijklmnopqrst", 20, -20);
449     test("abcde", 5, 1, "", 0, 0);
450     test("abcde", 5, 1, "abcde", 0, 0);
451     test("abcde", 5, 1, "abcde", 1, -1);
452     test("abcde", 5, 1, "abcde", 2, -2);
453     test("abcde", 5, 1, "abcde", 4, -4);
454     test("abcde", 5, 1, "abcde", 5, -5);
455     test("abcde", 5, 1, "abcdefghij", 0, 0);
456     test("abcde", 5, 1, "abcdefghij", 1, -1);
457     test("abcde", 5, 1, "abcdefghij", 5, -5);
458     test("abcde", 5, 1, "abcdefghij", 9, -9);
459     test("abcde", 5, 1, "abcdefghij", 10, -10);
460     test("abcde", 5, 1, "abcdefghijklmnopqrst", 0, 0);
461     test("abcde", 5, 1, "abcdefghijklmnopqrst", 1, -1);
462     test("abcde", 5, 1, "abcdefghijklmnopqrst", 10, -10);
463     test("abcde", 5, 1, "abcdefghijklmnopqrst", 19, -19);
464     test("abcde", 5, 1, "abcdefghijklmnopqrst", 20, -20);
465 }
466 
467 
test4()468 void test4()
469 {
470     test("abcde", 6, 0, "", 0, 0);
471     test("abcde", 6, 0, "abcde", 0, 0);
472     test("abcde", 6, 0, "abcde", 1, 0);
473     test("abcde", 6, 0, "abcde", 2, 0);
474     test("abcde", 6, 0, "abcde", 4, 0);
475     test("abcde", 6, 0, "abcde", 5, 0);
476     test("abcde", 6, 0, "abcdefghij", 0, 0);
477     test("abcde", 6, 0, "abcdefghij", 1, 0);
478     test("abcde", 6, 0, "abcdefghij", 5, 0);
479     test("abcde", 6, 0, "abcdefghij", 9, 0);
480     test("abcde", 6, 0, "abcdefghij", 10, 0);
481     test("abcde", 6, 0, "abcdefghijklmnopqrst", 0, 0);
482     test("abcde", 6, 0, "abcdefghijklmnopqrst", 1, 0);
483     test("abcde", 6, 0, "abcdefghijklmnopqrst", 10, 0);
484     test("abcde", 6, 0, "abcdefghijklmnopqrst", 19, 0);
485     test("abcde", 6, 0, "abcdefghijklmnopqrst", 20, 0);
486     test("abcdefghij", 0, 0, "", 0, 0);
487     test("abcdefghij", 0, 0, "abcde", 0, 0);
488     test("abcdefghij", 0, 0, "abcde", 1, -1);
489     test("abcdefghij", 0, 0, "abcde", 2, -2);
490     test("abcdefghij", 0, 0, "abcde", 4, -4);
491     test("abcdefghij", 0, 0, "abcde", 5, -5);
492     test("abcdefghij", 0, 0, "abcdefghij", 0, 0);
493     test("abcdefghij", 0, 0, "abcdefghij", 1, -1);
494     test("abcdefghij", 0, 0, "abcdefghij", 5, -5);
495     test("abcdefghij", 0, 0, "abcdefghij", 9, -9);
496     test("abcdefghij", 0, 0, "abcdefghij", 10, -10);
497     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 0, 0);
498     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 1, -1);
499     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 10, -10);
500     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 19, -19);
501     test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 20, -20);
502     test("abcdefghij", 0, 1, "", 0, 1);
503     test("abcdefghij", 0, 1, "abcde", 0, 1);
504     test("abcdefghij", 0, 1, "abcde", 1, 0);
505     test("abcdefghij", 0, 1, "abcde", 2, -1);
506     test("abcdefghij", 0, 1, "abcde", 4, -3);
507     test("abcdefghij", 0, 1, "abcde", 5, -4);
508     test("abcdefghij", 0, 1, "abcdefghij", 0, 1);
509     test("abcdefghij", 0, 1, "abcdefghij", 1, 0);
510     test("abcdefghij", 0, 1, "abcdefghij", 5, -4);
511     test("abcdefghij", 0, 1, "abcdefghij", 9, -8);
512     test("abcdefghij", 0, 1, "abcdefghij", 10, -9);
513     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 0, 1);
514     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 1, 0);
515     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 10, -9);
516     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 19, -18);
517     test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 20, -19);
518     test("abcdefghij", 0, 5, "", 0, 5);
519     test("abcdefghij", 0, 5, "abcde", 0, 5);
520     test("abcdefghij", 0, 5, "abcde", 1, 4);
521     test("abcdefghij", 0, 5, "abcde", 2, 3);
522     test("abcdefghij", 0, 5, "abcde", 4, 1);
523     test("abcdefghij", 0, 5, "abcde", 5, 0);
524     test("abcdefghij", 0, 5, "abcdefghij", 0, 5);
525     test("abcdefghij", 0, 5, "abcdefghij", 1, 4);
526     test("abcdefghij", 0, 5, "abcdefghij", 5, 0);
527     test("abcdefghij", 0, 5, "abcdefghij", 9, -4);
528     test("abcdefghij", 0, 5, "abcdefghij", 10, -5);
529     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 0, 5);
530     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 1, 4);
531     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 10, -5);
532     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 19, -14);
533     test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 20, -15);
534     test("abcdefghij", 0, 9, "", 0, 9);
535     test("abcdefghij", 0, 9, "abcde", 0, 9);
536     test("abcdefghij", 0, 9, "abcde", 1, 8);
537     test("abcdefghij", 0, 9, "abcde", 2, 7);
538     test("abcdefghij", 0, 9, "abcde", 4, 5);
539     test("abcdefghij", 0, 9, "abcde", 5, 4);
540     test("abcdefghij", 0, 9, "abcdefghij", 0, 9);
541     test("abcdefghij", 0, 9, "abcdefghij", 1, 8);
542     test("abcdefghij", 0, 9, "abcdefghij", 5, 4);
543     test("abcdefghij", 0, 9, "abcdefghij", 9, 0);
544     test("abcdefghij", 0, 9, "abcdefghij", 10, -1);
545     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 0, 9);
546     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 1, 8);
547     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 10, -1);
548     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 19, -10);
549     test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 20, -11);
550     test("abcdefghij", 0, 10, "", 0, 10);
551     test("abcdefghij", 0, 10, "abcde", 0, 10);
552     test("abcdefghij", 0, 10, "abcde", 1, 9);
553     test("abcdefghij", 0, 10, "abcde", 2, 8);
554     test("abcdefghij", 0, 10, "abcde", 4, 6);
555     test("abcdefghij", 0, 10, "abcde", 5, 5);
556     test("abcdefghij", 0, 10, "abcdefghij", 0, 10);
557     test("abcdefghij", 0, 10, "abcdefghij", 1, 9);
558     test("abcdefghij", 0, 10, "abcdefghij", 5, 5);
559     test("abcdefghij", 0, 10, "abcdefghij", 9, 1);
560     test("abcdefghij", 0, 10, "abcdefghij", 10, 0);
561     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 0, 10);
562     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 1, 9);
563     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 10, 0);
564     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 19, -9);
565     test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 20, -10);
566     test("abcdefghij", 0, 11, "", 0, 10);
567     test("abcdefghij", 0, 11, "abcde", 0, 10);
568     test("abcdefghij", 0, 11, "abcde", 1, 9);
569     test("abcdefghij", 0, 11, "abcde", 2, 8);
570 }
571 
572 
test5()573 void test5()
574 {
575     test("abcdefghij", 0, 11, "abcde", 4, 6);
576     test("abcdefghij", 0, 11, "abcde", 5, 5);
577     test("abcdefghij", 0, 11, "abcdefghij", 0, 10);
578     test("abcdefghij", 0, 11, "abcdefghij", 1, 9);
579     test("abcdefghij", 0, 11, "abcdefghij", 5, 5);
580     test("abcdefghij", 0, 11, "abcdefghij", 9, 1);
581     test("abcdefghij", 0, 11, "abcdefghij", 10, 0);
582     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 0, 10);
583     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 1, 9);
584     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 10, 0);
585     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 19, -9);
586     test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 20, -10);
587     test("abcdefghij", 1, 0, "", 0, 0);
588     test("abcdefghij", 1, 0, "abcde", 0, 0);
589     test("abcdefghij", 1, 0, "abcde", 1, -1);
590     test("abcdefghij", 1, 0, "abcde", 2, -2);
591     test("abcdefghij", 1, 0, "abcde", 4, -4);
592     test("abcdefghij", 1, 0, "abcde", 5, -5);
593     test("abcdefghij", 1, 0, "abcdefghij", 0, 0);
594     test("abcdefghij", 1, 0, "abcdefghij", 1, -1);
595     test("abcdefghij", 1, 0, "abcdefghij", 5, -5);
596     test("abcdefghij", 1, 0, "abcdefghij", 9, -9);
597     test("abcdefghij", 1, 0, "abcdefghij", 10, -10);
598     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 0, 0);
599     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 1, -1);
600     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 10, -10);
601     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 19, -19);
602     test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 20, -20);
603     test("abcdefghij", 1, 1, "", 0, 1);
604     test("abcdefghij", 1, 1, "abcde", 0, 1);
605     test("abcdefghij", 1, 1, "abcde", 1, 1);
606     test("abcdefghij", 1, 1, "abcde", 2, 1);
607     test("abcdefghij", 1, 1, "abcde", 4, 1);
608     test("abcdefghij", 1, 1, "abcde", 5, 1);
609     test("abcdefghij", 1, 1, "abcdefghij", 0, 1);
610     test("abcdefghij", 1, 1, "abcdefghij", 1, 1);
611     test("abcdefghij", 1, 1, "abcdefghij", 5, 1);
612     test("abcdefghij", 1, 1, "abcdefghij", 9, 1);
613     test("abcdefghij", 1, 1, "abcdefghij", 10, 1);
614     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 0, 1);
615     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1, 1);
616     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 10, 1);
617     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 19, 1);
618     test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 20, 1);
619     test("abcdefghij", 1, 4, "", 0, 4);
620     test("abcdefghij", 1, 4, "abcde", 0, 4);
621     test("abcdefghij", 1, 4, "abcde", 1, 1);
622     test("abcdefghij", 1, 4, "abcde", 2, 1);
623     test("abcdefghij", 1, 4, "abcde", 4, 1);
624     test("abcdefghij", 1, 4, "abcde", 5, 1);
625     test("abcdefghij", 1, 4, "abcdefghij", 0, 4);
626     test("abcdefghij", 1, 4, "abcdefghij", 1, 1);
627     test("abcdefghij", 1, 4, "abcdefghij", 5, 1);
628     test("abcdefghij", 1, 4, "abcdefghij", 9, 1);
629     test("abcdefghij", 1, 4, "abcdefghij", 10, 1);
630     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 0, 4);
631     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1, 1);
632     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 10, 1);
633     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 19, 1);
634     test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 20, 1);
635     test("abcdefghij", 1, 8, "", 0, 8);
636     test("abcdefghij", 1, 8, "abcde", 0, 8);
637     test("abcdefghij", 1, 8, "abcde", 1, 1);
638     test("abcdefghij", 1, 8, "abcde", 2, 1);
639     test("abcdefghij", 1, 8, "abcde", 4, 1);
640     test("abcdefghij", 1, 8, "abcde", 5, 1);
641     test("abcdefghij", 1, 8, "abcdefghij", 0, 8);
642     test("abcdefghij", 1, 8, "abcdefghij", 1, 1);
643     test("abcdefghij", 1, 8, "abcdefghij", 5, 1);
644     test("abcdefghij", 1, 8, "abcdefghij", 9, 1);
645     test("abcdefghij", 1, 8, "abcdefghij", 10, 1);
646     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 0, 8);
647     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1, 1);
648     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 10, 1);
649     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 19, 1);
650     test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 20, 1);
651     test("abcdefghij", 1, 9, "", 0, 9);
652     test("abcdefghij", 1, 9, "abcde", 0, 9);
653     test("abcdefghij", 1, 9, "abcde", 1, 1);
654     test("abcdefghij", 1, 9, "abcde", 2, 1);
655     test("abcdefghij", 1, 9, "abcde", 4, 1);
656     test("abcdefghij", 1, 9, "abcde", 5, 1);
657     test("abcdefghij", 1, 9, "abcdefghij", 0, 9);
658     test("abcdefghij", 1, 9, "abcdefghij", 1, 1);
659     test("abcdefghij", 1, 9, "abcdefghij", 5, 1);
660     test("abcdefghij", 1, 9, "abcdefghij", 9, 1);
661     test("abcdefghij", 1, 9, "abcdefghij", 10, 1);
662     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 0, 9);
663     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1, 1);
664     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 10, 1);
665     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 19, 1);
666     test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 20, 1);
667     test("abcdefghij", 1, 10, "", 0, 9);
668     test("abcdefghij", 1, 10, "abcde", 0, 9);
669     test("abcdefghij", 1, 10, "abcde", 1, 1);
670     test("abcdefghij", 1, 10, "abcde", 2, 1);
671     test("abcdefghij", 1, 10, "abcde", 4, 1);
672     test("abcdefghij", 1, 10, "abcde", 5, 1);
673     test("abcdefghij", 1, 10, "abcdefghij", 0, 9);
674     test("abcdefghij", 1, 10, "abcdefghij", 1, 1);
675 }
676 
677 
test6()678 void test6()
679 {
680     test("abcdefghij", 1, 10, "abcdefghij", 5, 1);
681     test("abcdefghij", 1, 10, "abcdefghij", 9, 1);
682     test("abcdefghij", 1, 10, "abcdefghij", 10, 1);
683     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 0, 9);
684     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1, 1);
685     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 10, 1);
686     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 19, 1);
687     test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 20, 1);
688     test("abcdefghij", 5, 0, "", 0, 0);
689     test("abcdefghij", 5, 0, "abcde", 0, 0);
690     test("abcdefghij", 5, 0, "abcde", 1, -1);
691     test("abcdefghij", 5, 0, "abcde", 2, -2);
692     test("abcdefghij", 5, 0, "abcde", 4, -4);
693     test("abcdefghij", 5, 0, "abcde", 5, -5);
694     test("abcdefghij", 5, 0, "abcdefghij", 0, 0);
695     test("abcdefghij", 5, 0, "abcdefghij", 1, -1);
696     test("abcdefghij", 5, 0, "abcdefghij", 5, -5);
697     test("abcdefghij", 5, 0, "abcdefghij", 9, -9);
698     test("abcdefghij", 5, 0, "abcdefghij", 10, -10);
699     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 0, 0);
700     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 1, -1);
701     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 10, -10);
702     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 19, -19);
703     test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 20, -20);
704     test("abcdefghij", 5, 1, "", 0, 1);
705     test("abcdefghij", 5, 1, "abcde", 0, 1);
706     test("abcdefghij", 5, 1, "abcde", 1, 5);
707     test("abcdefghij", 5, 1, "abcde", 2, 5);
708     test("abcdefghij", 5, 1, "abcde", 4, 5);
709     test("abcdefghij", 5, 1, "abcde", 5, 5);
710     test("abcdefghij", 5, 1, "abcdefghij", 0, 1);
711     test("abcdefghij", 5, 1, "abcdefghij", 1, 5);
712     test("abcdefghij", 5, 1, "abcdefghij", 5, 5);
713     test("abcdefghij", 5, 1, "abcdefghij", 9, 5);
714     test("abcdefghij", 5, 1, "abcdefghij", 10, 5);
715     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 0, 1);
716     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 1, 5);
717     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 10, 5);
718     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 19, 5);
719     test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 20, 5);
720     test("abcdefghij", 5, 2, "", 0, 2);
721     test("abcdefghij", 5, 2, "abcde", 0, 2);
722     test("abcdefghij", 5, 2, "abcde", 1, 5);
723     test("abcdefghij", 5, 2, "abcde", 2, 5);
724     test("abcdefghij", 5, 2, "abcde", 4, 5);
725     test("abcdefghij", 5, 2, "abcde", 5, 5);
726     test("abcdefghij", 5, 2, "abcdefghij", 0, 2);
727     test("abcdefghij", 5, 2, "abcdefghij", 1, 5);
728     test("abcdefghij", 5, 2, "abcdefghij", 5, 5);
729     test("abcdefghij", 5, 2, "abcdefghij", 9, 5);
730     test("abcdefghij", 5, 2, "abcdefghij", 10, 5);
731     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 0, 2);
732     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 1, 5);
733     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 10, 5);
734     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 19, 5);
735     test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 20, 5);
736     test("abcdefghij", 5, 4, "", 0, 4);
737     test("abcdefghij", 5, 4, "abcde", 0, 4);
738     test("abcdefghij", 5, 4, "abcde", 1, 5);
739     test("abcdefghij", 5, 4, "abcde", 2, 5);
740     test("abcdefghij", 5, 4, "abcde", 4, 5);
741     test("abcdefghij", 5, 4, "abcde", 5, 5);
742     test("abcdefghij", 5, 4, "abcdefghij", 0, 4);
743     test("abcdefghij", 5, 4, "abcdefghij", 1, 5);
744     test("abcdefghij", 5, 4, "abcdefghij", 5, 5);
745     test("abcdefghij", 5, 4, "abcdefghij", 9, 5);
746     test("abcdefghij", 5, 4, "abcdefghij", 10, 5);
747     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 0, 4);
748     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 1, 5);
749     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 10, 5);
750     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 19, 5);
751     test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 20, 5);
752     test("abcdefghij", 5, 5, "", 0, 5);
753     test("abcdefghij", 5, 5, "abcde", 0, 5);
754     test("abcdefghij", 5, 5, "abcde", 1, 5);
755     test("abcdefghij", 5, 5, "abcde", 2, 5);
756     test("abcdefghij", 5, 5, "abcde", 4, 5);
757     test("abcdefghij", 5, 5, "abcde", 5, 5);
758     test("abcdefghij", 5, 5, "abcdefghij", 0, 5);
759     test("abcdefghij", 5, 5, "abcdefghij", 1, 5);
760     test("abcdefghij", 5, 5, "abcdefghij", 5, 5);
761     test("abcdefghij", 5, 5, "abcdefghij", 9, 5);
762     test("abcdefghij", 5, 5, "abcdefghij", 10, 5);
763     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 0, 5);
764     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 1, 5);
765     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 10, 5);
766     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 19, 5);
767     test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 20, 5);
768     test("abcdefghij", 5, 6, "", 0, 5);
769     test("abcdefghij", 5, 6, "abcde", 0, 5);
770     test("abcdefghij", 5, 6, "abcde", 1, 5);
771     test("abcdefghij", 5, 6, "abcde", 2, 5);
772     test("abcdefghij", 5, 6, "abcde", 4, 5);
773     test("abcdefghij", 5, 6, "abcde", 5, 5);
774     test("abcdefghij", 5, 6, "abcdefghij", 0, 5);
775     test("abcdefghij", 5, 6, "abcdefghij", 1, 5);
776     test("abcdefghij", 5, 6, "abcdefghij", 5, 5);
777     test("abcdefghij", 5, 6, "abcdefghij", 9, 5);
778     test("abcdefghij", 5, 6, "abcdefghij", 10, 5);
779     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 0, 5);
780 }
781 
782 
test7()783 void test7()
784 {
785     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 1, 5);
786     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 10, 5);
787     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 19, 5);
788     test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 20, 5);
789     test("abcdefghij", 9, 0, "", 0, 0);
790     test("abcdefghij", 9, 0, "abcde", 0, 0);
791     test("abcdefghij", 9, 0, "abcde", 1, -1);
792     test("abcdefghij", 9, 0, "abcde", 2, -2);
793     test("abcdefghij", 9, 0, "abcde", 4, -4);
794     test("abcdefghij", 9, 0, "abcde", 5, -5);
795     test("abcdefghij", 9, 0, "abcdefghij", 0, 0);
796     test("abcdefghij", 9, 0, "abcdefghij", 1, -1);
797     test("abcdefghij", 9, 0, "abcdefghij", 5, -5);
798     test("abcdefghij", 9, 0, "abcdefghij", 9, -9);
799     test("abcdefghij", 9, 0, "abcdefghij", 10, -10);
800     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 0, 0);
801     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 1, -1);
802     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 10, -10);
803     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 19, -19);
804     test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 20, -20);
805     test("abcdefghij", 9, 1, "", 0, 1);
806     test("abcdefghij", 9, 1, "abcde", 0, 1);
807     test("abcdefghij", 9, 1, "abcde", 1, 9);
808     test("abcdefghij", 9, 1, "abcde", 2, 9);
809     test("abcdefghij", 9, 1, "abcde", 4, 9);
810     test("abcdefghij", 9, 1, "abcde", 5, 9);
811     test("abcdefghij", 9, 1, "abcdefghij", 0, 1);
812     test("abcdefghij", 9, 1, "abcdefghij", 1, 9);
813     test("abcdefghij", 9, 1, "abcdefghij", 5, 9);
814     test("abcdefghij", 9, 1, "abcdefghij", 9, 9);
815     test("abcdefghij", 9, 1, "abcdefghij", 10, 9);
816     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 0, 1);
817     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 1, 9);
818     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 10, 9);
819     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 19, 9);
820     test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 20, 9);
821     test("abcdefghij", 9, 2, "", 0, 1);
822     test("abcdefghij", 9, 2, "abcde", 0, 1);
823     test("abcdefghij", 9, 2, "abcde", 1, 9);
824     test("abcdefghij", 9, 2, "abcde", 2, 9);
825     test("abcdefghij", 9, 2, "abcde", 4, 9);
826     test("abcdefghij", 9, 2, "abcde", 5, 9);
827     test("abcdefghij", 9, 2, "abcdefghij", 0, 1);
828     test("abcdefghij", 9, 2, "abcdefghij", 1, 9);
829     test("abcdefghij", 9, 2, "abcdefghij", 5, 9);
830     test("abcdefghij", 9, 2, "abcdefghij", 9, 9);
831     test("abcdefghij", 9, 2, "abcdefghij", 10, 9);
832     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 0, 1);
833     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 1, 9);
834     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 10, 9);
835     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 19, 9);
836     test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 20, 9);
837     test("abcdefghij", 10, 0, "", 0, 0);
838     test("abcdefghij", 10, 0, "abcde", 0, 0);
839     test("abcdefghij", 10, 0, "abcde", 1, -1);
840     test("abcdefghij", 10, 0, "abcde", 2, -2);
841     test("abcdefghij", 10, 0, "abcde", 4, -4);
842     test("abcdefghij", 10, 0, "abcde", 5, -5);
843     test("abcdefghij", 10, 0, "abcdefghij", 0, 0);
844     test("abcdefghij", 10, 0, "abcdefghij", 1, -1);
845     test("abcdefghij", 10, 0, "abcdefghij", 5, -5);
846     test("abcdefghij", 10, 0, "abcdefghij", 9, -9);
847     test("abcdefghij", 10, 0, "abcdefghij", 10, -10);
848     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 0, 0);
849     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 1, -1);
850     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 10, -10);
851     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 19, -19);
852     test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 20, -20);
853     test("abcdefghij", 10, 1, "", 0, 0);
854     test("abcdefghij", 10, 1, "abcde", 0, 0);
855     test("abcdefghij", 10, 1, "abcde", 1, -1);
856     test("abcdefghij", 10, 1, "abcde", 2, -2);
857     test("abcdefghij", 10, 1, "abcde", 4, -4);
858     test("abcdefghij", 10, 1, "abcde", 5, -5);
859     test("abcdefghij", 10, 1, "abcdefghij", 0, 0);
860     test("abcdefghij", 10, 1, "abcdefghij", 1, -1);
861     test("abcdefghij", 10, 1, "abcdefghij", 5, -5);
862     test("abcdefghij", 10, 1, "abcdefghij", 9, -9);
863     test("abcdefghij", 10, 1, "abcdefghij", 10, -10);
864     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 0, 0);
865     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 1, -1);
866     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 10, -10);
867     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 19, -19);
868     test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 20, -20);
869     test("abcdefghij", 11, 0, "", 0, 0);
870     test("abcdefghij", 11, 0, "abcde", 0, 0);
871     test("abcdefghij", 11, 0, "abcde", 1, 0);
872     test("abcdefghij", 11, 0, "abcde", 2, 0);
873     test("abcdefghij", 11, 0, "abcde", 4, 0);
874     test("abcdefghij", 11, 0, "abcde", 5, 0);
875     test("abcdefghij", 11, 0, "abcdefghij", 0, 0);
876     test("abcdefghij", 11, 0, "abcdefghij", 1, 0);
877     test("abcdefghij", 11, 0, "abcdefghij", 5, 0);
878     test("abcdefghij", 11, 0, "abcdefghij", 9, 0);
879     test("abcdefghij", 11, 0, "abcdefghij", 10, 0);
880     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0, 0);
881     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 1, 0);
882     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 10, 0);
883     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 19, 0);
884     test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 20, 0);
885 }
886 
test8()887 void test8()
888 {
889     test("abcdefghijklmnopqrst", 0, 0, "", 0, 0);
890     test("abcdefghijklmnopqrst", 0, 0, "abcde", 0, 0);
891     test("abcdefghijklmnopqrst", 0, 0, "abcde", 1, -1);
892     test("abcdefghijklmnopqrst", 0, 0, "abcde", 2, -2);
893     test("abcdefghijklmnopqrst", 0, 0, "abcde", 4, -4);
894     test("abcdefghijklmnopqrst", 0, 0, "abcde", 5, -5);
895     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 0, 0);
896     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 1, -1);
897     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 5, -5);
898     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 9, -9);
899     test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 10, -10);
900     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 0, 0);
901     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 1, -1);
902     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 10, -10);
903     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 19, -19);
904     test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 20, -20);
905     test("abcdefghijklmnopqrst", 0, 1, "", 0, 1);
906     test("abcdefghijklmnopqrst", 0, 1, "abcde", 0, 1);
907     test("abcdefghijklmnopqrst", 0, 1, "abcde", 1, 0);
908     test("abcdefghijklmnopqrst", 0, 1, "abcde", 2, -1);
909     test("abcdefghijklmnopqrst", 0, 1, "abcde", 4, -3);
910     test("abcdefghijklmnopqrst", 0, 1, "abcde", 5, -4);
911     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 0, 1);
912     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 1, 0);
913     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 5, -4);
914     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 9, -8);
915     test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 10, -9);
916     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 0, 1);
917     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 1, 0);
918     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 10, -9);
919     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 19, -18);
920     test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 20, -19);
921     test("abcdefghijklmnopqrst", 0, 10, "", 0, 10);
922     test("abcdefghijklmnopqrst", 0, 10, "abcde", 0, 10);
923     test("abcdefghijklmnopqrst", 0, 10, "abcde", 1, 9);
924     test("abcdefghijklmnopqrst", 0, 10, "abcde", 2, 8);
925     test("abcdefghijklmnopqrst", 0, 10, "abcde", 4, 6);
926     test("abcdefghijklmnopqrst", 0, 10, "abcde", 5, 5);
927     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 0, 10);
928     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 1, 9);
929     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 5, 5);
930     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 9, 1);
931     test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 10, 0);
932     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 0, 10);
933     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 1, 9);
934     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 10, 0);
935     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 19, -9);
936     test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 20, -10);
937     test("abcdefghijklmnopqrst", 0, 19, "", 0, 19);
938     test("abcdefghijklmnopqrst", 0, 19, "abcde", 0, 19);
939     test("abcdefghijklmnopqrst", 0, 19, "abcde", 1, 18);
940     test("abcdefghijklmnopqrst", 0, 19, "abcde", 2, 17);
941     test("abcdefghijklmnopqrst", 0, 19, "abcde", 4, 15);
942     test("abcdefghijklmnopqrst", 0, 19, "abcde", 5, 14);
943     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 0, 19);
944     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 1, 18);
945     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 5, 14);
946     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 9, 10);
947     test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 10, 9);
948     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 0, 19);
949     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 1, 18);
950     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 10, 9);
951     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 19, 0);
952     test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 20, -1);
953     test("abcdefghijklmnopqrst", 0, 20, "", 0, 20);
954     test("abcdefghijklmnopqrst", 0, 20, "abcde", 0, 20);
955     test("abcdefghijklmnopqrst", 0, 20, "abcde", 1, 19);
956     test("abcdefghijklmnopqrst", 0, 20, "abcde", 2, 18);
957     test("abcdefghijklmnopqrst", 0, 20, "abcde", 4, 16);
958     test("abcdefghijklmnopqrst", 0, 20, "abcde", 5, 15);
959     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 0, 20);
960     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 1, 19);
961     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 5, 15);
962     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 9, 11);
963     test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 10, 10);
964     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 0, 20);
965     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 1, 19);
966     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 10, 10);
967     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 19, 1);
968     test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 20, 0);
969     test("abcdefghijklmnopqrst", 0, 21, "", 0, 20);
970     test("abcdefghijklmnopqrst", 0, 21, "abcde", 0, 20);
971     test("abcdefghijklmnopqrst", 0, 21, "abcde", 1, 19);
972     test("abcdefghijklmnopqrst", 0, 21, "abcde", 2, 18);
973     test("abcdefghijklmnopqrst", 0, 21, "abcde", 4, 16);
974     test("abcdefghijklmnopqrst", 0, 21, "abcde", 5, 15);
975     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 0, 20);
976     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 1, 19);
977     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 5, 15);
978     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 9, 11);
979     test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 10, 10);
980     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 0, 20);
981     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 1, 19);
982     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 10, 10);
983     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 19, 1);
984     test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 20, 0);
985     test("abcdefghijklmnopqrst", 1, 0, "", 0, 0);
986     test("abcdefghijklmnopqrst", 1, 0, "abcde", 0, 0);
987     test("abcdefghijklmnopqrst", 1, 0, "abcde", 1, -1);
988     test("abcdefghijklmnopqrst", 1, 0, "abcde", 2, -2);
989 }
990 
991 
test9()992 void test9()
993 {
994     test("abcdefghijklmnopqrst", 1, 0, "abcde", 4, -4);
995     test("abcdefghijklmnopqrst", 1, 0, "abcde", 5, -5);
996     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 0, 0);
997     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 1, -1);
998     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 5, -5);
999     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 9, -9);
1000     test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 10, -10);
1001     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 0, 0);
1002     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 1, -1);
1003     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 10, -10);
1004     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 19, -19);
1005     test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 20, -20);
1006     test("abcdefghijklmnopqrst", 1, 1, "", 0, 1);
1007     test("abcdefghijklmnopqrst", 1, 1, "abcde", 0, 1);
1008     test("abcdefghijklmnopqrst", 1, 1, "abcde", 1, 1);
1009     test("abcdefghijklmnopqrst", 1, 1, "abcde", 2, 1);
1010     test("abcdefghijklmnopqrst", 1, 1, "abcde", 4, 1);
1011     test("abcdefghijklmnopqrst", 1, 1, "abcde", 5, 1);
1012     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 0, 1);
1013     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 1, 1);
1014     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 5, 1);
1015     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 9, 1);
1016     test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 10, 1);
1017     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 0, 1);
1018     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 1, 1);
1019     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 10, 1);
1020     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 19, 1);
1021     test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 20, 1);
1022     test("abcdefghijklmnopqrst", 1, 9, "", 0, 9);
1023     test("abcdefghijklmnopqrst", 1, 9, "abcde", 0, 9);
1024     test("abcdefghijklmnopqrst", 1, 9, "abcde", 1, 1);
1025     test("abcdefghijklmnopqrst", 1, 9, "abcde", 2, 1);
1026     test("abcdefghijklmnopqrst", 1, 9, "abcde", 4, 1);
1027     test("abcdefghijklmnopqrst", 1, 9, "abcde", 5, 1);
1028     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 0, 9);
1029     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 1, 1);
1030     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 5, 1);
1031     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 9, 1);
1032     test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 10, 1);
1033     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 0, 9);
1034     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 1, 1);
1035     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 10, 1);
1036     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 19, 1);
1037     test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 20, 1);
1038     test("abcdefghijklmnopqrst", 1, 18, "", 0, 18);
1039     test("abcdefghijklmnopqrst", 1, 18, "abcde", 0, 18);
1040     test("abcdefghijklmnopqrst", 1, 18, "abcde", 1, 1);
1041     test("abcdefghijklmnopqrst", 1, 18, "abcde", 2, 1);
1042     test("abcdefghijklmnopqrst", 1, 18, "abcde", 4, 1);
1043     test("abcdefghijklmnopqrst", 1, 18, "abcde", 5, 1);
1044     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 0, 18);
1045     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 1, 1);
1046     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 5, 1);
1047     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 9, 1);
1048     test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 10, 1);
1049     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 0, 18);
1050     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 1, 1);
1051     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 10, 1);
1052     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 19, 1);
1053     test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 20, 1);
1054     test("abcdefghijklmnopqrst", 1, 19, "", 0, 19);
1055     test("abcdefghijklmnopqrst", 1, 19, "abcde", 0, 19);
1056     test("abcdefghijklmnopqrst", 1, 19, "abcde", 1, 1);
1057     test("abcdefghijklmnopqrst", 1, 19, "abcde", 2, 1);
1058     test("abcdefghijklmnopqrst", 1, 19, "abcde", 4, 1);
1059     test("abcdefghijklmnopqrst", 1, 19, "abcde", 5, 1);
1060     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 0, 19);
1061     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 1, 1);
1062     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 5, 1);
1063     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 9, 1);
1064     test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 10, 1);
1065     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 0, 19);
1066     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 1, 1);
1067     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 10, 1);
1068     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 19, 1);
1069     test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 20, 1);
1070     test("abcdefghijklmnopqrst", 1, 20, "", 0, 19);
1071     test("abcdefghijklmnopqrst", 1, 20, "abcde", 0, 19);
1072     test("abcdefghijklmnopqrst", 1, 20, "abcde", 1, 1);
1073     test("abcdefghijklmnopqrst", 1, 20, "abcde", 2, 1);
1074     test("abcdefghijklmnopqrst", 1, 20, "abcde", 4, 1);
1075     test("abcdefghijklmnopqrst", 1, 20, "abcde", 5, 1);
1076     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 0, 19);
1077     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 1, 1);
1078     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 5, 1);
1079     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 9, 1);
1080     test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 10, 1);
1081     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 0, 19);
1082     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 1, 1);
1083     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 10, 1);
1084     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 19, 1);
1085     test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 20, 1);
1086     test("abcdefghijklmnopqrst", 10, 0, "", 0, 0);
1087     test("abcdefghijklmnopqrst", 10, 0, "abcde", 0, 0);
1088     test("abcdefghijklmnopqrst", 10, 0, "abcde", 1, -1);
1089     test("abcdefghijklmnopqrst", 10, 0, "abcde", 2, -2);
1090     test("abcdefghijklmnopqrst", 10, 0, "abcde", 4, -4);
1091     test("abcdefghijklmnopqrst", 10, 0, "abcde", 5, -5);
1092     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 0, 0);
1093     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 1, -1);
1094 }
1095 
1096 
test10()1097 void test10()
1098 {
1099     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 5, -5);
1100     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 9, -9);
1101     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 10, -10);
1102     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 0, 0);
1103     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 1, -1);
1104     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 10, -10);
1105     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 19, -19);
1106     test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 20, -20);
1107     test("abcdefghijklmnopqrst", 10, 1, "", 0, 1);
1108     test("abcdefghijklmnopqrst", 10, 1, "abcde", 0, 1);
1109     test("abcdefghijklmnopqrst", 10, 1, "abcde", 1, 10);
1110     test("abcdefghijklmnopqrst", 10, 1, "abcde", 2, 10);
1111     test("abcdefghijklmnopqrst", 10, 1, "abcde", 4, 10);
1112     test("abcdefghijklmnopqrst", 10, 1, "abcde", 5, 10);
1113     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 0, 1);
1114     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 1, 10);
1115     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 5, 10);
1116     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 9, 10);
1117     test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 10, 10);
1118     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 0, 1);
1119     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 1, 10);
1120     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 10, 10);
1121     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 19, 10);
1122     test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 20, 10);
1123     test("abcdefghijklmnopqrst", 10, 5, "", 0, 5);
1124     test("abcdefghijklmnopqrst", 10, 5, "abcde", 0, 5);
1125     test("abcdefghijklmnopqrst", 10, 5, "abcde", 1, 10);
1126     test("abcdefghijklmnopqrst", 10, 5, "abcde", 2, 10);
1127     test("abcdefghijklmnopqrst", 10, 5, "abcde", 4, 10);
1128     test("abcdefghijklmnopqrst", 10, 5, "abcde", 5, 10);
1129     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 0, 5);
1130     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 1, 10);
1131     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 5, 10);
1132     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 9, 10);
1133     test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 10, 10);
1134     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 0, 5);
1135     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 1, 10);
1136     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 10, 10);
1137     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 19, 10);
1138     test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 20, 10);
1139     test("abcdefghijklmnopqrst", 10, 9, "", 0, 9);
1140     test("abcdefghijklmnopqrst", 10, 9, "abcde", 0, 9);
1141     test("abcdefghijklmnopqrst", 10, 9, "abcde", 1, 10);
1142     test("abcdefghijklmnopqrst", 10, 9, "abcde", 2, 10);
1143     test("abcdefghijklmnopqrst", 10, 9, "abcde", 4, 10);
1144     test("abcdefghijklmnopqrst", 10, 9, "abcde", 5, 10);
1145     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 0, 9);
1146     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 1, 10);
1147     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 5, 10);
1148     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 9, 10);
1149     test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 10, 10);
1150     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 0, 9);
1151     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 1, 10);
1152     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 10, 10);
1153     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 19, 10);
1154     test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 20, 10);
1155     test("abcdefghijklmnopqrst", 10, 10, "", 0, 10);
1156     test("abcdefghijklmnopqrst", 10, 10, "abcde", 0, 10);
1157     test("abcdefghijklmnopqrst", 10, 10, "abcde", 1, 10);
1158     test("abcdefghijklmnopqrst", 10, 10, "abcde", 2, 10);
1159     test("abcdefghijklmnopqrst", 10, 10, "abcde", 4, 10);
1160     test("abcdefghijklmnopqrst", 10, 10, "abcde", 5, 10);
1161     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 0, 10);
1162     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 1, 10);
1163     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 5, 10);
1164     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 9, 10);
1165     test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 10, 10);
1166     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 0, 10);
1167     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 1, 10);
1168     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 10, 10);
1169     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 19, 10);
1170     test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 20, 10);
1171     test("abcdefghijklmnopqrst", 10, 11, "", 0, 10);
1172     test("abcdefghijklmnopqrst", 10, 11, "abcde", 0, 10);
1173     test("abcdefghijklmnopqrst", 10, 11, "abcde", 1, 10);
1174     test("abcdefghijklmnopqrst", 10, 11, "abcde", 2, 10);
1175     test("abcdefghijklmnopqrst", 10, 11, "abcde", 4, 10);
1176     test("abcdefghijklmnopqrst", 10, 11, "abcde", 5, 10);
1177     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 0, 10);
1178     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 1, 10);
1179     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 5, 10);
1180     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 9, 10);
1181     test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 10, 10);
1182     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 0, 10);
1183     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 1, 10);
1184     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 10, 10);
1185     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 19, 10);
1186     test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 20, 10);
1187     test("abcdefghijklmnopqrst", 19, 0, "", 0, 0);
1188     test("abcdefghijklmnopqrst", 19, 0, "abcde", 0, 0);
1189     test("abcdefghijklmnopqrst", 19, 0, "abcde", 1, -1);
1190     test("abcdefghijklmnopqrst", 19, 0, "abcde", 2, -2);
1191     test("abcdefghijklmnopqrst", 19, 0, "abcde", 4, -4);
1192     test("abcdefghijklmnopqrst", 19, 0, "abcde", 5, -5);
1193     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 0, 0);
1194     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 1, -1);
1195     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 5, -5);
1196     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 9, -9);
1197     test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 10, -10);
1198     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 0, 0);
1199 }
1200 
1201 
test11()1202 void test11()
1203 {
1204     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 1, -1);
1205     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 10, -10);
1206     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 19, -19);
1207     test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 20, -20);
1208     test("abcdefghijklmnopqrst", 19, 1, "", 0, 1);
1209     test("abcdefghijklmnopqrst", 19, 1, "abcde", 0, 1);
1210     test("abcdefghijklmnopqrst", 19, 1, "abcde", 1, 19);
1211     test("abcdefghijklmnopqrst", 19, 1, "abcde", 2, 19);
1212     test("abcdefghijklmnopqrst", 19, 1, "abcde", 4, 19);
1213     test("abcdefghijklmnopqrst", 19, 1, "abcde", 5, 19);
1214     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 0, 1);
1215     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 1, 19);
1216     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 5, 19);
1217     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 9, 19);
1218     test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 10, 19);
1219     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 0, 1);
1220     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 1, 19);
1221     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 10, 19);
1222     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 19, 19);
1223     test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 20, 19);
1224     test("abcdefghijklmnopqrst", 19, 2, "", 0, 1);
1225     test("abcdefghijklmnopqrst", 19, 2, "abcde", 0, 1);
1226     test("abcdefghijklmnopqrst", 19, 2, "abcde", 1, 19);
1227     test("abcdefghijklmnopqrst", 19, 2, "abcde", 2, 19);
1228     test("abcdefghijklmnopqrst", 19, 2, "abcde", 4, 19);
1229     test("abcdefghijklmnopqrst", 19, 2, "abcde", 5, 19);
1230     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 0, 1);
1231     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 1, 19);
1232     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 5, 19);
1233     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 9, 19);
1234     test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 10, 19);
1235     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 0, 1);
1236     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 1, 19);
1237     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 10, 19);
1238     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 19, 19);
1239     test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 20, 19);
1240     test("abcdefghijklmnopqrst", 20, 0, "", 0, 0);
1241     test("abcdefghijklmnopqrst", 20, 0, "abcde", 0, 0);
1242     test("abcdefghijklmnopqrst", 20, 0, "abcde", 1, -1);
1243     test("abcdefghijklmnopqrst", 20, 0, "abcde", 2, -2);
1244     test("abcdefghijklmnopqrst", 20, 0, "abcde", 4, -4);
1245     test("abcdefghijklmnopqrst", 20, 0, "abcde", 5, -5);
1246     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 0, 0);
1247     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 1, -1);
1248     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 5, -5);
1249     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 9, -9);
1250     test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 10, -10);
1251     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 0, 0);
1252     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 1, -1);
1253     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 10, -10);
1254     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 19, -19);
1255     test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 20, -20);
1256     test("abcdefghijklmnopqrst", 20, 1, "", 0, 0);
1257     test("abcdefghijklmnopqrst", 20, 1, "abcde", 0, 0);
1258     test("abcdefghijklmnopqrst", 20, 1, "abcde", 1, -1);
1259     test("abcdefghijklmnopqrst", 20, 1, "abcde", 2, -2);
1260     test("abcdefghijklmnopqrst", 20, 1, "abcde", 4, -4);
1261     test("abcdefghijklmnopqrst", 20, 1, "abcde", 5, -5);
1262     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 0, 0);
1263     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 1, -1);
1264     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 5, -5);
1265     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 9, -9);
1266     test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 10, -10);
1267     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 0, 0);
1268     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 1, -1);
1269     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 10, -10);
1270     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 19, -19);
1271     test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 20, -20);
1272     test("abcdefghijklmnopqrst", 21, 0, "", 0, 0);
1273     test("abcdefghijklmnopqrst", 21, 0, "abcde", 0, 0);
1274     test("abcdefghijklmnopqrst", 21, 0, "abcde", 1, 0);
1275     test("abcdefghijklmnopqrst", 21, 0, "abcde", 2, 0);
1276     test("abcdefghijklmnopqrst", 21, 0, "abcde", 4, 0);
1277     test("abcdefghijklmnopqrst", 21, 0, "abcde", 5, 0);
1278     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 0, 0);
1279     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 1, 0);
1280     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 5, 0);
1281     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 9, 0);
1282     test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 10, 0);
1283     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 0, 0);
1284     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 1, 0);
1285     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 10, 0);
1286     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 19, 0);
1287     test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 20, 0);
1288     }
1289 
1290 
main()1291 int main () {
1292     test0();
1293     test1();
1294     test2();
1295     test3();
1296     test4();
1297     test5();
1298     test6();
1299     test7();
1300     test8();
1301     test9();
1302     test10();
1303     test11();
1304 
1305     {
1306     test("", 0, 0, "abcde", 0, 0);
1307     test("", 0, 0, "abcde", 1, -1);
1308     test("abcdefghijklmnopqrst", 21, 0, "abcde", 0, 0);
1309     test("abcdefghijklmnopqrst", 21, 0, "abcde", 1, 0);
1310     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 10, -10);
1311     }
1312 
1313     {
1314     test(L"", 0, 0, L"abcde", 0, 0);
1315     test(L"", 0, 0, L"abcde", 1, -1);
1316     test(L"abcdefghijklmnopqrst", 21, 0, L"abcde", 0, 0);
1317     test(L"abcdefghijklmnopqrst", 21, 0, L"abcde", 1, 0);
1318     test(L"abcdefghijklmnopqrst", 10, 0, L"abcdefghij", 10, -10);
1319     }
1320 
1321 #if __cplusplus >= 201103L
1322     {
1323     test(U"", 0, 0, U"abcde", 0, 0);
1324     test(U"", 0, 0, U"abcde", 1, -1);
1325     test(U"abcdefghijklmnopqrst", 21, 0, U"abcde", 0, 0);
1326     test(U"abcdefghijklmnopqrst", 21, 0, U"abcde", 1, 0);
1327     test(U"abcdefghijklmnopqrst", 10, 0, U"abcdefghij", 10, -10);
1328     }
1329 
1330     {
1331     test(U"", 0, 0, U"abcde", 0, 0);
1332     test(U"", 0, 0, U"abcde", 1, -1);
1333     test(U"abcdefghijklmnopqrst", 21, 0, U"abcde", 0, 0);
1334     test(U"abcdefghijklmnopqrst", 21, 0, U"abcde", 1, 0);
1335     test(U"abcdefghijklmnopqrst", 10, 0, U"abcdefghij", 10, -10);
1336     }
1337 #endif
1338 
1339 #if _LIBCPP_STD_VER > 11
1340     {
1341     typedef std::experimental::basic_string_view<char, constexpr_char_traits<char>> SV;
1342     constexpr SV  sv1;
1343     constexpr SV  sv2 { "abcdefghijklmnopqrst", 21 };
1344     static_assert ( sv1.compare(0, 0, "abcde", 0) == 0, "" );
1345     static_assert ( sv1.compare(0, 0, "abcde", 1) == -1, "" );
1346     static_assert ( sv2.compare(0, 0, "abcde", 1, 0) == 0, "" );
1347     }
1348 #endif
1349 }
1350