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