]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/static_string/test/static_string.cpp
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / boost / libs / static_string / test / static_string.cpp
CommitLineData
f67539c2
TL
1//
2// Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot com)
3// Copyright (c) 2019-2020 Krystian Stasiowski (sdkrystian at gmail dot com)
4//
5// Distributed under the Boost Software License, Version 1.0. (See accompanying
6// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
7//
8// Official repository: https://github.com/boostorg/static_string
9//
10
11// Test that header file is self-contained.
12#include <boost/static_string/static_string.hpp>
13#include "constexpr_tests.hpp"
14#include "compile_fail.hpp"
15
16#include <boost/core/lightweight_test.hpp>
17#include <cstdlib>
18#include <cwchar>
19#include <sstream>
20#include <string>
21
22namespace boost {
23namespace static_strings {
24
25template class basic_static_string<420, char>;
26
27using string_view = basic_string_view<char, std::char_traits<char>>;
28
29template <class S>
30bool
31testS(const S& s, typename S::size_type pos, typename S::size_type n)
32{
33 if (pos <= s.size())
34 {
35 S str = s.substr(pos, n);
36 typename S::size_type rlen = (std::min)(n, s.size() - pos);
37 return (S::traits_type::compare(s.data() + pos, str.data(), rlen) == 0);
38 }
39 else
40 {
41 BOOST_TEST_THROWS((s.substr(pos, n)), std::out_of_range);
42 return true;
43 }
44}
45
46template <class S>
47bool
48testSV(const S& s, typename S::size_type pos, typename S::size_type n)
49{
50 if (pos <= s.size())
51 {
52 typename S::string_view_type str = s.subview(pos, n);
53 typename S::size_type rlen = (std::min)(n, s.size() - pos);
54 return (S::traits_type::compare(s.data() + pos, str.data(), rlen) == 0);
55 }
56 else
57 {
58 BOOST_TEST_THROWS((s.subview(pos, n)), std::out_of_range);
59 return true;
60 }
61}
62
63template <class S>
64bool
65testAS(S s, const typename S::value_type* str, typename S::size_type n, S expected)
66{
67 s.assign(str, n);
68 return s == expected;
69}
70
71template <class S>
72bool
73testI(S s, typename S::size_type pos, const typename S::value_type* str, typename S::size_type n, S expected)
74{
75 const typename S::size_type old_size = s.size();
76 if (pos <= old_size)
77 {
78 s.insert(pos, str, n);
79 return s == expected;
80 }
81 else
82 {
83 BOOST_TEST_THROWS((s.insert(pos, str, n)), std::out_of_range);
84 return true;
85 }
86}
87
88template <class S>
89bool
90testE(S s, typename S::size_type pos, typename S::size_type n, S expected)
91{
92 const typename S::size_type old_size = s.size();
93 if (pos <= old_size)
94 {
95 s.erase(pos, n);
96 return s[s.size()] == typename S::value_type() && s == expected;
97 }
98 else
99 {
100 BOOST_TEST_THROWS(s.erase(pos, n), std::out_of_range);
101 return true;
102 }
103}
104
105template <class S>
106bool
107testA(S s, const typename S::value_type* str, typename S::size_type n, S expected)
108{
109 return s.append(str, n) == expected;
110}
111
112int
113sign(int x)
114{
115 if (x == 0)
116 return 0;
117 if (x < 0)
118 return -1;
119 return 1;
120}
121
122template <class S>
123bool
124testC(const S& s, typename S::size_type pos, typename S::size_type n1, const typename S::value_type* str, typename S::size_type n2, int x)
125{
126 if (pos <= s.size())
127 return sign(s.compare(pos, n1, str, n2)) == sign(x);
128 else
129 {
130 BOOST_TEST_THROWS(s.compare(pos, n1, str, n2), std::out_of_range);
131 return true;
132 }
133}
134
135template <class S>
136bool
137testF(const S& s, const typename S::value_type* str, typename S::size_type pos, typename S::size_type n, typename S::size_type x)
138{
139 return s.find(str, pos, n) == x;
140}
141
142template <class S>
143bool
144testRF(const S& s, const typename S::value_type* str, typename S::size_type pos, typename S::size_type n, typename S::size_type x)
145{
146 return s.rfind(str, pos, n) == x;
147}
148
149template <class S>
150bool
151testFF(const S& s, const typename S::value_type* str, typename S::size_type pos, typename S::size_type n, typename S::size_type x)
152{
153 return s.find_first_of(str, pos, n) == x;
154}
155
156template <class S>
157bool
158testFL(const S& s, const typename S::value_type* str, typename S::size_type pos, typename S::size_type n, typename S::size_type x)
159{
160 return s.find_last_of(str, pos, n) == x;
161}
162
163template <class S>
164bool
165testFFN(const S& s, const typename S::value_type* str, typename S::size_type pos, typename S::size_type n, typename S::size_type x)
166{
167 return s.find_first_not_of(str, pos, n) == x;
168}
169
170template <class S>
171bool
172testFLN(const S& s, const typename S::value_type* str, typename S::size_type pos, typename S::size_type n, typename S::size_type x)
173{
174 return s.find_last_not_of(str, pos, n) == x;
175}
176
177template <class S>
178bool
179testR(S s, typename S::size_type pos1, typename S::size_type n1, const typename S::value_type* str, S expected)
180{
181 typename S::const_iterator first = s.begin() + pos1;
182 typename S::const_iterator last = s.begin() + pos1 + n1;
183 s.replace(first, last, str);
184 return s == expected;
185}
186
187template <class S>
188bool
189testR(S s, typename S::size_type pos, typename S::size_type n1, typename S::size_type n2, typename S::value_type c, S expected)
190{
191 const typename S::size_type old_size = s.size();
192 if (pos <= old_size)
193 {
194 s.replace(pos, n1, n2, c);
195 return s == expected;
196 }
197 else
198 {
199 BOOST_TEST_THROWS((s.replace(pos, n1, n2, c)), std::out_of_range);
200 return true;
201 }
202}
203
204template <class S>
205bool
206testR(S s, typename S::size_type pos, typename S::size_type n1, const typename S::value_type* str, typename S::size_type n2, S expected)
207{
208 const typename S::size_type old_size = s.size();
209 S s0 = s;
210 if (n1 > old_size)
211 s.size();
212 if (pos <= old_size)
213 {
214 if (pos + n1 > s0.size())
215 // this is a precondition violation for the const_iterator overload
216 return s.replace(pos, n1, str, n2) == expected;
217 else
218 return s.replace(pos, n1, str, n2) == expected &&
219 s0.replace(s0.begin() + pos, s0.begin() + pos + n1, str, str + n2) == expected;
220 }
221 else
222 {
223 BOOST_TEST_THROWS((s.replace(pos, n1, str, n2)), std::out_of_range);
224 return true;
225 }
226}
227
228template<typename Arithmetic>
229bool
230testTS(Arithmetic value, const char* str_expected = "", const wchar_t* wstr_expected = L"", bool test_expected = false)
231{
232 const auto str = to_static_string(value);
233 const auto wstr = to_static_wstring(value);
234 if (std::is_floating_point<Arithmetic>::value)
235 {
236 const auto std_res = std::to_string(value);
237 const auto wstd_res = std::to_wstring(value);
238 return str == std_res.data() && wstr == wstd_res.data();
239 }
240 else
241 {
242 if (std::is_signed<Arithmetic>::value)
243 {
244 return Arithmetic(std::strtoll(str.begin(), nullptr, 10)) == value &&
245 Arithmetic(std::wcstoll(wstr.begin(), nullptr, 10)) == value &&
246 (test_expected ? str == str_expected && wstr == wstr_expected : true);
247 }
248 else
249 {
250 return Arithmetic(std::strtoull(str.begin(), nullptr, 10)) == value &&
251 Arithmetic(std::wcstoull(wstr.begin(), nullptr, 10)) == value &&
252 (test_expected ? str == str_expected && wstr == wstr_expected : true);
253 }
254 }
255}
256
257// done
258static
259void
260testConstruct()
261{
262 {
263 static_string<1> s;
264 BOOST_TEST(s.empty());
265 BOOST_TEST(s.size() == 0);
266 BOOST_TEST(s == "");
267 BOOST_TEST(*s.end() == 0);
268 }
269 {
270 static_string<4> s1(3, 'x');
271 BOOST_TEST(! s1.empty());
272 BOOST_TEST(s1.size() == 3);
273 BOOST_TEST(s1 == "xxx");
274 BOOST_TEST(*s1.end() == 0);
275 BOOST_TEST_THROWS(
276 (static_string<2>(3, 'x')),
277 std::length_error);
278 }
279 {
280 static_string<5> s1("12345");
281 BOOST_TEST(*s1.end() == 0);
282 static_string<3> s2(s1, 2);
283 BOOST_TEST(s2 == "345");
284 BOOST_TEST(*s2.end() == 0);
285 static_string<0> s3(s1, 5);
286 BOOST_TEST(s3.empty());
287 BOOST_TEST(s3.front() == 0);
288 BOOST_TEST(*s3.end() == 0);
289 }
290 {
291 static_string<5> s1("12345");
292 static_string<2> s2(s1, 1, 2);
293 BOOST_TEST(s2 == "23");
294 BOOST_TEST(*s2.end() == 0);
295 static_string<0> s3(s1, 5, 1);
296 BOOST_TEST(s3.empty());
297 BOOST_TEST(s3.front() == 0);
298 BOOST_TEST(*s3.end() == 0);
299 BOOST_TEST_THROWS(
300 (static_string<5>(s1, 6)),
301 std::out_of_range);
302 }
303 {
304 static_string<5> s1("UVXYZ", 3);
305 BOOST_TEST(s1 == "UVX");
306 BOOST_TEST(*s1.end() == 0);
307 static_string<5> s2("X\0""Y\0""Z", 3);
308 BOOST_TEST(std::memcmp(
309 s2.data(), "X\0""Y", 3) == 0);
310 BOOST_TEST(*s2.end() == 0);
311 }
312 {
313 static_string<5> s1("12345");
314 static_string<3> s2(
315 s1.begin() + 1, s1.begin() + 3);
316 BOOST_TEST(s2 == "23");
317 BOOST_TEST(*s2.end() == 0);
318 }
319 {
320 static_string<5> s1("12345");
321 static_string<5> s2(s1);
322 BOOST_TEST(s2 == "12345");
323 BOOST_TEST(*s2.end() == 0);
324 static_string<6> s3(s1);
325 BOOST_TEST(s3 == "12345");
326 BOOST_TEST(*s3.end() == 0);
327 BOOST_TEST_THROWS(
328 (static_string<4>(s1)),
329 std::length_error);
330 }
331 {
332 static_string<3> s1({'1', '2', '3'});
333 BOOST_TEST(s1 == "123");
334 BOOST_TEST(*s1.end() == 0);
335 BOOST_TEST(
336 static_string<0>({}) == static_string<0>());
337 BOOST_TEST_THROWS(
338 (static_string<2>({'1', '2', '3'})),
339 std::length_error);
340 }
341 {
342 static_string<3> s1(
343 string_view("123"));
344 BOOST_TEST(s1 == "123");
345 BOOST_TEST(*s1.end() == 0);
346 BOOST_TEST_THROWS(
347 (static_string<2>(string_view("123"))),
348 std::length_error);
349 }
350 {
351 static_string<5> s1(
352 std::string("12345"), 2, 2);
353 BOOST_TEST(s1 == "34");
354 BOOST_TEST(*s1.end() == 0);
355 BOOST_TEST_THROWS(
356 (static_string<2>(std::string("12345"), 1, 3)),
357 std::length_error);
358 }
359 {
360 BOOST_TEST_THROWS(static_string<5>("12345678"), std::length_error);
361 }
362}
363
364//done
365static
366void
367testAssignment()
368{
369 // assign(size_type count, CharT ch)
370 BOOST_TEST(static_string<3>{}.assign(1, '*') == "*");
371 BOOST_TEST(static_string<3>{}.assign(3, '*') == "***");
372 BOOST_TEST(static_string<3>{"abc"}.assign(3, '*') == "***");
373 BOOST_TEST_THROWS(static_string<1>{"a"}.assign(2, '*'), std::length_error);
374
375 // assign(static_string const& s) noexcept
376 BOOST_TEST(static_string<3>{}.assign(static_string<3>{"abc"}) == "abc");
377 BOOST_TEST(static_string<3>{"*"}.assign(static_string<3>{"abc"}) == "abc");
378 BOOST_TEST(static_string<3>{"***"}.assign(static_string<3>{"abc"}) == "abc");
379
380 // assign(static_string<M, CharT, Traits> const& s)
381 BOOST_TEST(static_string<3>{}.assign(static_string<5>{"abc"}) == "abc");
382 BOOST_TEST(static_string<3>{"*"}.assign(static_string<5>{"abc"}) == "abc");
383 BOOST_TEST(static_string<3>{"***"}.assign(static_string<5>{"abc"}) == "abc");
384 {
385 static_string<3> s("***");
386 BOOST_TEST(s.assign(s) == s);
387 }
388 BOOST_TEST_THROWS(static_string<3>{}.assign(static_string<5>{"abcde"}), std::length_error);
389
390 // assign(static_string<M, CharT, Traits> const& s, size_type pos, size_type count = npos)
391 BOOST_TEST(static_string<4>{}.assign(static_string<5>{"abcde"}, 1) == "bcde");
392 BOOST_TEST(static_string<3>{}.assign(static_string<5>{"abcde"}, 1, 3) == "bcd");
393 BOOST_TEST(static_string<3>{"*"}.assign(static_string<5>{"abcde"}, 1, 3) == "bcd");
394 BOOST_TEST(static_string<3>{"***"}.assign(static_string<5>{"abcde"}, 1, 3) == "bcd");
395 BOOST_TEST_THROWS(static_string<3>{}.assign(static_string<5>{"abcde"}, 0), std::length_error);
396
397 // assign(CharT const* s, size_type count)
398 BOOST_TEST(static_string<3>{}.assign("abc", 3) == "abc");
399 BOOST_TEST(static_string<3>{"*"}.assign("abc", 3) == "abc");
400 BOOST_TEST_THROWS(static_string<1>{}.assign("abc", 3), std::length_error);
401
402 // assign(CharT const* s)
403 BOOST_TEST(static_string<3>{}.assign("abc") == "abc");
404 BOOST_TEST(static_string<3>{"*"}.assign("abc") == "abc");
405 BOOST_TEST_THROWS(static_string<1>{}.assign("abc"), std::length_error);
406
407 // assign(InputIt first, InputIt last)
408 {
409 static_string<4> const cs{"abcd"};
410 static_string<4> s{"ad"};
411 BOOST_TEST(static_string<4>{}.assign(cs.begin(), cs.end()) == "abcd");
412 BOOST_TEST(static_string<4>{"*"}.assign(cs.begin(), cs.end()) == "abcd");
413 BOOST_TEST_THROWS(static_string<2>{"*"}.assign(cs.begin(), cs.end()), std::length_error);
414 }
415
416 // assign(std::initializer_list<CharT> ilist)
417 BOOST_TEST(static_string<3>{}.assign({'a', 'b', 'c'}) == "abc");
418 BOOST_TEST(static_string<3>{"*"}.assign({'a', 'b', 'c'}) == "abc");
419 BOOST_TEST(static_string<3>{"***"}.assign({'a', 'b', 'c'}) == "abc");
420 BOOST_TEST_THROWS(static_string<1>{}.assign({'a', 'b', 'c'}), std::length_error);
421
422 // assign(T const& t)
423 {
424 struct T
425 {
426 operator string_view() const noexcept
427 {
428 return "abc";
429 }
430 };
431 BOOST_TEST(static_string<3>{}.assign(T{}) == "abc");
432 BOOST_TEST(static_string<3>{"*"}.assign(T{}) == "abc");
433 BOOST_TEST(static_string<3>{"***"}.assign(T{}) == "abc");
434 BOOST_TEST_THROWS(static_string<2>{"**"}.assign(T{}), std::length_error);
435 }
436
437 // assign(T const& t, size_type pos, size_type count = npos)
438 {
439 struct T
440 {
441 operator string_view() const noexcept
442 {
443 return "abcde";
444 }
445 };
446 BOOST_TEST(static_string<5>{}.assign(T{}, 0) == "abcde");
447 BOOST_TEST(static_string<5>{}.assign(T{}, 0, 5) == "abcde");
448 BOOST_TEST(static_string<5>{}.assign(T{}, 1, 3) == "bcd");
449 BOOST_TEST(static_string<5>{"*"}.assign(T{}, 1) == "bcde");
450 BOOST_TEST_THROWS(static_string<2>{"**"}.assign(T{}, 6, 3), std::out_of_range);
451 BOOST_TEST_THROWS(static_string<2>{"**"}.assign(T{}, 1, 3), std::length_error);
452 }
453
454 //---
455
456 {
457 static_string<3> s1("123");
458 static_string<3> s2;
459 s2 = s1;
460 BOOST_TEST(s2 == "123");
461 BOOST_TEST(*s2.end() == 0);
462 }
463 {
464 static_string<3> s1("123");
465 static_string<5> s2;
466 s2 = s1;
467 BOOST_TEST(s2 == "123");
468 BOOST_TEST(*s2.end() == 0);
469 static_string<1> s3;
470 BOOST_TEST_THROWS(
471 s3 = s1,
472 std::length_error);
473 }
474
475 {
476 static_string<3> s1;
477 s1 = "123";
478 BOOST_TEST(s1 == "123");
479 BOOST_TEST(*s1.end() == 0);
480 static_string<1> s2;
481 BOOST_TEST_THROWS(
482 s2 = "123",
483 std::length_error);
484 }
485 {
486 static_string<1> s1;
487 s1 = 'x';
488 BOOST_TEST(s1 == "x");
489 BOOST_TEST(*s1.end() == 0);
490 static_string<0> s2;
491 BOOST_TEST_THROWS(
492 s2 = 'x',
493 std::length_error);
494 }
495 {
496 static_string<3> s1;
497 s1 = {'1', '2', '3'};
498 BOOST_TEST(s1 == "123");
499 BOOST_TEST(*s1.end() == 0);
500 static_string<1> s2;
501 BOOST_TEST_THROWS(
502 (s2 = {'1', '2', '3'}),
503 std::length_error);
504 }
505 {
506 static_string<3> s1;
507 s1 = string_view("123");
508 BOOST_TEST(s1 == "123");
509 BOOST_TEST(*s1.end() == 0);
510 static_string<1> s2;
511 BOOST_TEST_THROWS(
512 s2 = string_view("123"),
513 std::length_error);
514 }
515
516 {
517 static_string<4> s1;
518 s1.assign(3, 'x');
519 BOOST_TEST(s1 == "xxx");
520 BOOST_TEST(*s1.end() == 0);
521 static_string<2> s2;
522 BOOST_TEST_THROWS(
523 s2.assign(3, 'x'),
524 std::length_error);
525 }
526 {
527 static_string<5> s1("12345");
528 BOOST_TEST(*s1.end() == 0);
529 static_string<5> s2;
530 s2.assign(s1);
531 BOOST_TEST(s2 == "12345");
532 BOOST_TEST(*s2.end() == 0);
533 }
534 {
535 static_string<5> s1("12345");
536 BOOST_TEST(*s1.end() == 0);
537 static_string<7> s2;
538 s2.assign(s1);
539 BOOST_TEST(s2 == "12345");
540 BOOST_TEST(*s2.end() == 0);
541 static_string<3> s3;
542 BOOST_TEST_THROWS(
543 s3.assign(s1),
544 std::length_error);
545 }
546 {
547 static_string<5> s1("12345");
548 static_string<5> s2;
549 s2.assign(s1, 1);
550 BOOST_TEST(s2 == "2345");
551 BOOST_TEST(*s2.end() == 0);
552 s2.assign(s1, 1, 2);
553 BOOST_TEST(s2 == "23");
554 BOOST_TEST(*s2.end() == 0);
555 s2.assign(s1, 1, 100);
556 BOOST_TEST(s2 == "2345");
557 BOOST_TEST(*s2.end() == 0);
558 BOOST_TEST_THROWS(
559 (s2.assign(s1, 6)),
560 std::out_of_range);
561 static_string<3> s3;
562 BOOST_TEST_THROWS(
563 s3.assign(s1, 1),
564 std::length_error);
565 }
566 {
567 static_string<5> s1;
568 s1.assign("12");
569 BOOST_TEST(s1 == "12");
570 BOOST_TEST(*s1.end() == 0);
571 s1.assign("12345");
572 BOOST_TEST(s1 == "12345");
573 BOOST_TEST(*s1.end() == 0);
574 }
575 {
576 static_string<5> s1;
577 s1.assign("12345", 3);
578 BOOST_TEST(s1 == "123");
579 BOOST_TEST(*s1.end() == 0);
580 }
581 {
582 static_string<5> s1("12345");
583 static_string<3> s2;
584 s2.assign(s1.begin(), s1.begin() + 2);
585 BOOST_TEST(s2 == "12");
586 BOOST_TEST(*s2.end() == 0);
587 BOOST_TEST_THROWS(
588 (s2.assign(s1.begin(), s1.end())),
589 std::length_error);
590 }
591 {
592 static_string<5> s1;
593 s1.assign({'1', '2', '3'});
594 BOOST_TEST(s1 == "123");
595 BOOST_TEST(*s1.end() == 0);
596 static_string<1> s2;
597 BOOST_TEST_THROWS(
598 (s2.assign({'1', '2', '3'})),
599 std::length_error);
600 }
601 {
602 static_string<5> s1;
603 s1.assign(string_view("123"));
604 BOOST_TEST(s1 == "123");
605 BOOST_TEST(*s1.end() == 0);
606 s1.assign(string_view("12345"));
607 BOOST_TEST(s1 == "12345");
608 BOOST_TEST(*s1.end() == 0);
609 BOOST_TEST_THROWS(
610 s1.assign(string_view("1234567")),
611 std::length_error);
612 }
613 {
614 static_string<5> s1;
615 s1.assign(std::string("12345"), 2, 2);
616 BOOST_TEST(s1 == "34");
617 BOOST_TEST(*s1.end() == 0);
618 s1.assign(std::string("12345"), 3);
619 BOOST_TEST(s1 == "45");
620 BOOST_TEST(*s1.end() == 0);
621 static_string<2> s2;
622 BOOST_TEST_THROWS(
623 (s2.assign(std::string("12345"), 1, 3)),
624 std::length_error);
625 }
626
627 using S = static_string<400>;
628 BOOST_TEST(testAS(S(), "", 0, S()));
629 BOOST_TEST(testAS(S(), "12345", 3, S("123")));
630 BOOST_TEST(testAS(S(), "12345", 4, S("1234")));
631 BOOST_TEST(testAS(S(), "12345678901234567890", 0, S()));
632 BOOST_TEST(testAS(S(), "12345678901234567890", 1, S("1")));
633 BOOST_TEST(testAS(S(), "12345678901234567890", 3, S("123")));
634 BOOST_TEST(testAS(S(), "12345678901234567890", 20, S("12345678901234567890")));
635
636 BOOST_TEST(testAS(S("12345"), "", 0, S()));
637 BOOST_TEST(testAS(S("12345"), "12345", 5, S("12345")));
638 BOOST_TEST(testAS(S("12345"), "1234567890", 10, S("1234567890")));
639
640 BOOST_TEST(testAS(S("12345678901234567890"), "", 0, S()));
641 BOOST_TEST(testAS(S("12345678901234567890"), "12345", 5, S("12345")));
642 BOOST_TEST(testAS(S("12345678901234567890"), "12345678901234567890", 20,
643 S("12345678901234567890")));
644 BOOST_TEST(testAS(S(), "", 0, S()));
645 BOOST_TEST(testAS(S(), "12345", 3, S("123")));
646 BOOST_TEST(testAS(S(), "12345", 4, S("1234")));
647 BOOST_TEST(testAS(S(), "12345678901234567890", 0, S()));
648 BOOST_TEST(testAS(S(), "12345678901234567890", 1, S("1")));
649 BOOST_TEST(testAS(S(), "12345678901234567890", 3, S("123")));
650 BOOST_TEST(testAS(S(), "12345678901234567890", 20, S("12345678901234567890")));
651
652 BOOST_TEST(testAS(S("12345"), "", 0, S()));
653 BOOST_TEST(testAS(S("12345"), "12345", 5, S("12345")));
654 BOOST_TEST(testAS(S("12345"), "1234567890", 10, S("1234567890")));
655
656 BOOST_TEST(testAS(S("12345678901234567890"), "", 0, S()));
657 BOOST_TEST(testAS(S("12345678901234567890"), "12345", 5, S("12345")));
658 BOOST_TEST(testAS(S("12345678901234567890"), "12345678901234567890", 20,
659 S("12345678901234567890")));
660
661 S s_short = "123/";
662 S s_long = "Lorem ipsum dolor sit amet, consectetur/";
663
664 s_short.assign(s_short.data(), s_short.size());
665 BOOST_TEST(s_short == "123/");
666 s_short.assign(s_short.data() + 2, s_short.size() - 2);
667 BOOST_TEST(s_short == "3/");
668
669 s_long.assign(s_long.data(), s_long.size());
670 BOOST_TEST(s_long == "Lorem ipsum dolor sit amet, consectetur/");
671
672 s_long.assign(s_long.data() + 2, 8);
673 BOOST_TEST(s_long == "rem ipsu");
674}
675
676// done
677static
678void
679testElements()
680{
681 using cfs3 = static_string<3> const;
682
683 // at(size_type pos)
684 BOOST_TEST(static_string<3>{"abc"}.at(0) == 'a');
685 BOOST_TEST(static_string<3>{"abc"}.at(2) == 'c');
686 BOOST_TEST_THROWS(static_string<3>{""}.at(0), std::out_of_range);
687 BOOST_TEST_THROWS(static_string<3>{"abc"}.at(4), std::out_of_range);
688
689 // at(size_type pos) const
690 BOOST_TEST(cfs3{"abc"}.at(0) == 'a');
691 BOOST_TEST(cfs3{"abc"}.at(2) == 'c');
692 BOOST_TEST_THROWS(cfs3{""}.at(0), std::out_of_range);
693 BOOST_TEST_THROWS(cfs3{"abc"}.at(4), std::out_of_range);
694
695 // operator[](size_type pos)
696 BOOST_TEST(static_string<3>{"abc"}[0] == 'a');
697 BOOST_TEST(static_string<3>{"abc"}[2] == 'c');
698 BOOST_TEST(static_string<3>{"abc"}[3] == 0);
699 BOOST_TEST(static_string<3>{""}[0] == 0);
700
701 // operator[](size_type pos) const
702 BOOST_TEST(cfs3{"abc"}[0] == 'a');
703 BOOST_TEST(cfs3{"abc"}[2] == 'c');
704 BOOST_TEST(cfs3{"abc"}[3] == 0);
705 BOOST_TEST(cfs3{""}[0] == 0);
706
707 // front()
708 BOOST_TEST(static_string<3>{"a"}.front() == 'a');
709 BOOST_TEST(static_string<3>{"abc"}.front() == 'a');
710
711 // front() const
712 BOOST_TEST(cfs3{"a"}.front() == 'a');
713 BOOST_TEST(cfs3{"abc"}.front() == 'a');
714
715 // back()
716 BOOST_TEST(static_string<3>{"a"}.back() == 'a');
717 BOOST_TEST(static_string<3>{"abc"}.back() == 'c');
718
719 // back() const
720 BOOST_TEST(cfs3{"a"}.back() == 'a');
721 BOOST_TEST(cfs3{"abc"}.back() == 'c');
722
723 // data() noexcept
724 // data() const noexcept
725 // c_str() const noexcept
726 // operator string_view_type() const noexcept
727
728 //---
729
730 {
731 static_string<5> s("12345");
732 BOOST_TEST(s.at(1) == '2');
733 BOOST_TEST(s.at(4) == '5');
734 BOOST_TEST_THROWS(
735 s.at(5) = 0,
736 std::out_of_range);
737 }
738 {
739 static_string<5> const s("12345");
740 BOOST_TEST(s.at(1) == '2');
741 BOOST_TEST(s.at(4) == '5');
742 BOOST_TEST_THROWS(
743 s.at(5),
744 std::out_of_range);
745 }
746 {
747 static_string<5> s("12345");
748 BOOST_TEST(s[1] == '2');
749 BOOST_TEST(s[4] == '5');
750 s[1] = '_';
751 BOOST_TEST(s == "1_345");
752 }
753 {
754 static_string<5> const s("12345");
755 BOOST_TEST(s[1] == '2');
756 BOOST_TEST(s[4] == '5');
757 BOOST_TEST(s[5] == 0);
758 }
759 {
760 static_string<3> s("123");
761 BOOST_TEST(s.front() == '1');
762 BOOST_TEST(s.back() == '3');
763 s.front() = '_';
764 BOOST_TEST(s == "_23");
765 s.back() = '_';
766 BOOST_TEST(s == "_2_");
767 }
768 {
769 static_string<3> const s("123");
770 BOOST_TEST(s.front() == '1');
771 BOOST_TEST(s.back() == '3');
772 }
773 {
774 static_string<3> s("123");
775 BOOST_TEST(std::memcmp(
776 s.data(), "123", 3) == 0);
777 }
778 {
779 static_string<3> const s("123");
780 BOOST_TEST(std::memcmp(
781 s.data(), "123", 3) == 0);
782 }
783 {
784 static_string<3> s("123");
785 BOOST_TEST(std::memcmp(
786 s.c_str(), "123\0", 4) == 0);
787 }
788 {
789 static_string<3> s("123");
790 string_view sv = s;
791 BOOST_TEST(static_string<5>(sv) == "123");
792 }
793}
794
795// done
796static
797void
798testIterators()
799{
800 {
801 static_string<3> s;
802 BOOST_TEST(std::distance(s.begin(), s.end()) == 0);
803 BOOST_TEST(std::distance(s.rbegin(), s.rend()) == 0);
804 s = "123";
805 BOOST_TEST(std::distance(s.begin(), s.end()) == 3);
806 BOOST_TEST(std::distance(s.rbegin(), s.rend()) == 3);
807 }
808 {
809 static_string<3> const s("123");
810 BOOST_TEST(std::distance(s.begin(), s.end()) == 3);
811 BOOST_TEST(std::distance(s.cbegin(), s.cend()) == 3);
812 BOOST_TEST(std::distance(s.rbegin(), s.rend()) == 3);
813 BOOST_TEST(std::distance(s.crbegin(), s.crend()) == 3);
814 }
815}
816
817// done
818static
819void
820testCapacity()
821{
822 // empty()
823 BOOST_TEST(static_string<0>{}.empty());
824 BOOST_TEST(static_string<1>{}.empty());
825 BOOST_TEST(! static_string<1>{"a"}.empty());
826 BOOST_TEST(! static_string<3>{"abc"}.empty());
827
828 // size()
829 BOOST_TEST(static_string<0>{}.size() == 0);
830 BOOST_TEST(static_string<1>{}.size() == 0);
831 BOOST_TEST(static_string<1>{"a"}.size() == 1);
832 BOOST_TEST(static_string<3>{"abc"}.size() == 3);
833 BOOST_TEST(static_string<5>{"abc"}.size() == 3);
834
835 // length()
836 BOOST_TEST(static_string<0>{}.length() == 0);
837 BOOST_TEST(static_string<1>{}.length() == 0);
838 BOOST_TEST(static_string<1>{"a"}.length() == 1);
839 BOOST_TEST(static_string<3>{"abc"}.length() == 3);
840 BOOST_TEST(static_string<5>{"abc"}.length() == 3);
841
842 // max_size()
843 BOOST_TEST(static_string<0>{}.max_size() == 0);
844 BOOST_TEST(static_string<1>{}.max_size() == 1);
845 BOOST_TEST(static_string<1>{"a"}.max_size() == 1);
846 BOOST_TEST(static_string<3>{"abc"}.max_size() == 3);
847 BOOST_TEST(static_string<5>{"abc"}.max_size() == 5);
848
849 // reserve(std::size_t n)
850 static_string<3>{}.reserve(0);
851 static_string<3>{}.reserve(1);
852 static_string<3>{}.reserve(3);
853 BOOST_TEST_THROWS(static_string<0>{}.reserve(1), std::length_error);
854 BOOST_TEST_THROWS(static_string<3>{}.reserve(4), std::length_error);
855
856 // capacity()
857 BOOST_TEST(static_string<0>{}.capacity() == 0);
858 BOOST_TEST(static_string<1>{}.capacity() == 1);
859 BOOST_TEST(static_string<1>{"a"}.capacity() == 1);
860 BOOST_TEST(static_string<3>{"abc"}.capacity() == 3);
861 BOOST_TEST(static_string<5>{"abc"}.capacity() == 5);
862
863 //---
864
865 static_string<3> s;
866 BOOST_TEST(s.empty());
867 BOOST_TEST(s.size() == 0);
868 BOOST_TEST(s.length() == 0);
869 BOOST_TEST(s.max_size() == 3);
870 BOOST_TEST(s.capacity() == 3);
871 s = "123";
872 BOOST_TEST(! s.empty());
873 BOOST_TEST(s.size() == 3);
874 BOOST_TEST(s.length() == 3);
875 s.reserve(0);
876 s.reserve(3);
877 BOOST_TEST_THROWS(
878 s.reserve(4),
879 std::length_error);
880 s.shrink_to_fit();
881 BOOST_TEST(! s.empty());
882 BOOST_TEST(s.size() == 3);
883 BOOST_TEST(s.length() == 3);
884 BOOST_TEST(*s.end() == 0);
885}
886
887// done
888static
889void
890testClear()
891{
892 // clear()
893 static_string<3> s("123");
894 s.clear();
895 BOOST_TEST(s.empty());
896 BOOST_TEST(*s.end() == 0);
897}
898
899// done
900static
901void
902testInsert()
903{
904 using sv = string_view;
905 using S = static_string<100>;
906
907 // insert(size_type index, size_type count, CharT ch)
908 // The overload resolution is ambiguous
909 // here because 0 is also a pointer type
910 //BOOST_TEST(static_string<3>{"bc"}.insert(0, 1, 'a') == "abc");
911 BOOST_TEST(static_string<3>{"bc"}.insert(std::size_t(0), 1, 'a') == "abc");
912 BOOST_TEST(static_string<3>{"ac"}.insert(1, 1, 'b') == "abc");
913 BOOST_TEST(static_string<3>{"ab"}.insert(2, 1, 'c') == "abc");
914 BOOST_TEST_THROWS(static_string<4>{"abc"}.insert(4, 1, '*'), std::out_of_range);
915 BOOST_TEST_THROWS(static_string<3>{"abc"}.insert(1, 1, '*'), std::length_error);
916
917 // insert(size_type index, CharT const* s)
918 BOOST_TEST(static_string<3>{"bc"}.insert(0, "a") == "abc");
919 BOOST_TEST_THROWS(static_string<4>{"abc"}.insert(4, "*"), std::out_of_range);
920 BOOST_TEST_THROWS(static_string<3>{"abc"}.insert(1, "*"), std::length_error);
921
922 // insert(size_type index, CharT const* s, size_type count)
923 BOOST_TEST(static_string<4>{"ad"}.insert(1, "bcd", 2) == "abcd");
924 BOOST_TEST_THROWS(static_string<4>{"abc"}.insert(4, "*"), std::out_of_range);
925 BOOST_TEST_THROWS(static_string<3>{"abc"}.insert(1, "*"), std::length_error);
926
927 // insert(size_type index, string_view_type sv)
928 BOOST_TEST(static_string<3>{"ac"}.insert(1, sv{"b"}) == "abc");
929 BOOST_TEST_THROWS(static_string<4>{"abc"}.insert(4, sv{"*"}), std::out_of_range);
930 BOOST_TEST_THROWS(static_string<3>{"abc"}.insert(1, sv{"*"}), std::length_error);
931
932 // insert(size_type index, string_view_type sv, size_type index_str, size_type count = npos)
933 BOOST_TEST(static_string<4>{"ad"}.insert(1, sv{"abcd"}, 1, 2) == "abcd");
934 BOOST_TEST(static_string<4>{"ad"}.insert(1, sv{"abc"}, 1) == "abcd");
935 BOOST_TEST_THROWS((static_string<4>{"ad"}.insert(1, sv{"bc"}, 3, 0)), std::out_of_range);
936 BOOST_TEST_THROWS((static_string<3>{"ad"}.insert(1, sv{"bc"}, 0, 2)), std::length_error);
937
938 // insert(const_iterator pos, CharT ch)
939 {
940 static_string<3> s{"ac"};
941 BOOST_TEST(s.insert(s.begin() + 1, 'b') == s.begin() + 1);
942 BOOST_TEST(s == "abc");
943 BOOST_TEST_THROWS(s.insert(s.begin() + 1, '*'), std::length_error);
944 }
945
946 // insert(const_iterator pos, size_type count, CharT ch)
947 {
948 static_string<4> s{"ac"};
949 BOOST_TEST(s.insert(s.begin() + 1, 2, 'b') == s.begin() + 1);
950 BOOST_TEST(s == "abbc");
951 BOOST_TEST_THROWS(s.insert(s.begin() + 1, 2, '*'), std::length_error);
952 }
953
954 // insert(const_iterator pos, InputIt first, InputIt last)
955 {
956 static_string<4> const cs{"abcd"};
957 static_string<4> s{"ad"};
958 BOOST_TEST(s.insert(s.begin() + 1, cs.begin() + 1, cs.begin() + 3) == s.begin() + 1);
959 BOOST_TEST(s == "abcd");
960 }
961
962 // insert(const_iterator pos, std::initializer_list<CharT> ilist)
963 {
964 static_string<4> s{"ad"};
965 BOOST_TEST(s.insert(s.begin() + 1, {'b', 'c'}) == s.begin() + 1);
966 BOOST_TEST(s == "abcd");
967 }
968
969 // insert(size_type, static_string) checked
970 {
971 static_string<10> s1 = "ad";
972 static_string<10> s2 = "bc";
973 BOOST_TEST(s1.insert(1, s2) == "abcd");
974 }
975
976 // insert(size_type, static_string, size_type, size_type)
977 {
978 static_string<10> s1 = "ad";
979 static_string<10> s2 = "abcd";
980 BOOST_TEST(s1.insert(1, s2, 1, 2) == "abcd");
981 }
982
983 // insert(size_type index, T const& t)
984 {
985 struct T
986 {
987 operator string_view() const noexcept
988 {
989 return "b";
990 }
991 };
992 BOOST_TEST(static_string<3>{"ac"}.insert(1, T{}) == "abc");
993 BOOST_TEST_THROWS(static_string<4>{"abc"}.insert(4, T{}), std::out_of_range);
994 BOOST_TEST_THROWS(static_string<3>{"abc"}.insert(1, T{}), std::length_error);
995 }
996
997 // insert(size_type index, T const& t, size_type index_str, size_type count = npos)
998 {
999 struct T
1000 {
1001 operator string_view() const noexcept
1002 {
1003 return "abcd";
1004 }
1005 };
1006 BOOST_TEST(static_string<6>{"ae"}.insert(1, T{}, 1) == "abcde");
1007 BOOST_TEST(static_string<6>{"abe"}.insert(2, T{}, 2) == "abcde");
1008 BOOST_TEST(static_string<4>{"ac"}.insert(1, T{}, 1, 1) == "abc");
1009 BOOST_TEST(static_string<4>{"ad"}.insert(1, T{}, 1, 2) == "abcd");
1010 BOOST_TEST_THROWS(static_string<4>{"abc"}.insert(4, T{}), std::out_of_range);
1011 BOOST_TEST_THROWS(static_string<3>{"abc"}.insert(1, T{}), std::length_error);
1012 }
1013 // insert(const_iterator, InputIterator, InputIterator)
1014 {
1015 std::stringstream a("defghi");
1016 static_string<30> b = "abcjklmnop";
1017 b.insert(b.begin() + 3,
1018 std::istream_iterator<char>(a),
1019 std::istream_iterator<char>());
1020 BOOST_TEST(b == "abcdefghijklmnop");
1021 }
1022 //---
1023
1024 {
1025 // Using 7 as the size causes a miscompile in MSVC14.2 x64 Release
1026 static_string<8> s1("12345");
1027 s1.insert(2, 2, '_');
1028 BOOST_TEST(s1 == "12__345");
1029 BOOST_TEST(*s1.end() == 0);
1030 static_string<6> s2("12345");
1031 BOOST_TEST_THROWS(
1032 (s2.insert(2, 2, '_')),
1033 std::length_error);
1034 static_string<6> s3("12345");
1035 BOOST_TEST_THROWS(
1036 (s3.insert(6, 2, '_')),
1037 std::out_of_range);
1038 }
1039 {
1040 static_string<7> s1("12345");
1041 s1.insert(2, "__");
1042 BOOST_TEST(s1 == "12__345");
1043 BOOST_TEST(*s1.end() == 0);
1044 static_string<6> s2("12345");
1045 BOOST_TEST_THROWS(
1046 (s2.insert(2, "__")),
1047 std::length_error);
1048 static_string<6> s3("12345");
1049 BOOST_TEST_THROWS(
1050 (s2.insert(6, "__")),
1051 std::out_of_range);
1052 }
1053 {
1054 static_string<7> s1("12345");
1055 s1.insert(2, "TUV", 2);
1056 BOOST_TEST(s1 == "12TU345");
1057 BOOST_TEST(*s1.end() == 0);
1058 static_string<6> s2("12345");
1059 BOOST_TEST_THROWS(
1060 (s2.insert(2, "TUV", 2)),
1061 std::length_error);
1062 static_string<6> s3("12345");
1063 BOOST_TEST_THROWS(
1064 (s3.insert(6, "TUV", 2)),
1065 std::out_of_range);
1066 }
1067 {
1068 static_string<7> s1("12345");
1069 s1.insert(2, static_string<3>("TU"));
1070 BOOST_TEST(s1 == "12TU345");
1071 BOOST_TEST(*s1.end() == 0);
1072 static_string<6> s2("12345");
1073 BOOST_TEST_THROWS(
1074 (s2.insert(2, static_string<3>("TUV"))),
1075 std::length_error);
1076 static_string<6> s3("12345");
1077 BOOST_TEST_THROWS(
1078 (s3.insert(6, static_string<3>("TUV"))),
1079 std::out_of_range);
1080 }
1081 {
1082 static_string<7> s1("12345");
1083 s1.insert(2, static_string<3>("TUV"), 1);
1084 BOOST_TEST(s1 == "12UV345");
1085 BOOST_TEST(*s1.end() == 0);
1086 s1 = "12345";
1087 s1.insert(2, static_string<3>("TUV"), 1, 1);
1088 BOOST_TEST(s1 == "12U345");
1089 BOOST_TEST(*s1.end() == 0);
1090 static_string<6> s2("12345");
1091 BOOST_TEST_THROWS(
1092 (s2.insert(2, static_string<3>("TUV"), 1, 2)),
1093 std::length_error);
1094 static_string<6> s3("12345");
1095 BOOST_TEST_THROWS(
1096 (s3.insert(6, static_string<3>("TUV"), 1, 2)),
1097 std::out_of_range);
1098 }
1099 {
1100 static_string<4> s1("123");
1101 s1.insert(s1.begin() + 1, '_');
1102 BOOST_TEST(s1 == "1_23");
1103 BOOST_TEST(*s1.end() == 0);
1104 static_string<3> s2("123");
1105 BOOST_TEST_THROWS(
1106 (s2.insert(s2.begin() + 1, '_')),
1107 std::length_error);
1108 }
1109 {
1110 static_string<4> s1("12");
1111 s1.insert(s1.begin() + 1, 2, '_');
1112 BOOST_TEST(s1 == "1__2");
1113 BOOST_TEST(*s1.end() == 0);
1114 static_string<4> s2("123");
1115 BOOST_TEST_THROWS(
1116 (s2.insert(s2.begin() + 1, 2, ' ')),
1117 std::length_error);
1118 }
1119 {
1120 static_string<3> s1("123");
1121 static_string<5> s2("UV");
1122 s2.insert(s2.begin() + 1, s1.begin(), s1.end());
1123 BOOST_TEST(s2 == "U123V");
1124 BOOST_TEST(*s2.end() == 0);
1125 static_string<4> s3("UV");
1126 BOOST_TEST_THROWS(
1127 (s3.insert(s3.begin() + 1, s1.begin(), s1.end())),
1128 std::length_error);
1129 }
1130 {
1131 static_string<5> s1("123");
1132 s1.insert(1, string_view("UV"));
1133 BOOST_TEST(s1 == "1UV23");
1134 BOOST_TEST(*s1.end() == 0);
1135 static_string<4> s2("123");
1136 BOOST_TEST_THROWS(
1137 (s2.insert(1, string_view("UV"))),
1138 std::length_error);
1139 static_string<5> s3("123");
1140 BOOST_TEST_THROWS(
1141 (s3.insert(5, string_view("UV"))),
1142 std::out_of_range);
1143 }
1144 {
1145 static_string<5> s1("123");
1146 s1.insert(1, std::string("UV"));
1147 BOOST_TEST(s1 == "1UV23");
1148 BOOST_TEST(*s1.end() == 0);
1149 BOOST_TEST_THROWS(
1150 (s1.insert(1, std::string("UV"))),
1151 std::length_error);
1152 }
1153 {
1154 static_string<6> s1("123");
1155 s1.insert(1, std::string("UVX"), 1);
1156 BOOST_TEST(s1 == "1VX23");
1157 BOOST_TEST(*s1.end() == 0);
1158 s1.insert(4, std::string("PQR"), 1, 1);
1159 BOOST_TEST(s1 == "1VX2Q3");
1160 BOOST_TEST(*s1.end() == 0);
1161 BOOST_TEST_THROWS(
1162 (s1.insert(4, std::string("PQR"), 1, 1)),
1163 std::length_error);
1164 }
1165 // test insert with source inside self
1166
1167 {
1168 static_string<30> fs1 = "0123456789";
1169 BOOST_TEST(fs1.insert(0, fs1.data(), 4) == "01230123456789");
1170 }
1171 {
1172 static_string<30> fs1 = "0123456789";
1173 BOOST_TEST(fs1.insert(5, fs1.data(), 4) == "01234012356789");
1174 }
1175 {
1176 static_string<30> fs1 = "0123456789";
1177 BOOST_TEST(fs1.insert(5, fs1.data(), 10) == "01234012345678956789");
1178 }
1179 {
1180 static_string<30> fs1 = "0123456789";
1181 BOOST_TEST(fs1.insert(5, fs1.data() + 6, 3) == "0123467856789");
1182 }
1183
1184 S s_short = "123/";
1185 S s_long = "Lorem ipsum dolor sit amet, consectetur/";
1186
1187 BOOST_TEST(s_short.insert(0, s_short.data(), s_short.size()) == "123/123/");
1188 BOOST_TEST(s_short.insert(0, s_short.data(), s_short.size()) == "123/123/123/123/");
1189 BOOST_TEST(s_short.insert(0, s_short.data(), s_short.size()) == "123/123/123/123/123/123/123/123/");
1190 BOOST_TEST(s_long.insert(0, s_long.data(), s_long.size()) == "Lorem ipsum dolor sit amet, consectetur/Lorem ipsum dolor sit amet, consectetur/");
1191
1192 BOOST_TEST(testI(S("abcde"), 6, "12345", 0, S("can't happen")));
1193 BOOST_TEST(testI(S("abcde"), 6, "12345", 1, S("can't happen")));
1194 BOOST_TEST(testI(S("abcde"), 6, "12345", 2, S("can't happen")));
1195 BOOST_TEST(testI(S("abcde"), 6, "12345", 4, S("can't happen")));
1196 BOOST_TEST(testI(S("abcde"), 6, "12345", 5, S("can't happen")));
1197 BOOST_TEST(testI(S("abcde"), 6, "1234567890", 0, S("can't happen")));
1198 BOOST_TEST(testI(S("abcde"), 6, "1234567890", 1, S("can't happen")));
1199 BOOST_TEST(testI(S("abcde"), 6, "1234567890", 5, S("can't happen")));
1200 BOOST_TEST(testI(S("abcde"), 6, "1234567890", 9, S("can't happen")));
1201 BOOST_TEST(testI(S("abcde"), 6, "1234567890", 10, S("can't happen")));
1202 BOOST_TEST(testI(S("abcde"), 6, "12345678901234567890", 0, S("can't happen")));
1203 BOOST_TEST(testI(S("abcde"), 6, "12345678901234567890", 1, S("can't happen")));
1204 BOOST_TEST(testI(S("abcde"), 6, "12345678901234567890", 10, S("can't happen")));
1205 BOOST_TEST(testI(S("abcde"), 6, "12345678901234567890", 19, S("can't happen")));
1206 BOOST_TEST(testI(S("abcde"), 6, "12345678901234567890", 20, S("can't happen")));
1207 BOOST_TEST(testI(S("abcdefghij"), 0, "", 0, S("abcdefghij")));
1208 BOOST_TEST(testI(S("abcdefghij"), 0, "12345", 0, S("abcdefghij")));
1209 BOOST_TEST(testI(S("abcdefghij"), 0, "12345", 1, S("1abcdefghij")));
1210 BOOST_TEST(testI(S("abcdefghij"), 0, "12345", 2, S("12abcdefghij")));
1211 BOOST_TEST(testI(S("abcdefghij"), 0, "12345", 4, S("1234abcdefghij")));
1212 BOOST_TEST(testI(S("abcdefghij"), 0, "12345", 5, S("12345abcdefghij")));
1213 BOOST_TEST(testI(S("abcdefghij"), 0, "1234567890", 0, S("abcdefghij")));
1214 BOOST_TEST(testI(S("abcdefghij"), 0, "1234567890", 1, S("1abcdefghij")));
1215 BOOST_TEST(testI(S("abcdefghij"), 0, "1234567890", 5, S("12345abcdefghij")));
1216 BOOST_TEST(testI(S("abcdefghij"), 0, "1234567890", 9, S("123456789abcdefghij")));
1217 BOOST_TEST(testI(S("abcdefghij"), 0, "1234567890", 10, S("1234567890abcdefghij")));
1218 BOOST_TEST(testI(S("abcdefghij"), 0, "12345678901234567890", 0, S("abcdefghij")));
1219 BOOST_TEST(testI(S("abcdefghij"), 0, "12345678901234567890", 1, S("1abcdefghij")));
1220 BOOST_TEST(testI(S("abcdefghij"), 0, "12345678901234567890", 10, S("1234567890abcdefghij")));
1221 BOOST_TEST(testI(S("abcdefghij"), 0, "12345678901234567890", 19, S("1234567890123456789abcdefghij")));
1222 BOOST_TEST(testI(S("abcdefghij"), 0, "12345678901234567890", 20, S("12345678901234567890abcdefghij")));
1223 BOOST_TEST(testI(S("abcdefghij"), 1, "", 0, S("abcdefghij")));
1224 BOOST_TEST(testI(S("abcdefghij"), 1, "12345", 0, S("abcdefghij")));
1225 BOOST_TEST(testI(S("abcdefghij"), 1, "12345", 1, S("a1bcdefghij")));
1226 BOOST_TEST(testI(S("abcdefghij"), 1, "12345", 2, S("a12bcdefghij")));
1227 BOOST_TEST(testI(S("abcdefghij"), 1, "12345", 4, S("a1234bcdefghij")));
1228 BOOST_TEST(testI(S("abcdefghij"), 1, "12345", 5, S("a12345bcdefghij")));
1229 BOOST_TEST(testI(S("abcdefghij"), 1, "1234567890", 0, S("abcdefghij")));
1230 BOOST_TEST(testI(S("abcdefghij"), 1, "1234567890", 1, S("a1bcdefghij")));
1231 BOOST_TEST(testI(S("abcdefghij"), 1, "1234567890", 5, S("a12345bcdefghij")));
1232 BOOST_TEST(testI(S("abcdefghij"), 1, "1234567890", 9, S("a123456789bcdefghij")));
1233 BOOST_TEST(testI(S("abcdefghij"), 1, "1234567890", 10, S("a1234567890bcdefghij")));
1234 BOOST_TEST(testI(S("abcdefghij"), 1, "12345678901234567890", 0, S("abcdefghij")));
1235 BOOST_TEST(testI(S("abcdefghij"), 1, "12345678901234567890", 1, S("a1bcdefghij")));
1236 BOOST_TEST(testI(S("abcdefghij"), 1, "12345678901234567890", 10, S("a1234567890bcdefghij")));
1237 BOOST_TEST(testI(S("abcdefghij"), 1, "12345678901234567890", 19, S("a1234567890123456789bcdefghij")));
1238 BOOST_TEST(testI(S("abcdefghij"), 1, "12345678901234567890", 20, S("a12345678901234567890bcdefghij")));
1239 BOOST_TEST(testI(S("abcdefghij"), 5, "", 0, S("abcdefghij")));
1240 BOOST_TEST(testI(S("abcdefghij"), 5, "12345", 0, S("abcdefghij")));
1241 BOOST_TEST(testI(S("abcdefghij"), 5, "12345", 1, S("abcde1fghij")));
1242 BOOST_TEST(testI(S("abcdefghij"), 5, "12345", 2, S("abcde12fghij")));
1243 BOOST_TEST(testI(S("abcdefghij"), 5, "12345", 4, S("abcde1234fghij")));
1244 BOOST_TEST(testI(S("abcdefghij"), 5, "12345", 5, S("abcde12345fghij")));
1245 BOOST_TEST(testI(S("abcdefghij"), 5, "1234567890", 0, S("abcdefghij")));
1246 BOOST_TEST(testI(S("abcdefghij"), 5, "1234567890", 1, S("abcde1fghij")));
1247 BOOST_TEST(testI(S("abcdefghij"), 5, "1234567890", 5, S("abcde12345fghij")));
1248 BOOST_TEST(testI(S("abcdefghij"), 5, "1234567890", 9, S("abcde123456789fghij")));
1249 BOOST_TEST(testI(S("abcdefghij"), 5, "1234567890", 10, S("abcde1234567890fghij")));
1250 BOOST_TEST(testI(S("abcdefghij"), 5, "12345678901234567890", 0, S("abcdefghij")));
1251 BOOST_TEST(testI(S("abcdefghij"), 5, "12345678901234567890", 1, S("abcde1fghij")));
1252 BOOST_TEST(testI(S("abcdefghij"), 5, "12345678901234567890", 10, S("abcde1234567890fghij")));
1253 BOOST_TEST(testI(S("abcdefghij"), 5, "12345678901234567890", 19, S("abcde1234567890123456789fghij")));
1254 BOOST_TEST(testI(S("abcdefghij"), 5, "12345678901234567890", 20, S("abcde12345678901234567890fghij")));
1255 BOOST_TEST(testI(S("abcdefghij"), 9, "", 0, S("abcdefghij")));
1256 BOOST_TEST(testI(S("abcdefghij"), 9, "12345", 0, S("abcdefghij")));
1257 BOOST_TEST(testI(S("abcdefghij"), 9, "12345", 1, S("abcdefghi1j")));
1258 BOOST_TEST(testI(S("abcdefghij"), 9, "12345", 2, S("abcdefghi12j")));
1259 BOOST_TEST(testI(S("abcdefghij"), 9, "12345", 4, S("abcdefghi1234j")));
1260 BOOST_TEST(testI(S("abcdefghij"), 9, "12345", 5, S("abcdefghi12345j")));
1261 BOOST_TEST(testI(S("abcdefghij"), 9, "1234567890", 0, S("abcdefghij")));
1262 BOOST_TEST(testI(S("abcdefghij"), 9, "1234567890", 1, S("abcdefghi1j")));
1263 BOOST_TEST(testI(S("abcdefghij"), 9, "1234567890", 5, S("abcdefghi12345j")));
1264 BOOST_TEST(testI(S("abcdefghij"), 9, "1234567890", 9, S("abcdefghi123456789j")));
1265 BOOST_TEST(testI(S("abcdefghij"), 9, "1234567890", 10, S("abcdefghi1234567890j")));
1266 BOOST_TEST(testI(S("abcdefghij"), 9, "12345678901234567890", 0, S("abcdefghij")));
1267 BOOST_TEST(testI(S("abcdefghij"), 9, "12345678901234567890", 1, S("abcdefghi1j")));
1268 BOOST_TEST(testI(S("abcdefghij"), 9, "12345678901234567890", 10, S("abcdefghi1234567890j")));
1269 BOOST_TEST(testI(S("abcdefghij"), 9, "12345678901234567890", 19, S("abcdefghi1234567890123456789j")));
1270 BOOST_TEST(testI(S("abcdefghij"), 9, "12345678901234567890", 20, S("abcdefghi12345678901234567890j")));
1271 BOOST_TEST(testI(S("abcdefghij"), 10, "", 0, S("abcdefghij")));
1272 BOOST_TEST(testI(S("abcdefghij"), 10, "12345", 0, S("abcdefghij")));
1273 BOOST_TEST(testI(S("abcdefghij"), 10, "12345", 1, S("abcdefghij1")));
1274 BOOST_TEST(testI(S("abcdefghij"), 10, "12345", 2, S("abcdefghij12")));
1275 BOOST_TEST(testI(S("abcdefghij"), 10, "12345", 4, S("abcdefghij1234")));
1276 BOOST_TEST(testI(S("abcdefghij"), 10, "12345", 5, S("abcdefghij12345")));
1277 BOOST_TEST(testI(S("abcdefghij"), 10, "1234567890", 0, S("abcdefghij")));
1278 BOOST_TEST(testI(S("abcdefghij"), 10, "1234567890", 1, S("abcdefghij1")));
1279 BOOST_TEST(testI(S("abcdefghij"), 10, "1234567890", 5, S("abcdefghij12345")));
1280 BOOST_TEST(testI(S("abcdefghij"), 10, "1234567890", 9, S("abcdefghij123456789")));
1281 BOOST_TEST(testI(S("abcdefghij"), 10, "1234567890", 10, S("abcdefghij1234567890")));
1282 BOOST_TEST(testI(S("abcdefghij"), 10, "12345678901234567890", 0, S("abcdefghij")));
1283 BOOST_TEST(testI(S("abcdefghij"), 10, "12345678901234567890", 1, S("abcdefghij1")));
1284 BOOST_TEST(testI(S("abcdefghij"), 10, "12345678901234567890", 10, S("abcdefghij1234567890")));
1285 BOOST_TEST(testI(S("abcdefghij"), 10, "12345678901234567890", 19, S("abcdefghij1234567890123456789")));
1286 BOOST_TEST(testI(S("abcdefghij"), 10, "12345678901234567890", 20, S("abcdefghij12345678901234567890")));
1287 BOOST_TEST(testI(S("abcdefghij"), 11, "", 0, S("can't happen")));
1288 BOOST_TEST(testI(S("abcdefghij"), 11, "12345", 0, S("can't happen")));
1289 BOOST_TEST(testI(S("abcdefghij"), 11, "12345", 1, S("can't happen")));
1290 BOOST_TEST(testI(S("abcdefghij"), 11, "12345", 2, S("can't happen")));
1291 BOOST_TEST(testI(S("abcdefghij"), 11, "12345", 4, S("can't happen")));
1292 BOOST_TEST(testI(S("abcdefghij"), 11, "12345", 5, S("can't happen")));
1293 BOOST_TEST(testI(S("abcdefghij"), 11, "1234567890", 0, S("can't happen")));
1294 BOOST_TEST(testI(S("abcdefghij"), 11, "1234567890", 1, S("can't happen")));
1295 BOOST_TEST(testI(S("abcdefghij"), 11, "1234567890", 5, S("can't happen")));
1296 BOOST_TEST(testI(S("abcdefghij"), 11, "1234567890", 9, S("can't happen")));
1297 BOOST_TEST(testI(S("abcdefghij"), 11, "1234567890", 10, S("can't happen")));
1298 BOOST_TEST(testI(S("abcdefghij"), 11, "12345678901234567890", 0, S("can't happen")));
1299 BOOST_TEST(testI(S("abcdefghij"), 11, "12345678901234567890", 1, S("can't happen")));
1300 BOOST_TEST(testI(S("abcdefghij"), 11, "12345678901234567890", 10, S("can't happen")));
1301 BOOST_TEST(testI(S("abcdefghij"), 11, "12345678901234567890", 19, S("can't happen")));
1302 BOOST_TEST(testI(S("abcdefghij"), 11, "12345678901234567890", 20, S("can't happen")));
1303 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "", 0, S("abcdefghijklmnopqrst")));
1304 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "12345", 0, S("abcdefghijklmnopqrst")));
1305 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "12345", 1, S("1abcdefghijklmnopqrst")));
1306 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "12345", 2, S("12abcdefghijklmnopqrst")));
1307 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "12345", 4, S("1234abcdefghijklmnopqrst")));
1308 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "12345", 5, S("12345abcdefghijklmnopqrst")));
1309 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "1234567890", 0, S("abcdefghijklmnopqrst")));
1310 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "1234567890", 1, S("1abcdefghijklmnopqrst")));
1311 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "1234567890", 5, S("12345abcdefghijklmnopqrst")));
1312 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "1234567890", 9, S("123456789abcdefghijklmnopqrst")));
1313 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "1234567890", 10, S("1234567890abcdefghijklmnopqrst")));
1314 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "12345678901234567890", 0, S("abcdefghijklmnopqrst")));
1315 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "12345678901234567890", 1, S("1abcdefghijklmnopqrst")));
1316 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "12345678901234567890", 10, S("1234567890abcdefghijklmnopqrst")));
1317 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "12345678901234567890", 19, S("1234567890123456789abcdefghijklmnopqrst")));
1318 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "12345678901234567890", 20, S("12345678901234567890abcdefghijklmnopqrst")));
1319 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "", 0, S("abcdefghijklmnopqrst")));
1320 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "12345", 0, S("abcdefghijklmnopqrst")));
1321 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "12345", 1, S("a1bcdefghijklmnopqrst")));
1322 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "12345", 2, S("a12bcdefghijklmnopqrst")));
1323 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "12345", 4, S("a1234bcdefghijklmnopqrst")));
1324 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "12345", 5, S("a12345bcdefghijklmnopqrst")));
1325 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "1234567890", 0, S("abcdefghijklmnopqrst")));
1326 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "1234567890", 1, S("a1bcdefghijklmnopqrst")));
1327 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "1234567890", 5, S("a12345bcdefghijklmnopqrst")));
1328 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "1234567890", 9, S("a123456789bcdefghijklmnopqrst")));
1329 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "1234567890", 10, S("a1234567890bcdefghijklmnopqrst")));
1330 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "12345678901234567890", 0, S("abcdefghijklmnopqrst")));
1331 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "12345678901234567890", 1, S("a1bcdefghijklmnopqrst")));
1332 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "12345678901234567890", 10, S("a1234567890bcdefghijklmnopqrst")));
1333 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "12345678901234567890", 19, S("a1234567890123456789bcdefghijklmnopqrst")));
1334 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "12345678901234567890", 20, S("a12345678901234567890bcdefghijklmnopqrst")));
1335 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "", 0, S("abcdefghijklmnopqrst")));
1336 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "12345", 0, S("abcdefghijklmnopqrst")));
1337 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "12345", 1, S("abcdefghij1klmnopqrst")));
1338 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "12345", 2, S("abcdefghij12klmnopqrst")));
1339 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "12345", 4, S("abcdefghij1234klmnopqrst")));
1340 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "12345", 5, S("abcdefghij12345klmnopqrst")));
1341 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "1234567890", 0, S("abcdefghijklmnopqrst")));
1342 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "1234567890", 1, S("abcdefghij1klmnopqrst")));
1343 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "1234567890", 5, S("abcdefghij12345klmnopqrst")));
1344 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "1234567890", 9, S("abcdefghij123456789klmnopqrst")));
1345 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "1234567890", 10, S("abcdefghij1234567890klmnopqrst")));
1346 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "12345678901234567890", 0, S("abcdefghijklmnopqrst")));
1347 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "12345678901234567890", 1, S("abcdefghij1klmnopqrst")));
1348 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "12345678901234567890", 10, S("abcdefghij1234567890klmnopqrst")));
1349 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "12345678901234567890", 19, S("abcdefghij1234567890123456789klmnopqrst")));
1350 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "12345678901234567890", 20, S("abcdefghij12345678901234567890klmnopqrst")));
1351 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "", 0, S("abcdefghijklmnopqrst")));
1352 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "12345", 0, S("abcdefghijklmnopqrst")));
1353 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "12345", 1, S("abcdefghijklmnopqrs1t")));
1354 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "12345", 2, S("abcdefghijklmnopqrs12t")));
1355 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "12345", 4, S("abcdefghijklmnopqrs1234t")));
1356 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "12345", 5, S("abcdefghijklmnopqrs12345t")));
1357 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "1234567890", 0, S("abcdefghijklmnopqrst")));
1358 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "1234567890", 1, S("abcdefghijklmnopqrs1t")));
1359 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "1234567890", 5, S("abcdefghijklmnopqrs12345t")));
1360 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "1234567890", 9, S("abcdefghijklmnopqrs123456789t")));
1361 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "1234567890", 10, S("abcdefghijklmnopqrs1234567890t")));
1362 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "12345678901234567890", 0, S("abcdefghijklmnopqrst")));
1363 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "12345678901234567890", 1, S("abcdefghijklmnopqrs1t")));
1364 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "12345678901234567890", 10, S("abcdefghijklmnopqrs1234567890t")));
1365 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "12345678901234567890", 19, S("abcdefghijklmnopqrs1234567890123456789t")));
1366 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "12345678901234567890", 20, S("abcdefghijklmnopqrs12345678901234567890t")));
1367 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "", 0, S("abcdefghijklmnopqrst")));
1368 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "12345", 0, S("abcdefghijklmnopqrst")));
1369 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "12345", 1, S("abcdefghijklmnopqrst1")));
1370 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "12345", 2, S("abcdefghijklmnopqrst12")));
1371 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "12345", 4, S("abcdefghijklmnopqrst1234")));
1372 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "12345", 5, S("abcdefghijklmnopqrst12345")));
1373 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "1234567890", 0, S("abcdefghijklmnopqrst")));
1374 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "1234567890", 1, S("abcdefghijklmnopqrst1")));
1375 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "1234567890", 5, S("abcdefghijklmnopqrst12345")));
1376 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "1234567890", 9, S("abcdefghijklmnopqrst123456789")));
1377 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "1234567890", 10, S("abcdefghijklmnopqrst1234567890")));
1378 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "12345678901234567890", 0, S("abcdefghijklmnopqrst")));
1379 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "12345678901234567890", 1, S("abcdefghijklmnopqrst1")));
1380 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "12345678901234567890", 10, S("abcdefghijklmnopqrst1234567890")));
1381 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "12345678901234567890", 19, S("abcdefghijklmnopqrst1234567890123456789")));
1382 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "12345678901234567890", 20, S("abcdefghijklmnopqrst12345678901234567890")));
1383 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "", 0, S("can't happen")));
1384 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "12345", 0, S("can't happen")));
1385 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "12345", 1, S("can't happen")));
1386 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "12345", 2, S("can't happen")));
1387 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "12345", 4, S("can't happen")));
1388 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "12345", 5, S("can't happen")));
1389 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "1234567890", 0, S("can't happen")));
1390 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "1234567890", 1, S("can't happen")));
1391 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "1234567890", 5, S("can't happen")));
1392 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "1234567890", 9, S("can't happen")));
1393 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "1234567890", 10, S("can't happen")));
1394 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "12345678901234567890", 0, S("can't happen")));
1395 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "12345678901234567890", 1, S("can't happen")));
1396 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "12345678901234567890", 10, S("can't happen")));
1397 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "12345678901234567890", 19, S("can't happen")));
1398 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "12345678901234567890", 20, S("can't happen")));
1399 BOOST_TEST(testI(S("abcde"), 6, "", 0, S("can't happen")));
1400 BOOST_TEST(testI(S("abcde"), 6, "12345", 0, S("can't happen")));
1401 BOOST_TEST(testI(S("abcde"), 6, "12345", 1, S("can't happen")));
1402 BOOST_TEST(testI(S("abcde"), 6, "12345", 2, S("can't happen")));
1403 BOOST_TEST(testI(S("abcde"), 6, "12345", 4, S("can't happen")));
1404 BOOST_TEST(testI(S("abcde"), 6, "12345", 5, S("can't happen")));
1405 BOOST_TEST(testI(S("abcde"), 6, "1234567890", 0, S("can't happen")));
1406 BOOST_TEST(testI(S("abcde"), 6, "1234567890", 1, S("can't happen")));
1407 BOOST_TEST(testI(S("abcde"), 6, "1234567890", 5, S("can't happen")));
1408 BOOST_TEST(testI(S("abcde"), 6, "1234567890", 9, S("can't happen")));
1409 BOOST_TEST(testI(S("abcde"), 6, "1234567890", 10, S("can't happen")));
1410 BOOST_TEST(testI(S("abcde"), 6, "12345678901234567890", 0, S("can't happen")));
1411 BOOST_TEST(testI(S("abcde"), 6, "12345678901234567890", 1, S("can't happen")));
1412 BOOST_TEST(testI(S("abcde"), 6, "12345678901234567890", 10, S("can't happen")));
1413 BOOST_TEST(testI(S("abcde"), 6, "12345678901234567890", 19, S("can't happen")));
1414 BOOST_TEST(testI(S("abcde"), 6, "12345678901234567890", 20, S("can't happen")));
1415 BOOST_TEST(testI(S("abcdefghij"), 0, "", 0, S("abcdefghij")));
1416 BOOST_TEST(testI(S("abcdefghij"), 0, "12345", 0, S("abcdefghij")));
1417 BOOST_TEST(testI(S("abcdefghij"), 0, "12345", 1, S("1abcdefghij")));
1418 BOOST_TEST(testI(S("abcdefghij"), 0, "12345", 2, S("12abcdefghij")));
1419 BOOST_TEST(testI(S("abcdefghij"), 0, "12345", 4, S("1234abcdefghij")));
1420 BOOST_TEST(testI(S("abcdefghij"), 0, "12345", 5, S("12345abcdefghij")));
1421 BOOST_TEST(testI(S("abcdefghij"), 0, "1234567890", 0, S("abcdefghij")));
1422 BOOST_TEST(testI(S("abcdefghij"), 0, "1234567890", 1, S("1abcdefghij")));
1423 BOOST_TEST(testI(S("abcdefghij"), 0, "1234567890", 5, S("12345abcdefghij")));
1424 BOOST_TEST(testI(S("abcdefghij"), 0, "1234567890", 9, S("123456789abcdefghij")));
1425 BOOST_TEST(testI(S("abcdefghij"), 0, "1234567890", 10, S("1234567890abcdefghij")));
1426 BOOST_TEST(testI(S("abcdefghij"), 0, "12345678901234567890", 0, S("abcdefghij")));
1427 BOOST_TEST(testI(S("abcdefghij"), 0, "12345678901234567890", 1, S("1abcdefghij")));
1428 BOOST_TEST(testI(S("abcdefghij"), 0, "12345678901234567890", 10, S("1234567890abcdefghij")));
1429 BOOST_TEST(testI(S("abcdefghij"), 0, "12345678901234567890", 19, S("1234567890123456789abcdefghij")));
1430 BOOST_TEST(testI(S("abcdefghij"), 0, "12345678901234567890", 20, S("12345678901234567890abcdefghij")));
1431 BOOST_TEST(testI(S("abcdefghij"), 1, "", 0, S("abcdefghij")));
1432 BOOST_TEST(testI(S("abcdefghij"), 1, "12345", 0, S("abcdefghij")));
1433 BOOST_TEST(testI(S("abcdefghij"), 1, "12345", 1, S("a1bcdefghij")));
1434 BOOST_TEST(testI(S("abcdefghij"), 1, "12345", 2, S("a12bcdefghij")));
1435 BOOST_TEST(testI(S("abcdefghij"), 1, "12345", 4, S("a1234bcdefghij")));
1436 BOOST_TEST(testI(S("abcdefghij"), 1, "12345", 5, S("a12345bcdefghij")));
1437 BOOST_TEST(testI(S("abcdefghij"), 1, "1234567890", 0, S("abcdefghij")));
1438 BOOST_TEST(testI(S("abcdefghij"), 1, "1234567890", 1, S("a1bcdefghij")));
1439 BOOST_TEST(testI(S("abcdefghij"), 1, "1234567890", 5, S("a12345bcdefghij")));
1440 BOOST_TEST(testI(S("abcdefghij"), 1, "1234567890", 9, S("a123456789bcdefghij")));
1441 BOOST_TEST(testI(S("abcdefghij"), 1, "1234567890", 10, S("a1234567890bcdefghij")));
1442 BOOST_TEST(testI(S("abcdefghij"), 1, "12345678901234567890", 0, S("abcdefghij")));
1443 BOOST_TEST(testI(S("abcdefghij"), 1, "12345678901234567890", 1, S("a1bcdefghij")));
1444 BOOST_TEST(testI(S("abcdefghij"), 1, "12345678901234567890", 10, S("a1234567890bcdefghij")));
1445 BOOST_TEST(testI(S("abcdefghij"), 1, "12345678901234567890", 19, S("a1234567890123456789bcdefghij")));
1446 BOOST_TEST(testI(S("abcdefghij"), 1, "12345678901234567890", 20, S("a12345678901234567890bcdefghij")));
1447 BOOST_TEST(testI(S("abcdefghij"), 5, "", 0, S("abcdefghij")));
1448 BOOST_TEST(testI(S("abcdefghij"), 5, "12345", 0, S("abcdefghij")));
1449 BOOST_TEST(testI(S("abcdefghij"), 5, "12345", 1, S("abcde1fghij")));
1450 BOOST_TEST(testI(S("abcdefghij"), 5, "12345", 2, S("abcde12fghij")));
1451 BOOST_TEST(testI(S("abcdefghij"), 5, "12345", 4, S("abcde1234fghij")));
1452 BOOST_TEST(testI(S("abcdefghij"), 5, "12345", 5, S("abcde12345fghij")));
1453 BOOST_TEST(testI(S("abcdefghij"), 5, "1234567890", 0, S("abcdefghij")));
1454 BOOST_TEST(testI(S("abcdefghij"), 5, "1234567890", 1, S("abcde1fghij")));
1455 BOOST_TEST(testI(S("abcdefghij"), 5, "1234567890", 5, S("abcde12345fghij")));
1456 BOOST_TEST(testI(S("abcdefghij"), 5, "1234567890", 9, S("abcde123456789fghij")));
1457 BOOST_TEST(testI(S("abcdefghij"), 5, "1234567890", 10, S("abcde1234567890fghij")));
1458 BOOST_TEST(testI(S("abcdefghij"), 5, "12345678901234567890", 0, S("abcdefghij")));
1459 BOOST_TEST(testI(S("abcdefghij"), 5, "12345678901234567890", 1, S("abcde1fghij")));
1460 BOOST_TEST(testI(S("abcdefghij"), 5, "12345678901234567890", 10, S("abcde1234567890fghij")));
1461 BOOST_TEST(testI(S("abcdefghij"), 5, "12345678901234567890", 19, S("abcde1234567890123456789fghij")));
1462 BOOST_TEST(testI(S("abcdefghij"), 5, "12345678901234567890", 20, S("abcde12345678901234567890fghij")));
1463 BOOST_TEST(testI(S("abcdefghij"), 9, "", 0, S("abcdefghij")));
1464 BOOST_TEST(testI(S("abcdefghij"), 9, "12345", 0, S("abcdefghij")));
1465 BOOST_TEST(testI(S("abcdefghij"), 9, "12345", 1, S("abcdefghi1j")));
1466 BOOST_TEST(testI(S("abcdefghij"), 9, "12345", 2, S("abcdefghi12j")));
1467 BOOST_TEST(testI(S("abcdefghij"), 9, "12345", 4, S("abcdefghi1234j")));
1468 BOOST_TEST(testI(S("abcdefghij"), 9, "12345", 5, S("abcdefghi12345j")));
1469 BOOST_TEST(testI(S("abcdefghij"), 9, "1234567890", 0, S("abcdefghij")));
1470 BOOST_TEST(testI(S("abcdefghij"), 9, "1234567890", 1, S("abcdefghi1j")));
1471 BOOST_TEST(testI(S("abcdefghij"), 9, "1234567890", 5, S("abcdefghi12345j")));
1472 BOOST_TEST(testI(S("abcdefghij"), 9, "1234567890", 9, S("abcdefghi123456789j")));
1473 BOOST_TEST(testI(S("abcdefghij"), 9, "1234567890", 10, S("abcdefghi1234567890j")));
1474 BOOST_TEST(testI(S("abcdefghij"), 9, "12345678901234567890", 0, S("abcdefghij")));
1475 BOOST_TEST(testI(S("abcdefghij"), 9, "12345678901234567890", 1, S("abcdefghi1j")));
1476 BOOST_TEST(testI(S("abcdefghij"), 9, "12345678901234567890", 10, S("abcdefghi1234567890j")));
1477 BOOST_TEST(testI(S("abcdefghij"), 9, "12345678901234567890", 19, S("abcdefghi1234567890123456789j")));
1478 BOOST_TEST(testI(S("abcdefghij"), 9, "12345678901234567890", 20, S("abcdefghi12345678901234567890j")));
1479 BOOST_TEST(testI(S("abcdefghij"), 10, "", 0, S("abcdefghij")));
1480 BOOST_TEST(testI(S("abcdefghij"), 10, "12345", 0, S("abcdefghij")));
1481 BOOST_TEST(testI(S("abcdefghij"), 10, "12345", 1, S("abcdefghij1")));
1482 BOOST_TEST(testI(S("abcdefghij"), 10, "12345", 2, S("abcdefghij12")));
1483 BOOST_TEST(testI(S("abcdefghij"), 10, "12345", 4, S("abcdefghij1234")));
1484 BOOST_TEST(testI(S("abcdefghij"), 10, "12345", 5, S("abcdefghij12345")));
1485 BOOST_TEST(testI(S("abcdefghij"), 10, "1234567890", 0, S("abcdefghij")));
1486 BOOST_TEST(testI(S("abcdefghij"), 10, "1234567890", 1, S("abcdefghij1")));
1487 BOOST_TEST(testI(S("abcdefghij"), 10, "1234567890", 5, S("abcdefghij12345")));
1488 BOOST_TEST(testI(S("abcdefghij"), 10, "1234567890", 9, S("abcdefghij123456789")));
1489 BOOST_TEST(testI(S("abcdefghij"), 10, "1234567890", 10, S("abcdefghij1234567890")));
1490 BOOST_TEST(testI(S("abcdefghij"), 10, "12345678901234567890", 0, S("abcdefghij")));
1491 BOOST_TEST(testI(S("abcdefghij"), 10, "12345678901234567890", 1, S("abcdefghij1")));
1492 BOOST_TEST(testI(S("abcdefghij"), 10, "12345678901234567890", 10, S("abcdefghij1234567890")));
1493 BOOST_TEST(testI(S("abcdefghij"), 10, "12345678901234567890", 19, S("abcdefghij1234567890123456789")));
1494 BOOST_TEST(testI(S("abcdefghij"), 10, "12345678901234567890", 20, S("abcdefghij12345678901234567890")));
1495 BOOST_TEST(testI(S("abcdefghij"), 11, "", 0, S("can't happen")));
1496 BOOST_TEST(testI(S("abcdefghij"), 11, "12345", 0, S("can't happen")));
1497 BOOST_TEST(testI(S("abcdefghij"), 11, "12345", 1, S("can't happen")));
1498 BOOST_TEST(testI(S("abcdefghij"), 11, "12345", 2, S("can't happen")));
1499 BOOST_TEST(testI(S("abcdefghij"), 11, "12345", 4, S("can't happen")));
1500 BOOST_TEST(testI(S("abcdefghij"), 11, "12345", 5, S("can't happen")));
1501 BOOST_TEST(testI(S("abcdefghij"), 11, "1234567890", 0, S("can't happen")));
1502 BOOST_TEST(testI(S("abcdefghij"), 11, "1234567890", 1, S("can't happen")));
1503 BOOST_TEST(testI(S("abcdefghij"), 11, "1234567890", 5, S("can't happen")));
1504 BOOST_TEST(testI(S("abcdefghij"), 11, "1234567890", 9, S("can't happen")));
1505 BOOST_TEST(testI(S("abcdefghij"), 11, "1234567890", 10, S("can't happen")));
1506 BOOST_TEST(testI(S("abcdefghij"), 11, "12345678901234567890", 0, S("can't happen")));
1507 BOOST_TEST(testI(S("abcdefghij"), 11, "12345678901234567890", 1, S("can't happen")));
1508 BOOST_TEST(testI(S("abcdefghij"), 11, "12345678901234567890", 10, S("can't happen")));
1509 BOOST_TEST(testI(S("abcdefghij"), 11, "12345678901234567890", 19, S("can't happen")));
1510 BOOST_TEST(testI(S("abcdefghij"), 11, "12345678901234567890", 20, S("can't happen")));
1511 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "", 0, S("abcdefghijklmnopqrst")));
1512 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "12345", 0, S("abcdefghijklmnopqrst")));
1513 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "12345", 1, S("1abcdefghijklmnopqrst")));
1514 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "12345", 2, S("12abcdefghijklmnopqrst")));
1515 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "12345", 4, S("1234abcdefghijklmnopqrst")));
1516 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "12345", 5, S("12345abcdefghijklmnopqrst")));
1517 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "1234567890", 0, S("abcdefghijklmnopqrst")));
1518 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "1234567890", 1, S("1abcdefghijklmnopqrst")));
1519 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "1234567890", 5, S("12345abcdefghijklmnopqrst")));
1520 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "1234567890", 9, S("123456789abcdefghijklmnopqrst")));
1521 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "1234567890", 10, S("1234567890abcdefghijklmnopqrst")));
1522 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "12345678901234567890", 0, S("abcdefghijklmnopqrst")));
1523 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "12345678901234567890", 1, S("1abcdefghijklmnopqrst")));
1524 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "12345678901234567890", 10, S("1234567890abcdefghijklmnopqrst")));
1525 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "12345678901234567890", 19, S("1234567890123456789abcdefghijklmnopqrst")));
1526 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "12345678901234567890", 20, S("12345678901234567890abcdefghijklmnopqrst")));
1527 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "", 0, S("abcdefghijklmnopqrst")));
1528 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "12345", 0, S("abcdefghijklmnopqrst")));
1529 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "12345", 1, S("a1bcdefghijklmnopqrst")));
1530 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "12345", 2, S("a12bcdefghijklmnopqrst")));
1531 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "12345", 4, S("a1234bcdefghijklmnopqrst")));
1532 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "12345", 5, S("a12345bcdefghijklmnopqrst")));
1533 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "1234567890", 0, S("abcdefghijklmnopqrst")));
1534 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "1234567890", 1, S("a1bcdefghijklmnopqrst")));
1535 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "1234567890", 5, S("a12345bcdefghijklmnopqrst")));
1536 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "1234567890", 9, S("a123456789bcdefghijklmnopqrst")));
1537 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "1234567890", 10, S("a1234567890bcdefghijklmnopqrst")));
1538 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "12345678901234567890", 0, S("abcdefghijklmnopqrst")));
1539 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "12345678901234567890", 1, S("a1bcdefghijklmnopqrst")));
1540 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "12345678901234567890", 10, S("a1234567890bcdefghijklmnopqrst")));
1541 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "12345678901234567890", 19, S("a1234567890123456789bcdefghijklmnopqrst")));
1542 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "12345678901234567890", 20, S("a12345678901234567890bcdefghijklmnopqrst")));
1543 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "", 0, S("abcdefghijklmnopqrst")));
1544 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "12345", 0, S("abcdefghijklmnopqrst")));
1545 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "12345", 1, S("abcdefghij1klmnopqrst")));
1546 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "12345", 2, S("abcdefghij12klmnopqrst")));
1547 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "12345", 4, S("abcdefghij1234klmnopqrst")));
1548 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "12345", 5, S("abcdefghij12345klmnopqrst")));
1549 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "1234567890", 0, S("abcdefghijklmnopqrst")));
1550 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "1234567890", 1, S("abcdefghij1klmnopqrst")));
1551 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "1234567890", 5, S("abcdefghij12345klmnopqrst")));
1552 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "1234567890", 9, S("abcdefghij123456789klmnopqrst")));
1553 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "1234567890", 10, S("abcdefghij1234567890klmnopqrst")));
1554 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "12345678901234567890", 0, S("abcdefghijklmnopqrst")));
1555 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "12345678901234567890", 1, S("abcdefghij1klmnopqrst")));
1556 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "12345678901234567890", 10, S("abcdefghij1234567890klmnopqrst")));
1557 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "12345678901234567890", 19, S("abcdefghij1234567890123456789klmnopqrst")));
1558 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "12345678901234567890", 20, S("abcdefghij12345678901234567890klmnopqrst")));
1559 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "", 0, S("abcdefghijklmnopqrst")));
1560 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "12345", 0, S("abcdefghijklmnopqrst")));
1561 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "12345", 1, S("abcdefghijklmnopqrs1t")));
1562 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "12345", 2, S("abcdefghijklmnopqrs12t")));
1563 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "12345", 4, S("abcdefghijklmnopqrs1234t")));
1564 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "12345", 5, S("abcdefghijklmnopqrs12345t")));
1565 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "1234567890", 0, S("abcdefghijklmnopqrst")));
1566 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "1234567890", 1, S("abcdefghijklmnopqrs1t")));
1567 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "1234567890", 5, S("abcdefghijklmnopqrs12345t")));
1568 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "1234567890", 9, S("abcdefghijklmnopqrs123456789t")));
1569 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "1234567890", 10, S("abcdefghijklmnopqrs1234567890t")));
1570 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "12345678901234567890", 0, S("abcdefghijklmnopqrst")));
1571 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "12345678901234567890", 1, S("abcdefghijklmnopqrs1t")));
1572 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "12345678901234567890", 10, S("abcdefghijklmnopqrs1234567890t")));
1573 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "12345678901234567890", 19, S("abcdefghijklmnopqrs1234567890123456789t")));
1574 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "12345678901234567890", 20, S("abcdefghijklmnopqrs12345678901234567890t")));
1575 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "", 0, S("abcdefghijklmnopqrst")));
1576 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "12345", 0, S("abcdefghijklmnopqrst")));
1577 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "12345", 1, S("abcdefghijklmnopqrst1")));
1578 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "12345", 2, S("abcdefghijklmnopqrst12")));
1579 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "12345", 4, S("abcdefghijklmnopqrst1234")));
1580 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "12345", 5, S("abcdefghijklmnopqrst12345")));
1581 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "1234567890", 0, S("abcdefghijklmnopqrst")));
1582 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "1234567890", 1, S("abcdefghijklmnopqrst1")));
1583 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "1234567890", 5, S("abcdefghijklmnopqrst12345")));
1584 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "1234567890", 9, S("abcdefghijklmnopqrst123456789")));
1585 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "1234567890", 10, S("abcdefghijklmnopqrst1234567890")));
1586 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "12345678901234567890", 0, S("abcdefghijklmnopqrst")));
1587 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "12345678901234567890", 1, S("abcdefghijklmnopqrst1")));
1588 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "12345678901234567890", 10, S("abcdefghijklmnopqrst1234567890")));
1589 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "12345678901234567890", 19, S("abcdefghijklmnopqrst1234567890123456789")));
1590 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "12345678901234567890", 20, S("abcdefghijklmnopqrst12345678901234567890")));
1591 BOOST_TEST(testI(S("abcde"), 6, "", 0, S("can't happen")));
1592 BOOST_TEST(testI(S("abcde"), 6, "12345", 0, S("can't happen")));
1593 BOOST_TEST(testI(S("abcde"), 6, "12345", 1, S("can't happen")));
1594 BOOST_TEST(testI(S("abcde"), 6, "12345", 2, S("can't happen")));
1595 BOOST_TEST(testI(S("abcde"), 6, "12345", 4, S("can't happen")));
1596 BOOST_TEST(testI(S("abcde"), 6, "12345", 5, S("can't happen")));
1597 BOOST_TEST(testI(S("abcde"), 6, "1234567890", 0, S("can't happen")));
1598 BOOST_TEST(testI(S("abcde"), 6, "1234567890", 1, S("can't happen")));
1599 BOOST_TEST(testI(S("abcde"), 6, "1234567890", 5, S("can't happen")));
1600 BOOST_TEST(testI(S("abcde"), 6, "1234567890", 9, S("can't happen")));
1601 BOOST_TEST(testI(S("abcde"), 6, "1234567890", 10, S("can't happen")));
1602 BOOST_TEST(testI(S("abcde"), 6, "12345678901234567890", 0, S("can't happen")));
1603 BOOST_TEST(testI(S("abcde"), 6, "12345678901234567890", 1, S("can't happen")));
1604 BOOST_TEST(testI(S("abcde"), 6, "12345678901234567890", 10, S("can't happen")));
1605 BOOST_TEST(testI(S("abcde"), 6, "12345678901234567890", 19, S("can't happen")));
1606 BOOST_TEST(testI(S("abcde"), 6, "12345678901234567890", 20, S("can't happen")));
1607 BOOST_TEST(testI(S("abcdefghij"), 11, "", 0, S("can't happen")));
1608 BOOST_TEST(testI(S("abcdefghij"), 11, "12345", 0, S("can't happen")));
1609 BOOST_TEST(testI(S("abcdefghij"), 11, "12345", 1, S("can't happen")));
1610 BOOST_TEST(testI(S("abcdefghij"), 11, "12345", 2, S("can't happen")));
1611 BOOST_TEST(testI(S("abcdefghij"), 11, "12345", 4, S("can't happen")));
1612 BOOST_TEST(testI(S("abcdefghij"), 11, "12345", 5, S("can't happen")));
1613 BOOST_TEST(testI(S("abcdefghij"), 11, "1234567890", 0, S("can't happen")));
1614 BOOST_TEST(testI(S("abcdefghij"), 11, "1234567890", 1, S("can't happen")));
1615 BOOST_TEST(testI(S("abcdefghij"), 11, "1234567890", 5, S("can't happen")));
1616 BOOST_TEST(testI(S("abcdefghij"), 11, "1234567890", 9, S("can't happen")));
1617 BOOST_TEST(testI(S("abcdefghij"), 11, "1234567890", 10, S("can't happen")));
1618 BOOST_TEST(testI(S("abcdefghij"), 11, "12345678901234567890", 0, S("can't happen")));
1619 BOOST_TEST(testI(S("abcdefghij"), 11, "12345678901234567890", 1, S("can't happen")));
1620 BOOST_TEST(testI(S("abcdefghij"), 11, "12345678901234567890", 10, S("can't happen")));
1621 BOOST_TEST(testI(S("abcdefghij"), 11, "12345678901234567890", 19, S("can't happen")));
1622 BOOST_TEST(testI(S("abcdefghij"), 11, "12345678901234567890", 20, S("can't happen")));
1623 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "", 0, S("can't happen")));
1624 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "12345", 0, S("can't happen")));
1625 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "12345", 1, S("can't happen")));
1626 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "12345", 2, S("can't happen")));
1627 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "12345", 4, S("can't happen")));
1628 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "12345", 5, S("can't happen")));
1629 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "1234567890", 0, S("can't happen")));
1630 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "1234567890", 1, S("can't happen")));
1631 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "1234567890", 5, S("can't happen")));
1632 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "1234567890", 9, S("can't happen")));
1633 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "1234567890", 10, S("can't happen")));
1634 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "12345678901234567890", 0, S("can't happen")));
1635 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "12345678901234567890", 1, S("can't happen")));
1636 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "12345678901234567890", 10, S("can't happen")));
1637 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "12345678901234567890", 19, S("can't happen")));
1638 BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "12345678901234567890", 20, S("can't happen")));
1639}
1640
1641// done
1642static
1643void
1644testErase()
1645{
1646 // erase(size_type index = 0, size_type count = npos)
1647 BOOST_TEST(static_string<3>{"abc"}.erase() == "");
1648 BOOST_TEST(static_string<3>{"abc"}.erase(1) == "a");
1649 BOOST_TEST(static_string<3>{"abc"}.erase(2) == "ab");
1650 BOOST_TEST(static_string<3>{"abc"}.erase(1, 1) == "ac");
1651 BOOST_TEST(static_string<3>{"abc"}.erase(0, 2) == "c");
1652 BOOST_TEST(static_string<3>{"abc"}.erase(3, 0) == "abc");
1653 BOOST_TEST(static_string<3>{"abc"}.erase(3, 4) == "abc");
1654 BOOST_TEST_THROWS(static_string<3>{"abc"}.erase(4, 0), std::out_of_range);
1655
1656 // erase(const_iterator pos)
1657 {
1658 static_string<3> s{"abc"};
1659 BOOST_TEST(s.erase(s.begin() + 1) == s.begin() + 1);
1660 BOOST_TEST(s == "ac");
1661 }
1662
1663 // erase(const_iterator first, const_iterator last)
1664 {
1665 static_string<4> s{"abcd"};
1666 BOOST_TEST(s.erase(s.begin() + 1, s.begin() + 3) == s.begin() + 1);
1667 BOOST_TEST(s == "ad");
1668 }
1669
1670 //---
1671
1672 {
1673 static_string<9> s1("123456789");
1674 BOOST_TEST(s1.erase(1, 1) == "13456789");
1675 BOOST_TEST(s1 == "13456789");
1676 BOOST_TEST(*s1.end() == 0);
1677 BOOST_TEST(s1.erase(5) == "13456");
1678 BOOST_TEST(s1 == "13456");
1679 BOOST_TEST(*s1.end() == 0);
1680 BOOST_TEST_THROWS(
1681 s1.erase(7),
1682 std::out_of_range);
1683 }
1684 {
1685 static_string<9> s1("123456789");
1686 BOOST_TEST(*s1.erase(s1.begin() + 5) == '7');
1687 BOOST_TEST(s1 == "12345789");
1688 BOOST_TEST(*s1.end() == 0);
1689 }
1690 {
1691 static_string<9> s1("123456789");
1692 BOOST_TEST(*s1.erase(
1693 s1.begin() + 5, s1.begin() + 7) == '8');
1694 BOOST_TEST(s1 == "1234589");
1695 BOOST_TEST(*s1.end() == 0);
1696 }
1697
1698 using S = static_string<400>;
1699
1700 BOOST_TEST(testE(S(""), 0, 0, S("")));
1701 BOOST_TEST(testE(S(""), 0, 1, S("")));
1702 BOOST_TEST(testE(S(""), 1, 0, S("can't happen")));
1703 BOOST_TEST(testE(S("abcde"), 0, 0, S("abcde")));
1704 BOOST_TEST(testE(S("abcde"), 0, 1, S("bcde")));
1705 BOOST_TEST(testE(S("abcde"), 0, 2, S("cde")));
1706 BOOST_TEST(testE(S("abcde"), 0, 4, S("e")));
1707 BOOST_TEST(testE(S("abcde"), 0, 5, S("")));
1708 BOOST_TEST(testE(S("abcde"), 0, 6, S("")));
1709 BOOST_TEST(testE(S("abcde"), 1, 0, S("abcde")));
1710 BOOST_TEST(testE(S("abcde"), 1, 1, S("acde")));
1711 BOOST_TEST(testE(S("abcde"), 1, 2, S("ade")));
1712 BOOST_TEST(testE(S("abcde"), 1, 3, S("ae")));
1713 BOOST_TEST(testE(S("abcde"), 1, 4, S("a")));
1714 BOOST_TEST(testE(S("abcde"), 1, 5, S("a")));
1715 BOOST_TEST(testE(S("abcde"), 2, 0, S("abcde")));
1716 BOOST_TEST(testE(S("abcde"), 2, 1, S("abde")));
1717 BOOST_TEST(testE(S("abcde"), 2, 2, S("abe")));
1718 BOOST_TEST(testE(S("abcde"), 2, 3, S("ab")));
1719 BOOST_TEST(testE(S("abcde"), 2, 4, S("ab")));
1720 BOOST_TEST(testE(S("abcde"), 4, 0, S("abcde")));
1721 BOOST_TEST(testE(S("abcde"), 4, 1, S("abcd")));
1722 BOOST_TEST(testE(S("abcde"), 4, 2, S("abcd")));
1723 BOOST_TEST(testE(S("abcde"), 5, 0, S("abcde")));
1724 BOOST_TEST(testE(S("abcde"), 5, 1, S("abcde")));
1725 BOOST_TEST(testE(S("abcde"), 6, 0, S("can't happen")));
1726 BOOST_TEST(testE(S("abcdefghij"), 0, 0, S("abcdefghij")));
1727 BOOST_TEST(testE(S("abcdefghij"), 0, 1, S("bcdefghij")));
1728 BOOST_TEST(testE(S("abcdefghij"), 0, 5, S("fghij")));
1729 BOOST_TEST(testE(S("abcdefghij"), 0, 9, S("j")));
1730 BOOST_TEST(testE(S("abcdefghij"), 0, 10, S("")));
1731 BOOST_TEST(testE(S("abcdefghij"), 0, 11, S("")));
1732 BOOST_TEST(testE(S("abcdefghij"), 1, 0, S("abcdefghij")));
1733 BOOST_TEST(testE(S("abcdefghij"), 1, 1, S("acdefghij")));
1734 BOOST_TEST(testE(S("abcdefghij"), 1, 4, S("afghij")));
1735 BOOST_TEST(testE(S("abcdefghij"), 1, 8, S("aj")));
1736 BOOST_TEST(testE(S("abcdefghij"), 1, 9, S("a")));
1737 BOOST_TEST(testE(S("abcdefghij"), 1, 10, S("a")));
1738 BOOST_TEST(testE(S("abcdefghij"), 5, 0, S("abcdefghij")));
1739 BOOST_TEST(testE(S("abcdefghij"), 5, 1, S("abcdeghij")));
1740 BOOST_TEST(testE(S("abcdefghij"), 5, 2, S("abcdehij")));
1741 BOOST_TEST(testE(S("abcdefghij"), 5, 4, S("abcdej")));
1742 BOOST_TEST(testE(S("abcdefghij"), 5, 5, S("abcde")));
1743 BOOST_TEST(testE(S("abcdefghij"), 5, 6, S("abcde")));
1744 BOOST_TEST(testE(S("abcdefghij"), 9, 0, S("abcdefghij")));
1745 BOOST_TEST(testE(S("abcdefghij"), 9, 1, S("abcdefghi")));
1746 BOOST_TEST(testE(S("abcdefghij"), 9, 2, S("abcdefghi")));
1747 BOOST_TEST(testE(S("abcdefghij"), 10, 0, S("abcdefghij")));
1748 BOOST_TEST(testE(S("abcdefghij"), 10, 1, S("abcdefghij")));
1749 BOOST_TEST(testE(S("abcdefghij"), 11, 0, S("can't happen")));
1750 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst")));
1751 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 0, 1, S("bcdefghijklmnopqrst")));
1752 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 0, 10, S("klmnopqrst")));
1753 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 0, 19, S("t")));
1754 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 0, 20, S("")));
1755 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 0, 21, S("")));
1756 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst")));
1757 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 1, 1, S("acdefghijklmnopqrst")));
1758 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 1, 9, S("aklmnopqrst")));
1759 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 1, 18, S("at")));
1760 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 1, 19, S("a")));
1761 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 1, 20, S("a")));
1762 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst")));
1763 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijlmnopqrst")));
1764 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijpqrst")));
1765 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijt")));
1766 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij")));
1767 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij")));
1768 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst")));
1769 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrs")));
1770 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrs")));
1771 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst")));
1772 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst")));
1773 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 21, 0, S("can't happen")));
1774
1775 BOOST_TEST(testE(S(""), 0, 0, S("")));
1776 BOOST_TEST(testE(S(""), 0, 1, S("")));
1777 BOOST_TEST(testE(S(""), 1, 0, S("can't happen")));
1778 BOOST_TEST(testE(S("abcde"), 0, 0, S("abcde")));
1779 BOOST_TEST(testE(S("abcde"), 0, 1, S("bcde")));
1780 BOOST_TEST(testE(S("abcde"), 0, 2, S("cde")));
1781 BOOST_TEST(testE(S("abcde"), 0, 4, S("e")));
1782 BOOST_TEST(testE(S("abcde"), 0, 5, S("")));
1783 BOOST_TEST(testE(S("abcde"), 0, 6, S("")));
1784 BOOST_TEST(testE(S("abcde"), 1, 0, S("abcde")));
1785 BOOST_TEST(testE(S("abcde"), 1, 1, S("acde")));
1786 BOOST_TEST(testE(S("abcde"), 1, 2, S("ade")));
1787 BOOST_TEST(testE(S("abcde"), 1, 3, S("ae")));
1788 BOOST_TEST(testE(S("abcde"), 1, 4, S("a")));
1789 BOOST_TEST(testE(S("abcde"), 1, 5, S("a")));
1790 BOOST_TEST(testE(S("abcde"), 2, 0, S("abcde")));
1791 BOOST_TEST(testE(S("abcde"), 2, 1, S("abde")));
1792 BOOST_TEST(testE(S("abcde"), 2, 2, S("abe")));
1793 BOOST_TEST(testE(S("abcde"), 2, 3, S("ab")));
1794 BOOST_TEST(testE(S("abcde"), 2, 4, S("ab")));
1795 BOOST_TEST(testE(S("abcde"), 4, 0, S("abcde")));
1796 BOOST_TEST(testE(S("abcde"), 4, 1, S("abcd")));
1797 BOOST_TEST(testE(S("abcde"), 4, 2, S("abcd")));
1798 BOOST_TEST(testE(S("abcde"), 5, 0, S("abcde")));
1799 BOOST_TEST(testE(S("abcde"), 5, 1, S("abcde")));
1800 BOOST_TEST(testE(S("abcde"), 6, 0, S("can't happen")));
1801 BOOST_TEST(testE(S("abcdefghij"), 0, 0, S("abcdefghij")));
1802 BOOST_TEST(testE(S("abcdefghij"), 0, 1, S("bcdefghij")));
1803 BOOST_TEST(testE(S("abcdefghij"), 0, 5, S("fghij")));
1804 BOOST_TEST(testE(S("abcdefghij"), 0, 9, S("j")));
1805 BOOST_TEST(testE(S("abcdefghij"), 0, 10, S("")));
1806 BOOST_TEST(testE(S("abcdefghij"), 0, 11, S("")));
1807 BOOST_TEST(testE(S("abcdefghij"), 1, 0, S("abcdefghij")));
1808 BOOST_TEST(testE(S("abcdefghij"), 1, 1, S("acdefghij")));
1809 BOOST_TEST(testE(S("abcdefghij"), 1, 4, S("afghij")));
1810 BOOST_TEST(testE(S("abcdefghij"), 1, 8, S("aj")));
1811 BOOST_TEST(testE(S("abcdefghij"), 1, 9, S("a")));
1812 BOOST_TEST(testE(S("abcdefghij"), 1, 10, S("a")));
1813 BOOST_TEST(testE(S("abcdefghij"), 5, 0, S("abcdefghij")));
1814 BOOST_TEST(testE(S("abcdefghij"), 5, 1, S("abcdeghij")));
1815 BOOST_TEST(testE(S("abcdefghij"), 5, 2, S("abcdehij")));
1816 BOOST_TEST(testE(S("abcdefghij"), 5, 4, S("abcdej")));
1817 BOOST_TEST(testE(S("abcdefghij"), 5, 5, S("abcde")));
1818 BOOST_TEST(testE(S("abcdefghij"), 5, 6, S("abcde")));
1819 BOOST_TEST(testE(S("abcdefghij"), 9, 0, S("abcdefghij")));
1820 BOOST_TEST(testE(S("abcdefghij"), 9, 1, S("abcdefghi")));
1821 BOOST_TEST(testE(S("abcdefghij"), 9, 2, S("abcdefghi")));
1822 BOOST_TEST(testE(S("abcdefghij"), 10, 0, S("abcdefghij")));
1823 BOOST_TEST(testE(S("abcdefghij"), 10, 1, S("abcdefghij")));
1824 BOOST_TEST(testE(S("abcdefghij"), 11, 0, S("can't happen")));
1825 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst")));
1826 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 0, 1, S("bcdefghijklmnopqrst")));
1827 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 0, 10, S("klmnopqrst")));
1828 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 0, 19, S("t")));
1829 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 0, 20, S("")));
1830 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 0, 21, S("")));
1831 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst")));
1832 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 1, 1, S("acdefghijklmnopqrst")));
1833 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 1, 9, S("aklmnopqrst")));
1834 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 1, 18, S("at")));
1835 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 1, 19, S("a")));
1836 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 1, 20, S("a")));
1837 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst")));
1838 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijlmnopqrst")));
1839 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijpqrst")));
1840 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijt")));
1841 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij")));
1842 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij")));
1843 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst")));
1844 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrs")));
1845 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrs")));
1846 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst")));
1847 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst")));
1848 BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 21, 0, S("can't happen")));
1849}
1850
1851// done
1852static
1853void
1854testPushBack()
1855{
1856 // push_back(CharT ch);
1857 {
1858 static_string<2> s;
1859 s.push_back('a');
1860 BOOST_TEST(s == "a");
1861 s.push_back('b');
1862 BOOST_TEST(s == "ab");
1863 BOOST_TEST_THROWS(s.push_back('c'), std::length_error);
1864 }
1865
1866 //---
1867
1868 {
1869 static_string<3> s1("12");
1870 s1.push_back('3');
1871 BOOST_TEST(s1 == "123");
1872 BOOST_TEST_THROWS(
1873 s1.push_back('4'),
1874 std::length_error);
1875 static_string<0> s2;
1876 BOOST_TEST_THROWS(
1877 s2.push_back('_'),
1878 std::length_error);
1879 }
1880}
1881
1882// done
1883static
1884void
1885testPopBack()
1886{
1887 // pop_back()
1888 {
1889 static_string<3> s{"abc"};
1890 BOOST_TEST(*s.end() == 0);
1891 s.pop_back();
1892 BOOST_TEST(s == "ab");
1893 BOOST_TEST(*s.end() == 0);
1894 s.pop_back();
1895 BOOST_TEST(s == "a");
1896 BOOST_TEST(*s.end() == 0);
1897 s.pop_back();
1898 BOOST_TEST(s.empty());
1899 BOOST_TEST(*s.end() == 0);
1900 }
1901
1902 //---
1903
1904 {
1905 static_string<3> s1("123");
1906 s1.pop_back();
1907 BOOST_TEST(s1 == "12");
1908 BOOST_TEST(*s1.end() == 0);
1909 s1.pop_back();
1910 BOOST_TEST(s1 == "1");
1911 BOOST_TEST(*s1.end() == 0);
1912 s1.pop_back();
1913 BOOST_TEST(s1.empty());
1914 BOOST_TEST(*s1.end() == 0);
1915 }
1916}
1917
1918// done
1919static
1920void
1921testAppend()
1922{
1923 using S = static_string<400>;
1924 using sv = string_view;
1925
1926 // append(size_type count, CharT ch)
1927 BOOST_TEST(static_string<1>{}.append(1, 'a') == "a");
1928 BOOST_TEST(static_string<2>{}.append(2, 'a') == "aa");
1929 BOOST_TEST(static_string<2>{"a"}.append(1, 'b') == "ab");
1930 BOOST_TEST_THROWS(static_string<2>{"ab"}.append(1, 'c'), std::length_error);
1931
1932 // append(string_view_type sv)
1933 BOOST_TEST(static_string<3>{"a"}.append(sv{"bc"}) == "abc");
1934 BOOST_TEST(static_string<3>{"ab"}.append(sv{"c"}) == "abc");
1935 BOOST_TEST_THROWS(static_string<3>{"abc"}.append(sv{"*"}), std::length_error);
1936
1937 // append(string_view_type sv, size_type pos, size_type count = npos)
1938 BOOST_TEST(static_string<3>{"a"}.append(sv{"abc"}, 1) == "abc");
1939 BOOST_TEST(static_string<3>{"a"}.append(sv{"abc"}, 1, 2) == "abc");
1940 BOOST_TEST_THROWS(static_string<3>{"abc"}.append(sv{"a"}, 2, 1), std::out_of_range);
1941 BOOST_TEST_THROWS(static_string<3>{"abc"}.append(sv{"abcd"}, 1, 2), std::length_error);
1942
1943 // append(CharT const* s, size_type count)
1944 BOOST_TEST(static_string<3>{"a"}.append("bc", 0) == "a");
1945 BOOST_TEST(static_string<3>{"a"}.append("bc", 2) == "abc");
1946 BOOST_TEST_THROWS(static_string<3>{"abc"}.append("bc", 2), std::length_error);
1947
1948 // append(CharT const* s)
1949 BOOST_TEST(static_string<3>{"a"}.append("bc") == "abc");
1950 BOOST_TEST_THROWS(static_string<3>{"abc"}.append("bc"), std::length_error);
1951
1952 // append(InputIt first, InputIt last)
1953 {
1954 static_string<4> const cs{"abcd"};
1955 static_string<4> s{"ad"};
1956 BOOST_TEST(static_string<4>{"ab"}.append(
1957 cs.begin() + 2, cs.begin() + 4) == "abcd");
1958 BOOST_TEST_THROWS(static_string<2>{"ab"}.append(
1959 cs.begin() + 2, cs.begin() + 4), std::length_error);
1960 }
1961
1962 // append(std::initializer_list<CharT> ilist)
1963 BOOST_TEST(static_string<4>{"ab"}.append({'c', 'd'}) == "abcd");
1964 BOOST_TEST_THROWS(static_string<3>{"ab"}.append({'c', 'd'}), std::length_error);
1965
1966 // append(T const& t)
1967 {
1968 struct T
1969 {
1970 operator string_view() const noexcept
1971 {
1972 return "c";
1973 }
1974 };
1975 BOOST_TEST(static_string<3>{"ab"}.append(T{}) == "abc");
1976 BOOST_TEST_THROWS(static_string<3>{"abc"}.append(T{}), std::length_error);
1977 }
1978
1979 // append(T const& t, size_type pos, size_type count = npos)
1980 {
1981 struct T
1982 {
1983 operator string_view() const noexcept
1984 {
1985 return "abcd";
1986 }
1987 };
1988 BOOST_TEST(static_string<4>{"ab"}.append(T{}, 2) == "abcd");
1989 BOOST_TEST(static_string<3>{"a"}.append(T{}, 1, 2) == "abc");
1990 BOOST_TEST_THROWS(static_string<4>{"abc"}.append(T{}, 5), std::out_of_range);
1991 BOOST_TEST_THROWS(static_string<3>{"abc"}.append(T{}, 3, 1), std::length_error);
1992 }
1993
1994 //---
1995
1996 {
1997 static_string<3> s1("1");
1998 s1.append(2, '_');
1999 BOOST_TEST(s1 == "1__");
2000 BOOST_TEST(*s1.end() == 0);
2001 static_string<2> s2("1");
2002 BOOST_TEST_THROWS(
2003 (s2.append(2, '_')),
2004 std::length_error);
2005 }
2006 {
2007 static_string<2> s1("__");
2008 static_string<3> s2("1");
2009 s2.append(s1);
2010 BOOST_TEST(s2 == "1__");
2011 BOOST_TEST(*s2.end() == 0);
2012 static_string<2> s3("1");
2013 BOOST_TEST_THROWS(
2014 s3.append(s1),
2015 std::length_error);
2016 }
2017 {
2018 static_string<3> s1("XYZ");
2019 static_string<4> s2("12");
2020 s2.append(s1, 1);
2021 BOOST_TEST(s2 == "12YZ");
2022 BOOST_TEST(*s2.end() == 0);
2023 static_string<3> s3("12");
2024 s3.append(s1, 1, 1);
2025 BOOST_TEST(s3 == "12Y");
2026 BOOST_TEST(*s3.end() == 0);
2027 static_string<3> s4("12");
2028 BOOST_TEST_THROWS(
2029 (s4.append(s1, 4)),
2030 std::out_of_range);
2031 static_string<3> s5("12");
2032 BOOST_TEST_THROWS(
2033 (s5.append(s1, 1, 2)),
2034 std::length_error);
2035 }
2036 {
2037 static_string<4> s1("12");
2038 s1.append("XYZ", 2);
2039 BOOST_TEST(s1 == "12XY");
2040 BOOST_TEST(*s1.end() == 0);
2041 static_string<3> s3("12");
2042 BOOST_TEST_THROWS(
2043 (s3.append("XYZ", 2)),
2044 std::length_error);
2045 }
2046 {
2047 static_string<5> s1("12");
2048 s1.append("XYZ");
2049 BOOST_TEST(s1 == "12XYZ");
2050 BOOST_TEST(*s1.end() == 0);
2051 static_string<4> s2("12");
2052 BOOST_TEST_THROWS(
2053 s2.append("XYZ"),
2054 std::length_error);
2055 }
2056 {
2057 static_string<3> s1("XYZ");
2058 static_string<5> s2("12");
2059 s2.append(s1.begin(), s1.end());
2060 BOOST_TEST(s2 == "12XYZ");
2061 BOOST_TEST(*s2.end() == 0);
2062 static_string<4> s3("12");
2063 BOOST_TEST_THROWS(
2064 s3.append(s1.begin(), s1.end()),
2065 std::length_error);
2066 }
2067 {
2068 static_string<5> s1("123");
2069 s1.append({'X', 'Y'});
2070 BOOST_TEST(s1 == "123XY");
2071 BOOST_TEST(*s1.end() == 0);
2072 static_string<4> s2("123");
2073 BOOST_TEST_THROWS(
2074 s2.append({'X', 'Y'}),
2075 std::length_error);
2076 }
2077 {
2078 string_view s1("XYZ");
2079 static_string<5> s2("12");
2080 s2.append(s1);
2081 BOOST_TEST(s2 == "12XYZ");
2082 BOOST_TEST(*s2.end() == 0);
2083 static_string<4> s3("12");
2084 BOOST_TEST_THROWS(
2085 s3.append(s1),
2086 std::length_error);
2087 }
2088 {
2089 static_string<6> s1("123");
2090 s1.append(std::string("UVX"), 1);
2091 BOOST_TEST(s1 == "123VX");
2092 BOOST_TEST(*s1.end() == 0);
2093 s1.append(std::string("PQR"), 1, 1);
2094 BOOST_TEST(s1 == "123VXQ");
2095 BOOST_TEST(*s1.end() == 0);
2096 static_string<3> s2("123");
2097 BOOST_TEST_THROWS(
2098 (s2.append(std::string("PQR"), 1, 1)),
2099 std::length_error);
2100 }
2101 BOOST_TEST(testA(S(), "", 0, S()));
2102 BOOST_TEST(testA(S(), "12345", 3, S("123")));
2103 BOOST_TEST(testA(S(), "12345", 4, S("1234")));
2104 BOOST_TEST(testA(S(), "12345678901234567890", 0, S()));
2105 BOOST_TEST(testA(S(), "12345678901234567890", 1, S("1")));
2106 BOOST_TEST(testA(S(), "12345678901234567890", 3, S("123")));
2107 BOOST_TEST(testA(S(), "12345678901234567890", 20, S("12345678901234567890")));
2108
2109 BOOST_TEST(testA(S("12345"), "", 0, S("12345")));
2110 BOOST_TEST(testA(S("12345"), "12345", 5, S("1234512345")));
2111 BOOST_TEST(testA(S("12345"), "1234567890", 10, S("123451234567890")));
2112
2113 BOOST_TEST(testA(S("12345678901234567890"), "", 0, S("12345678901234567890")));
2114 BOOST_TEST(testA(S("12345678901234567890"), "12345", 5, S("1234567890123456789012345")));
2115 BOOST_TEST(testA(S("12345678901234567890"), "12345678901234567890", 20,
2116 S("1234567890123456789012345678901234567890")));
2117
2118 S s_short = "123/";
2119
2120 s_short.append(s_short.data(), s_short.size());
2121 BOOST_TEST(s_short == "123/123/");
2122 s_short.append(s_short.data(), s_short.size());
2123 BOOST_TEST(s_short == "123/123/123/123/");
2124 s_short.append(s_short.data(), s_short.size());
2125 BOOST_TEST(s_short == "123/123/123/123/123/123/123/123/");
2126}
2127
2128// done
2129static
2130void
2131testPlusEquals()
2132{
2133 using sv = string_view;
2134
2135 // operator+=(CharT ch)
2136 BOOST_TEST((static_string<3>{"ab"} += 'c') == "abc");
2137 BOOST_TEST_THROWS((static_string<3>{"abc"} += '*'), std::length_error);
2138
2139 // operator+=(CharT const* s)
2140 BOOST_TEST((static_string<3>{"a"} += "bc") == "abc");
2141 BOOST_TEST_THROWS((static_string<3>{"abc"} += "*"), std::length_error);
2142
2143 // operator+=(std::initializer_list<CharT> init)
2144 BOOST_TEST((static_string<3>{"a"} += {'b', 'c'}) == "abc");
2145 BOOST_TEST_THROWS((static_string<3>{"abc"} += {'*', '*'}), std::length_error);
2146
2147 // operator+=(string_view_type const& s)
2148 BOOST_TEST((static_string<3>{"a"} += sv{"bc"}) == "abc");
2149 BOOST_TEST_THROWS((static_string<3>{"abc"} += sv{"*"}), std::length_error);
2150
2151 //---
2152
2153 {
2154 static_string<2> s1("__");
2155 static_string<3> s2("1");
2156 s2 += s1;
2157 BOOST_TEST(s2 == "1__");
2158 BOOST_TEST(*s2.end() == 0);
2159 static_string<2> s3("1");
2160 BOOST_TEST_THROWS(
2161 s3 += s1,
2162 std::length_error);
2163 }
2164 {
2165 static_string<3> s1("12");
2166 s1 += '3';
2167 BOOST_TEST(s1 == "123");
2168 BOOST_TEST_THROWS(
2169 s1 += '4',
2170 std::length_error);
2171 }
2172 {
2173 static_string<4> s1("12");
2174 s1 += "34";
2175 BOOST_TEST(s1 == "1234");
2176 BOOST_TEST_THROWS(
2177 s1 += "5",
2178 std::length_error);
2179 }
2180 {
2181 static_string<4> s1("12");
2182 s1 += {'3', '4'};
2183 BOOST_TEST(s1 == "1234");
2184 BOOST_TEST_THROWS(
2185 (s1 += {'5'}),
2186 std::length_error);
2187 }
2188 {
2189 string_view s1("34");
2190 static_string<4> s2("12");
2191 s2 += s1;
2192 BOOST_TEST(s2 == "1234");
2193 BOOST_TEST_THROWS(
2194 s2 += s1,
2195 std::length_error);
2196 }
2197}
2198
2199// done
2200void
2201testCompare()
2202{
2203 using str1 = static_string<1>;
2204 using str2 = static_string<2>;
2205 {
2206 str1 s1;
2207 str2 s2;
2208 s1 = "1";
2209 s2 = "22";
2210 BOOST_TEST(s1.compare(s2) < 0);
2211 BOOST_TEST(s2.compare(s1) > 0);
2212
2213 BOOST_TEST(s1.compare(0, 1, s2) < 0);
2214 BOOST_TEST(s2.compare(0, 2, s1) > 0);
2215
2216 BOOST_TEST(s1.compare(0, 2, s2, 0, 1) < 0);
2217 BOOST_TEST(s2.compare(0, 1, s1, 0, 2) > 0);
2218
2219 BOOST_TEST(s1.compare(s2.data()) < 0);
2220 BOOST_TEST(s2.compare(s1.data()) > 0);
2221
2222 BOOST_TEST(s1.compare(0, 2, s2.data()) < 0);
2223 BOOST_TEST(s2.compare(0, 1, s1.data()) > 0);
2224
2225 BOOST_TEST(s1.compare(s2.subview()) < 0);
2226 BOOST_TEST(s2.compare(s1.subview()) > 0);
2227
2228 BOOST_TEST(s1.compare(0, 2, s2.subview()) < 0);
2229 BOOST_TEST(s2.compare(0, 1, s1.subview()) > 0);
2230
2231 BOOST_TEST(s1.compare(0, 2, s2.subview(), 0, 1) < 0);
2232 BOOST_TEST(s2.compare(0, 1, s1.subview(), 0, 2) > 0);
2233
2234 BOOST_TEST(s1 < "10");
2235 BOOST_TEST(s2 > "1");
2236 BOOST_TEST("10" > s1);
2237 BOOST_TEST("1" < s2);
2238 BOOST_TEST(s1 < "20");
2239 BOOST_TEST(s2 > "1");
2240 BOOST_TEST(s2 > "2");
2241 }
2242 {
2243 str2 s1("x");
2244 str2 s2("x");
2245 BOOST_TEST(s1 == s2);
2246 BOOST_TEST(s1 <= s2);
2247 BOOST_TEST(s1 >= s2);
2248 BOOST_TEST(! (s1 < s2));
2249 BOOST_TEST(! (s1 > s2));
2250 BOOST_TEST(! (s1 != s2));
2251 }
2252 {
2253 str1 s1("x");
2254 str2 s2("x");
2255 BOOST_TEST(s1 == s2);
2256 BOOST_TEST(s1 <= s2);
2257 BOOST_TEST(s1 >= s2);
2258 BOOST_TEST(! (s1 < s2));
2259 BOOST_TEST(! (s1 > s2));
2260 BOOST_TEST(! (s1 != s2));
2261 }
2262 {
2263 str2 s("x");
2264 BOOST_TEST(s == "x");
2265 BOOST_TEST(s <= "x");
2266 BOOST_TEST(s >= "x");
2267 BOOST_TEST(! (s < "x"));
2268 BOOST_TEST(! (s > "x"));
2269 BOOST_TEST(! (s != "x"));
2270 BOOST_TEST("x" == s);
2271 BOOST_TEST("x" <= s);
2272 BOOST_TEST("x" >= s);
2273 BOOST_TEST(! ("x" < s));
2274 BOOST_TEST(! ("x" > s));
2275 BOOST_TEST(! ("x" != s));
2276 }
2277 {
2278 str2 s("x");
2279 BOOST_TEST(s <= "y");
2280 BOOST_TEST(s < "y");
2281 BOOST_TEST(s != "y");
2282 BOOST_TEST(! (s == "y"));
2283 BOOST_TEST(! (s >= "y"));
2284 BOOST_TEST(! (s > "x"));
2285 BOOST_TEST("y" >= s);
2286 BOOST_TEST("y" > s);
2287 BOOST_TEST("y" != s);
2288 BOOST_TEST(! ("y" == s));
2289 BOOST_TEST(! ("y" <= s));
2290 BOOST_TEST(! ("y" < s));
2291 }
2292 {
2293 str1 s1("x");
2294 str2 s2("y");
2295 BOOST_TEST(s1 <= s2);
2296 BOOST_TEST(s1 < s2);
2297 BOOST_TEST(s1 != s2);
2298 BOOST_TEST(! (s1 == s2));
2299 BOOST_TEST(! (s1 >= s2));
2300 BOOST_TEST(! (s1 > s2));
2301 }
2302 {
2303 str1 s1("x");
2304 str2 s2("xx");
2305 BOOST_TEST(s1 < s2);
2306 BOOST_TEST(s2 > s1);
2307 }
2308 {
2309 str1 s1("x");
2310 str2 s2("yy");
2311 BOOST_TEST(s1 < s2);
2312 BOOST_TEST(s2 > s1);
2313 }
2314
2315 using S = static_string<400>;
2316 BOOST_TEST(testC(S(""), 0, 0, "", 0, 0));
2317 BOOST_TEST(testC(S(""), 0, 0, "abcde", 0, 0));
2318 BOOST_TEST(testC(S(""), 0, 0, "abcde", 1, -1));
2319 BOOST_TEST(testC(S(""), 0, 0, "abcde", 2, -2));
2320 BOOST_TEST(testC(S(""), 0, 0, "abcde", 4, -4));
2321 BOOST_TEST(testC(S(""), 0, 0, "abcde", 5, -5));
2322 BOOST_TEST(testC(S(""), 0, 0, "abcdefghij", 0, 0));
2323 BOOST_TEST(testC(S(""), 0, 0, "abcdefghij", 1, -1));
2324 BOOST_TEST(testC(S(""), 0, 0, "abcdefghij", 5, -5));
2325 BOOST_TEST(testC(S(""), 0, 0, "abcdefghij", 9, -9));
2326 BOOST_TEST(testC(S(""), 0, 0, "abcdefghij", 10, -10));
2327 BOOST_TEST(testC(S(""), 0, 0, "abcdefghijklmnopqrst", 0, 0));
2328 BOOST_TEST(testC(S(""), 0, 0, "abcdefghijklmnopqrst", 1, -1));
2329 BOOST_TEST(testC(S(""), 0, 0, "abcdefghijklmnopqrst", 10, -10));
2330 BOOST_TEST(testC(S(""), 0, 0, "abcdefghijklmnopqrst", 19, -19));
2331 BOOST_TEST(testC(S(""), 0, 0, "abcdefghijklmnopqrst", 20, -20));
2332 BOOST_TEST(testC(S(""), 0, 1, "", 0, 0));
2333 BOOST_TEST(testC(S(""), 0, 1, "abcde", 0, 0));
2334 BOOST_TEST(testC(S(""), 0, 1, "abcde", 1, -1));
2335 BOOST_TEST(testC(S(""), 0, 1, "abcde", 2, -2));
2336 BOOST_TEST(testC(S(""), 0, 1, "abcde", 4, -4));
2337 BOOST_TEST(testC(S(""), 0, 1, "abcde", 5, -5));
2338 BOOST_TEST(testC(S(""), 0, 1, "abcdefghij", 0, 0));
2339 BOOST_TEST(testC(S(""), 0, 1, "abcdefghij", 1, -1));
2340 BOOST_TEST(testC(S(""), 0, 1, "abcdefghij", 5, -5));
2341 BOOST_TEST(testC(S(""), 0, 1, "abcdefghij", 9, -9));
2342 BOOST_TEST(testC(S(""), 0, 1, "abcdefghij", 10, -10));
2343 BOOST_TEST(testC(S(""), 0, 1, "abcdefghijklmnopqrst", 0, 0));
2344 BOOST_TEST(testC(S(""), 0, 1, "abcdefghijklmnopqrst", 1, -1));
2345 BOOST_TEST(testC(S(""), 0, 1, "abcdefghijklmnopqrst", 10, -10));
2346 BOOST_TEST(testC(S(""), 0, 1, "abcdefghijklmnopqrst", 19, -19));
2347 BOOST_TEST(testC(S(""), 0, 1, "abcdefghijklmnopqrst", 20, -20));
2348 BOOST_TEST(testC(S(""), 1, 0, "", 0, 0));
2349 BOOST_TEST(testC(S(""), 1, 0, "abcde", 0, 0));
2350 BOOST_TEST(testC(S(""), 1, 0, "abcde", 1, 0));
2351 BOOST_TEST(testC(S(""), 1, 0, "abcde", 2, 0));
2352 BOOST_TEST(testC(S(""), 1, 0, "abcde", 4, 0));
2353 BOOST_TEST(testC(S(""), 1, 0, "abcde", 5, 0));
2354 BOOST_TEST(testC(S(""), 1, 0, "abcdefghij", 0, 0));
2355 BOOST_TEST(testC(S(""), 1, 0, "abcdefghij", 1, 0));
2356 BOOST_TEST(testC(S(""), 1, 0, "abcdefghij", 5, 0));
2357 BOOST_TEST(testC(S(""), 1, 0, "abcdefghij", 9, 0));
2358 BOOST_TEST(testC(S(""), 1, 0, "abcdefghij", 10, 0));
2359 BOOST_TEST(testC(S(""), 1, 0, "abcdefghijklmnopqrst", 0, 0));
2360 BOOST_TEST(testC(S(""), 1, 0, "abcdefghijklmnopqrst", 1, 0));
2361 BOOST_TEST(testC(S(""), 1, 0, "abcdefghijklmnopqrst", 10, 0));
2362 BOOST_TEST(testC(S(""), 1, 0, "abcdefghijklmnopqrst", 19, 0));
2363 BOOST_TEST(testC(S(""), 1, 0, "abcdefghijklmnopqrst", 20, 0));
2364 BOOST_TEST(testC(S("abcde"), 0, 0, "", 0, 0));
2365 BOOST_TEST(testC(S("abcde"), 0, 0, "abcde", 0, 0));
2366 BOOST_TEST(testC(S("abcde"), 0, 0, "abcde", 1, -1));
2367 BOOST_TEST(testC(S("abcde"), 0, 0, "abcde", 2, -2));
2368 BOOST_TEST(testC(S("abcde"), 0, 0, "abcde", 4, -4));
2369 BOOST_TEST(testC(S("abcde"), 0, 0, "abcde", 5, -5));
2370 BOOST_TEST(testC(S("abcde"), 0, 0, "abcdefghij", 0, 0));
2371 BOOST_TEST(testC(S("abcde"), 0, 0, "abcdefghij", 1, -1));
2372 BOOST_TEST(testC(S("abcde"), 0, 0, "abcdefghij", 5, -5));
2373 BOOST_TEST(testC(S("abcde"), 0, 0, "abcdefghij", 9, -9));
2374 BOOST_TEST(testC(S("abcde"), 0, 0, "abcdefghij", 10, -10));
2375 BOOST_TEST(testC(S("abcde"), 0, 0, "abcdefghijklmnopqrst", 0, 0));
2376 BOOST_TEST(testC(S("abcde"), 0, 0, "abcdefghijklmnopqrst", 1, -1));
2377 BOOST_TEST(testC(S("abcde"), 0, 0, "abcdefghijklmnopqrst", 10, -10));
2378 BOOST_TEST(testC(S("abcde"), 0, 0, "abcdefghijklmnopqrst", 19, -19));
2379 BOOST_TEST(testC(S("abcde"), 0, 0, "abcdefghijklmnopqrst", 20, -20));
2380 BOOST_TEST(testC(S("abcde"), 0, 1, "", 0, 1));
2381 BOOST_TEST(testC(S("abcde"), 0, 1, "abcde", 0, 1));
2382 BOOST_TEST(testC(S("abcde"), 0, 1, "abcde", 1, 0));
2383 BOOST_TEST(testC(S("abcde"), 0, 1, "abcde", 2, -1));
2384 BOOST_TEST(testC(S("abcde"), 0, 1, "abcde", 4, -3));
2385 BOOST_TEST(testC(S("abcde"), 0, 1, "abcde", 5, -4));
2386 BOOST_TEST(testC(S("abcde"), 0, 1, "abcdefghij", 0, 1));
2387 BOOST_TEST(testC(S("abcde"), 0, 1, "abcdefghij", 1, 0));
2388 BOOST_TEST(testC(S("abcde"), 0, 1, "abcdefghij", 5, -4));
2389 BOOST_TEST(testC(S("abcde"), 0, 1, "abcdefghij", 9, -8));
2390 BOOST_TEST(testC(S("abcde"), 0, 1, "abcdefghij", 10, -9));
2391 BOOST_TEST(testC(S("abcde"), 0, 1, "abcdefghijklmnopqrst", 0, 1));
2392 BOOST_TEST(testC(S("abcde"), 0, 1, "abcdefghijklmnopqrst", 1, 0));
2393 BOOST_TEST(testC(S("abcde"), 0, 1, "abcdefghijklmnopqrst", 10, -9));
2394 BOOST_TEST(testC(S("abcde"), 0, 1, "abcdefghijklmnopqrst", 19, -18));
2395 BOOST_TEST(testC(S("abcde"), 0, 1, "abcdefghijklmnopqrst", 20, -19));
2396 BOOST_TEST(testC(S("abcde"), 0, 2, "", 0, 2));
2397 BOOST_TEST(testC(S("abcde"), 0, 2, "abcde", 0, 2));
2398 BOOST_TEST(testC(S("abcde"), 0, 2, "abcde", 1, 1));
2399 BOOST_TEST(testC(S("abcde"), 0, 2, "abcde", 2, 0));
2400 BOOST_TEST(testC(S("abcde"), 0, 2, "abcde", 4, -2));
2401 BOOST_TEST(testC(S("abcde"), 0, 2, "abcde", 5, -3));
2402 BOOST_TEST(testC(S("abcde"), 0, 2, "abcdefghij", 0, 2));
2403 BOOST_TEST(testC(S("abcde"), 0, 2, "abcdefghij", 1, 1));
2404 BOOST_TEST(testC(S("abcde"), 0, 2, "abcdefghij", 5, -3));
2405 BOOST_TEST(testC(S("abcde"), 0, 2, "abcdefghij", 9, -7));
2406 BOOST_TEST(testC(S("abcde"), 0, 2, "abcdefghij", 10, -8));
2407 BOOST_TEST(testC(S("abcde"), 0, 2, "abcdefghijklmnopqrst", 0, 2));
2408 BOOST_TEST(testC(S("abcde"), 0, 2, "abcdefghijklmnopqrst", 1, 1));
2409 BOOST_TEST(testC(S("abcde"), 0, 2, "abcdefghijklmnopqrst", 10, -8));
2410 BOOST_TEST(testC(S("abcde"), 0, 2, "abcdefghijklmnopqrst", 19, -17));
2411 BOOST_TEST(testC(S("abcde"), 0, 2, "abcdefghijklmnopqrst", 20, -18));
2412 BOOST_TEST(testC(S("abcde"), 0, 4, "", 0, 4));
2413 BOOST_TEST(testC(S("abcde"), 0, 4, "abcde", 0, 4));
2414 BOOST_TEST(testC(S("abcde"), 0, 4, "abcde", 1, 3));
2415 BOOST_TEST(testC(S("abcde"), 0, 4, "abcde", 2, 2));
2416 BOOST_TEST(testC(S("abcde"), 0, 4, "abcde", 4, 0));
2417 BOOST_TEST(testC(S("abcde"), 0, 4, "abcde", 5, -1));
2418 BOOST_TEST(testC(S("abcde"), 0, 4, "abcdefghij", 0, 4));
2419 BOOST_TEST(testC(S("abcde"), 0, 4, "abcdefghij", 1, 3));
2420 BOOST_TEST(testC(S("abcde"), 0, 4, "abcdefghij", 5, -1));
2421 BOOST_TEST(testC(S("abcde"), 0, 4, "abcdefghij", 9, -5));
2422 BOOST_TEST(testC(S("abcde"), 0, 4, "abcdefghij", 10, -6));
2423 BOOST_TEST(testC(S("abcde"), 0, 4, "abcdefghijklmnopqrst", 0, 4));
2424 BOOST_TEST(testC(S("abcde"), 0, 4, "abcdefghijklmnopqrst", 1, 3));
2425 BOOST_TEST(testC(S("abcde"), 0, 4, "abcdefghijklmnopqrst", 10, -6));
2426 BOOST_TEST(testC(S("abcde"), 0, 4, "abcdefghijklmnopqrst", 19, -15));
2427 BOOST_TEST(testC(S("abcde"), 0, 4, "abcdefghijklmnopqrst", 20, -16));
2428 BOOST_TEST(testC(S("abcde"), 0, 5, "", 0, 5));
2429 BOOST_TEST(testC(S("abcde"), 0, 5, "abcde", 0, 5));
2430 BOOST_TEST(testC(S("abcde"), 0, 5, "abcde", 1, 4));
2431 BOOST_TEST(testC(S("abcde"), 0, 5, "abcde", 2, 3));
2432 BOOST_TEST(testC(S("abcde"), 0, 5, "abcde", 4, 1));
2433 BOOST_TEST(testC(S("abcde"), 0, 5, "abcde", 5, 0));
2434 BOOST_TEST(testC(S("abcde"), 0, 5, "abcdefghij", 0, 5));
2435 BOOST_TEST(testC(S("abcde"), 0, 5, "abcdefghij", 1, 4));
2436 BOOST_TEST(testC(S("abcde"), 0, 5, "abcdefghij", 5, 0));
2437 BOOST_TEST(testC(S("abcde"), 0, 5, "abcdefghij", 9, -4));
2438 BOOST_TEST(testC(S("abcde"), 0, 5, "abcdefghij", 10, -5));
2439 BOOST_TEST(testC(S("abcde"), 0, 5, "abcdefghijklmnopqrst", 0, 5));
2440 BOOST_TEST(testC(S("abcde"), 0, 5, "abcdefghijklmnopqrst", 1, 4));
2441 BOOST_TEST(testC(S("abcde"), 0, 5, "abcdefghijklmnopqrst", 10, -5));
2442 BOOST_TEST(testC(S("abcde"), 0, 5, "abcdefghijklmnopqrst", 19, -14));
2443 BOOST_TEST(testC(S("abcde"), 0, 5, "abcdefghijklmnopqrst", 20, -15));
2444 BOOST_TEST(testC(S("abcde"), 0, 6, "", 0, 5));
2445 BOOST_TEST(testC(S("abcde"), 0, 6, "abcde", 0, 5));
2446 BOOST_TEST(testC(S("abcde"), 0, 6, "abcde", 1, 4));
2447 BOOST_TEST(testC(S("abcde"), 0, 6, "abcde", 2, 3));
2448 BOOST_TEST(testC(S("abcde"), 0, 6, "abcde", 4, 1));
2449 BOOST_TEST(testC(S("abcde"), 0, 6, "abcde", 5, 0));
2450 BOOST_TEST(testC(S("abcde"), 0, 6, "abcdefghij", 0, 5));
2451 BOOST_TEST(testC(S("abcde"), 0, 6, "abcdefghij", 1, 4));
2452 BOOST_TEST(testC(S("abcde"), 0, 6, "abcdefghij", 5, 0));
2453 BOOST_TEST(testC(S("abcde"), 0, 6, "abcdefghij", 9, -4));
2454 BOOST_TEST(testC(S("abcde"), 0, 6, "abcdefghij", 10, -5));
2455 BOOST_TEST(testC(S("abcde"), 0, 6, "abcdefghijklmnopqrst", 0, 5));
2456 BOOST_TEST(testC(S("abcde"), 0, 6, "abcdefghijklmnopqrst", 1, 4));
2457 BOOST_TEST(testC(S("abcde"), 0, 6, "abcdefghijklmnopqrst", 10, -5));
2458 BOOST_TEST(testC(S("abcde"), 0, 6, "abcdefghijklmnopqrst", 19, -14));
2459 BOOST_TEST(testC(S("abcde"), 0, 6, "abcdefghijklmnopqrst", 20, -15));
2460 BOOST_TEST(testC(S("abcde"), 1, 0, "", 0, 0));
2461 BOOST_TEST(testC(S("abcde"), 1, 0, "abcde", 0, 0));
2462 BOOST_TEST(testC(S("abcde"), 1, 0, "abcde", 1, -1));
2463 BOOST_TEST(testC(S("abcde"), 1, 0, "abcde", 2, -2));
2464 BOOST_TEST(testC(S("abcde"), 1, 0, "abcde", 4, -4));
2465 BOOST_TEST(testC(S("abcde"), 1, 0, "abcde", 5, -5));
2466 BOOST_TEST(testC(S("abcde"), 1, 0, "abcdefghij", 0, 0));
2467 BOOST_TEST(testC(S("abcde"), 1, 0, "abcdefghij", 1, -1));
2468 BOOST_TEST(testC(S("abcde"), 1, 0, "abcdefghij", 5, -5));
2469 BOOST_TEST(testC(S("abcde"), 1, 0, "abcdefghij", 9, -9));
2470 BOOST_TEST(testC(S("abcde"), 1, 0, "abcdefghij", 10, -10));
2471 BOOST_TEST(testC(S("abcde"), 1, 0, "abcdefghijklmnopqrst", 0, 0));
2472 BOOST_TEST(testC(S("abcde"), 1, 0, "abcdefghijklmnopqrst", 1, -1));
2473 BOOST_TEST(testC(S("abcde"), 1, 0, "abcdefghijklmnopqrst", 10, -10));
2474 BOOST_TEST(testC(S("abcde"), 1, 0, "abcdefghijklmnopqrst", 19, -19));
2475 BOOST_TEST(testC(S("abcde"), 1, 0, "abcdefghijklmnopqrst", 20, -20));
2476 BOOST_TEST(testC(S("abcde"), 1, 1, "", 0, 1));
2477 BOOST_TEST(testC(S("abcde"), 1, 1, "abcde", 0, 1));
2478 BOOST_TEST(testC(S("abcde"), 1, 1, "abcde", 1, 1));
2479 BOOST_TEST(testC(S("abcde"), 1, 1, "abcde", 2, 1));
2480 BOOST_TEST(testC(S("abcde"), 1, 1, "abcde", 4, 1));
2481 BOOST_TEST(testC(S("abcde"), 1, 1, "abcde", 5, 1));
2482 BOOST_TEST(testC(S("abcde"), 1, 1, "abcdefghij", 0, 1));
2483 BOOST_TEST(testC(S("abcde"), 1, 1, "abcdefghij", 1, 1));
2484 BOOST_TEST(testC(S("abcde"), 1, 1, "abcdefghij", 5, 1));
2485 BOOST_TEST(testC(S("abcde"), 1, 1, "abcdefghij", 9, 1));
2486 BOOST_TEST(testC(S("abcde"), 1, 1, "abcdefghij", 10, 1));
2487 BOOST_TEST(testC(S("abcde"), 1, 1, "abcdefghijklmnopqrst", 0, 1));
2488 BOOST_TEST(testC(S("abcde"), 1, 1, "abcdefghijklmnopqrst", 1, 1));
2489 BOOST_TEST(testC(S("abcde"), 1, 1, "abcdefghijklmnopqrst", 10, 1));
2490 BOOST_TEST(testC(S("abcde"), 1, 1, "abcdefghijklmnopqrst", 19, 1));
2491 BOOST_TEST(testC(S("abcde"), 1, 1, "abcdefghijklmnopqrst", 20, 1));
2492 BOOST_TEST(testC(S("abcde"), 1, 2, "", 0, 2));
2493 BOOST_TEST(testC(S("abcde"), 1, 2, "abcde", 0, 2));
2494 BOOST_TEST(testC(S("abcde"), 1, 2, "abcde", 1, 1));
2495 BOOST_TEST(testC(S("abcde"), 1, 2, "abcde", 2, 1));
2496 BOOST_TEST(testC(S("abcde"), 1, 2, "abcde", 4, 1));
2497 BOOST_TEST(testC(S("abcde"), 1, 2, "abcde", 5, 1));
2498 BOOST_TEST(testC(S("abcde"), 1, 2, "abcdefghij", 0, 2));
2499 BOOST_TEST(testC(S("abcde"), 1, 2, "abcdefghij", 1, 1));
2500 BOOST_TEST(testC(S("abcde"), 1, 2, "abcdefghij", 5, 1));
2501 BOOST_TEST(testC(S("abcde"), 1, 2, "abcdefghij", 9, 1));
2502 BOOST_TEST(testC(S("abcde"), 1, 2, "abcdefghij", 10, 1));
2503 BOOST_TEST(testC(S("abcde"), 1, 2, "abcdefghijklmnopqrst", 0, 2));
2504 BOOST_TEST(testC(S("abcde"), 1, 2, "abcdefghijklmnopqrst", 1, 1));
2505 BOOST_TEST(testC(S("abcde"), 1, 2, "abcdefghijklmnopqrst", 10, 1));
2506 BOOST_TEST(testC(S("abcde"), 1, 2, "abcdefghijklmnopqrst", 19, 1));
2507 BOOST_TEST(testC(S("abcde"), 1, 2, "abcdefghijklmnopqrst", 20, 1));
2508 BOOST_TEST(testC(S("abcde"), 1, 3, "", 0, 3));
2509 BOOST_TEST(testC(S("abcde"), 1, 3, "abcde", 0, 3));
2510 BOOST_TEST(testC(S("abcde"), 1, 3, "abcde", 1, 1));
2511 BOOST_TEST(testC(S("abcde"), 1, 3, "abcde", 2, 1));
2512 BOOST_TEST(testC(S("abcde"), 1, 3, "abcde", 4, 1));
2513 BOOST_TEST(testC(S("abcde"), 1, 3, "abcde", 5, 1));
2514 BOOST_TEST(testC(S("abcde"), 1, 3, "abcdefghij", 0, 3));
2515 BOOST_TEST(testC(S("abcde"), 1, 3, "abcdefghij", 1, 1));
2516 BOOST_TEST(testC(S("abcde"), 1, 3, "abcdefghij", 5, 1));
2517 BOOST_TEST(testC(S("abcde"), 1, 3, "abcdefghij", 9, 1));
2518 BOOST_TEST(testC(S("abcde"), 1, 3, "abcdefghij", 10, 1));
2519 BOOST_TEST(testC(S("abcde"), 1, 3, "abcdefghijklmnopqrst", 0, 3));
2520 BOOST_TEST(testC(S("abcde"), 1, 3, "abcdefghijklmnopqrst", 1, 1));
2521 BOOST_TEST(testC(S("abcde"), 1, 3, "abcdefghijklmnopqrst", 10, 1));
2522 BOOST_TEST(testC(S("abcde"), 1, 3, "abcdefghijklmnopqrst", 19, 1));
2523 BOOST_TEST(testC(S("abcde"), 1, 3, "abcdefghijklmnopqrst", 20, 1));
2524 BOOST_TEST(testC(S("abcde"), 1, 4, "", 0, 4));
2525 BOOST_TEST(testC(S("abcde"), 1, 4, "abcde", 0, 4));
2526 BOOST_TEST(testC(S("abcde"), 1, 4, "abcde", 1, 1));
2527 BOOST_TEST(testC(S("abcde"), 1, 4, "abcde", 2, 1));
2528 BOOST_TEST(testC(S("abcde"), 1, 4, "abcde", 4, 1));
2529 BOOST_TEST(testC(S("abcde"), 1, 4, "abcde", 5, 1));
2530 BOOST_TEST(testC(S("abcde"), 1, 4, "abcdefghij", 0, 4));
2531 BOOST_TEST(testC(S("abcde"), 1, 4, "abcdefghij", 1, 1));
2532 BOOST_TEST(testC(S("abcde"), 1, 4, "abcdefghij", 5, 1));
2533 BOOST_TEST(testC(S("abcde"), 1, 4, "abcdefghij", 9, 1));
2534 BOOST_TEST(testC(S("abcde"), 1, 4, "abcdefghij", 10, 1));
2535 BOOST_TEST(testC(S("abcde"), 1, 4, "abcdefghijklmnopqrst", 0, 4));
2536 BOOST_TEST(testC(S("abcde"), 1, 4, "abcdefghijklmnopqrst", 1, 1));
2537 BOOST_TEST(testC(S("abcde"), 1, 4, "abcdefghijklmnopqrst", 10, 1));
2538 BOOST_TEST(testC(S("abcde"), 1, 4, "abcdefghijklmnopqrst", 19, 1));
2539 BOOST_TEST(testC(S("abcde"), 1, 4, "abcdefghijklmnopqrst", 20, 1));
2540 BOOST_TEST(testC(S("abcde"), 1, 5, "", 0, 4));
2541 BOOST_TEST(testC(S("abcde"), 1, 5, "abcde", 0, 4));
2542 BOOST_TEST(testC(S("abcde"), 1, 5, "abcde", 1, 1));
2543 BOOST_TEST(testC(S("abcde"), 1, 5, "abcde", 2, 1));
2544 BOOST_TEST(testC(S("abcde"), 1, 5, "abcde", 4, 1));
2545 BOOST_TEST(testC(S("abcde"), 1, 5, "abcde", 5, 1));
2546 BOOST_TEST(testC(S("abcde"), 1, 5, "abcdefghij", 0, 4));
2547 BOOST_TEST(testC(S("abcde"), 1, 5, "abcdefghij", 1, 1));
2548 BOOST_TEST(testC(S("abcde"), 1, 5, "abcdefghij", 5, 1));
2549 BOOST_TEST(testC(S("abcde"), 1, 5, "abcdefghij", 9, 1));
2550 BOOST_TEST(testC(S("abcde"), 1, 5, "abcdefghij", 10, 1));
2551 BOOST_TEST(testC(S("abcde"), 1, 5, "abcdefghijklmnopqrst", 0, 4));
2552 BOOST_TEST(testC(S("abcde"), 1, 5, "abcdefghijklmnopqrst", 1, 1));
2553 BOOST_TEST(testC(S("abcde"), 1, 5, "abcdefghijklmnopqrst", 10, 1));
2554 BOOST_TEST(testC(S("abcde"), 1, 5, "abcdefghijklmnopqrst", 19, 1));
2555 BOOST_TEST(testC(S("abcde"), 1, 5, "abcdefghijklmnopqrst", 20, 1));
2556 BOOST_TEST(testC(S("abcde"), 2, 0, "", 0, 0));
2557 BOOST_TEST(testC(S("abcde"), 2, 0, "abcde", 0, 0));
2558 BOOST_TEST(testC(S("abcde"), 2, 0, "abcde", 1, -1));
2559 BOOST_TEST(testC(S("abcde"), 2, 0, "abcde", 2, -2));
2560 BOOST_TEST(testC(S("abcde"), 2, 0, "abcde", 4, -4));
2561 BOOST_TEST(testC(S("abcde"), 2, 0, "abcde", 5, -5));
2562 BOOST_TEST(testC(S("abcde"), 2, 0, "abcdefghij", 0, 0));
2563 BOOST_TEST(testC(S("abcde"), 2, 0, "abcdefghij", 1, -1));
2564 BOOST_TEST(testC(S("abcde"), 2, 0, "abcdefghij", 5, -5));
2565 BOOST_TEST(testC(S("abcde"), 2, 0, "abcdefghij", 9, -9));
2566 BOOST_TEST(testC(S("abcde"), 2, 0, "abcdefghij", 10, -10));
2567 BOOST_TEST(testC(S("abcde"), 2, 0, "abcdefghijklmnopqrst", 0, 0));
2568 BOOST_TEST(testC(S("abcde"), 2, 0, "abcdefghijklmnopqrst", 1, -1));
2569 BOOST_TEST(testC(S("abcde"), 2, 0, "abcdefghijklmnopqrst", 10, -10));
2570 BOOST_TEST(testC(S("abcde"), 2, 0, "abcdefghijklmnopqrst", 19, -19));
2571 BOOST_TEST(testC(S("abcde"), 2, 0, "abcdefghijklmnopqrst", 20, -20));
2572 BOOST_TEST(testC(S("abcde"), 2, 1, "", 0, 1));
2573 BOOST_TEST(testC(S("abcde"), 2, 1, "abcde", 0, 1));
2574 BOOST_TEST(testC(S("abcde"), 2, 1, "abcde", 1, 2));
2575 BOOST_TEST(testC(S("abcde"), 2, 1, "abcde", 2, 2));
2576 BOOST_TEST(testC(S("abcde"), 2, 1, "abcde", 4, 2));
2577 BOOST_TEST(testC(S("abcde"), 2, 1, "abcde", 5, 2));
2578 BOOST_TEST(testC(S("abcde"), 2, 1, "abcdefghij", 0, 1));
2579 BOOST_TEST(testC(S("abcde"), 2, 1, "abcdefghij", 1, 2));
2580 BOOST_TEST(testC(S("abcde"), 2, 1, "abcdefghij", 5, 2));
2581 BOOST_TEST(testC(S("abcde"), 2, 1, "abcdefghij", 9, 2));
2582 BOOST_TEST(testC(S("abcde"), 2, 1, "abcdefghij", 10, 2));
2583 BOOST_TEST(testC(S("abcde"), 2, 1, "abcdefghijklmnopqrst", 0, 1));
2584 BOOST_TEST(testC(S("abcde"), 2, 1, "abcdefghijklmnopqrst", 1, 2));
2585 BOOST_TEST(testC(S("abcde"), 2, 1, "abcdefghijklmnopqrst", 10, 2));
2586 BOOST_TEST(testC(S("abcde"), 2, 1, "abcdefghijklmnopqrst", 19, 2));
2587 BOOST_TEST(testC(S("abcde"), 2, 1, "abcdefghijklmnopqrst", 20, 2));
2588 BOOST_TEST(testC(S("abcde"), 2, 2, "", 0, 2));
2589 BOOST_TEST(testC(S("abcde"), 2, 2, "abcde", 0, 2));
2590 BOOST_TEST(testC(S("abcde"), 2, 2, "abcde", 1, 2));
2591 BOOST_TEST(testC(S("abcde"), 2, 2, "abcde", 2, 2));
2592 BOOST_TEST(testC(S("abcde"), 2, 2, "abcde", 4, 2));
2593 BOOST_TEST(testC(S("abcde"), 2, 2, "abcde", 5, 2));
2594 BOOST_TEST(testC(S("abcde"), 2, 2, "abcdefghij", 0, 2));
2595 BOOST_TEST(testC(S("abcde"), 2, 2, "abcdefghij", 1, 2));
2596 BOOST_TEST(testC(S("abcde"), 2, 2, "abcdefghij", 5, 2));
2597 BOOST_TEST(testC(S("abcde"), 2, 2, "abcdefghij", 9, 2));
2598 BOOST_TEST(testC(S("abcde"), 2, 2, "abcdefghij", 10, 2));
2599 BOOST_TEST(testC(S("abcde"), 2, 2, "abcdefghijklmnopqrst", 0, 2));
2600 BOOST_TEST(testC(S("abcde"), 2, 2, "abcdefghijklmnopqrst", 1, 2));
2601 BOOST_TEST(testC(S("abcde"), 2, 2, "abcdefghijklmnopqrst", 10, 2));
2602 BOOST_TEST(testC(S("abcde"), 2, 2, "abcdefghijklmnopqrst", 19, 2));
2603 BOOST_TEST(testC(S("abcde"), 2, 2, "abcdefghijklmnopqrst", 20, 2));
2604 BOOST_TEST(testC(S("abcde"), 2, 3, "", 0, 3));
2605 BOOST_TEST(testC(S("abcde"), 2, 3, "abcde", 0, 3));
2606 BOOST_TEST(testC(S("abcde"), 2, 3, "abcde", 1, 2));
2607 BOOST_TEST(testC(S("abcde"), 2, 3, "abcde", 2, 2));
2608 BOOST_TEST(testC(S("abcde"), 2, 3, "abcde", 4, 2));
2609 BOOST_TEST(testC(S("abcde"), 2, 3, "abcde", 5, 2));
2610 BOOST_TEST(testC(S("abcde"), 2, 3, "abcdefghij", 0, 3));
2611 BOOST_TEST(testC(S("abcde"), 2, 3, "abcdefghij", 1, 2));
2612 BOOST_TEST(testC(S("abcde"), 2, 3, "abcdefghij", 5, 2));
2613 BOOST_TEST(testC(S("abcde"), 2, 3, "abcdefghij", 9, 2));
2614 BOOST_TEST(testC(S("abcde"), 2, 3, "abcdefghij", 10, 2));
2615 BOOST_TEST(testC(S("abcde"), 2, 3, "abcdefghijklmnopqrst", 0, 3));
2616 BOOST_TEST(testC(S("abcde"), 2, 3, "abcdefghijklmnopqrst", 1, 2));
2617 BOOST_TEST(testC(S("abcde"), 2, 3, "abcdefghijklmnopqrst", 10, 2));
2618 BOOST_TEST(testC(S("abcde"), 2, 3, "abcdefghijklmnopqrst", 19, 2));
2619 BOOST_TEST(testC(S("abcde"), 2, 3, "abcdefghijklmnopqrst", 20, 2));
2620 BOOST_TEST(testC(S("abcde"), 2, 4, "", 0, 3));
2621 BOOST_TEST(testC(S("abcde"), 2, 4, "abcde", 0, 3));
2622 BOOST_TEST(testC(S("abcde"), 2, 4, "abcde", 1, 2));
2623 BOOST_TEST(testC(S("abcde"), 2, 4, "abcde", 2, 2));
2624 BOOST_TEST(testC(S("abcde"), 2, 4, "abcde", 4, 2));
2625 BOOST_TEST(testC(S("abcde"), 2, 4, "abcde", 5, 2));
2626 BOOST_TEST(testC(S("abcde"), 2, 4, "abcdefghij", 0, 3));
2627 BOOST_TEST(testC(S("abcde"), 2, 4, "abcdefghij", 1, 2));
2628 BOOST_TEST(testC(S("abcde"), 2, 4, "abcdefghij", 5, 2));
2629 BOOST_TEST(testC(S("abcde"), 2, 4, "abcdefghij", 9, 2));
2630 BOOST_TEST(testC(S("abcde"), 2, 4, "abcdefghij", 10, 2));
2631 BOOST_TEST(testC(S("abcde"), 2, 4, "abcdefghijklmnopqrst", 0, 3));
2632 BOOST_TEST(testC(S("abcde"), 2, 4, "abcdefghijklmnopqrst", 1, 2));
2633 BOOST_TEST(testC(S("abcde"), 2, 4, "abcdefghijklmnopqrst", 10, 2));
2634 BOOST_TEST(testC(S("abcde"), 2, 4, "abcdefghijklmnopqrst", 19, 2));
2635 BOOST_TEST(testC(S("abcde"), 2, 4, "abcdefghijklmnopqrst", 20, 2));
2636 BOOST_TEST(testC(S("abcde"), 4, 0, "", 0, 0));
2637 BOOST_TEST(testC(S("abcde"), 4, 0, "abcde", 0, 0));
2638 BOOST_TEST(testC(S("abcde"), 4, 0, "abcde", 1, -1));
2639 BOOST_TEST(testC(S("abcde"), 4, 0, "abcde", 2, -2));
2640 BOOST_TEST(testC(S("abcde"), 4, 0, "abcde", 4, -4));
2641 BOOST_TEST(testC(S("abcde"), 4, 0, "abcde", 5, -5));
2642 BOOST_TEST(testC(S("abcde"), 4, 0, "abcdefghij", 0, 0));
2643 BOOST_TEST(testC(S("abcde"), 4, 0, "abcdefghij", 1, -1));
2644 BOOST_TEST(testC(S("abcde"), 4, 0, "abcdefghij", 5, -5));
2645 BOOST_TEST(testC(S("abcde"), 4, 0, "abcdefghij", 9, -9));
2646 BOOST_TEST(testC(S("abcde"), 4, 0, "abcdefghij", 10, -10));
2647 BOOST_TEST(testC(S("abcde"), 4, 0, "abcdefghijklmnopqrst", 0, 0));
2648 BOOST_TEST(testC(S("abcde"), 4, 0, "abcdefghijklmnopqrst", 1, -1));
2649 BOOST_TEST(testC(S("abcde"), 4, 0, "abcdefghijklmnopqrst", 10, -10));
2650 BOOST_TEST(testC(S("abcde"), 4, 0, "abcdefghijklmnopqrst", 19, -19));
2651 BOOST_TEST(testC(S("abcde"), 4, 0, "abcdefghijklmnopqrst", 20, -20));
2652 BOOST_TEST(testC(S("abcde"), 4, 1, "", 0, 1));
2653 BOOST_TEST(testC(S("abcde"), 4, 1, "abcde", 0, 1));
2654 BOOST_TEST(testC(S("abcde"), 4, 1, "abcde", 1, 4));
2655 BOOST_TEST(testC(S("abcde"), 4, 1, "abcde", 2, 4));
2656 BOOST_TEST(testC(S("abcde"), 4, 1, "abcde", 4, 4));
2657 BOOST_TEST(testC(S("abcde"), 4, 1, "abcde", 5, 4));
2658 BOOST_TEST(testC(S("abcde"), 4, 1, "abcdefghij", 0, 1));
2659 BOOST_TEST(testC(S("abcde"), 4, 1, "abcdefghij", 1, 4));
2660 BOOST_TEST(testC(S("abcde"), 4, 1, "abcdefghij", 5, 4));
2661 BOOST_TEST(testC(S("abcde"), 4, 1, "abcdefghij", 9, 4));
2662 BOOST_TEST(testC(S("abcde"), 4, 1, "abcdefghij", 10, 4));
2663 BOOST_TEST(testC(S("abcde"), 4, 1, "abcdefghijklmnopqrst", 0, 1));
2664 BOOST_TEST(testC(S("abcde"), 4, 1, "abcdefghijklmnopqrst", 1, 4));
2665 BOOST_TEST(testC(S("abcde"), 4, 1, "abcdefghijklmnopqrst", 10, 4));
2666 BOOST_TEST(testC(S("abcde"), 4, 1, "abcdefghijklmnopqrst", 19, 4));
2667 BOOST_TEST(testC(S("abcde"), 4, 1, "abcdefghijklmnopqrst", 20, 4));
2668 BOOST_TEST(testC(S("abcde"), 4, 2, "", 0, 1));
2669 BOOST_TEST(testC(S("abcde"), 4, 2, "abcde", 0, 1));
2670 BOOST_TEST(testC(S("abcde"), 4, 2, "abcde", 1, 4));
2671 BOOST_TEST(testC(S("abcde"), 4, 2, "abcde", 2, 4));
2672 BOOST_TEST(testC(S("abcde"), 4, 2, "abcde", 4, 4));
2673 BOOST_TEST(testC(S("abcde"), 4, 2, "abcde", 5, 4));
2674 BOOST_TEST(testC(S("abcde"), 4, 2, "abcdefghij", 0, 1));
2675 BOOST_TEST(testC(S("abcde"), 4, 2, "abcdefghij", 1, 4));
2676 BOOST_TEST(testC(S("abcde"), 4, 2, "abcdefghij", 5, 4));
2677 BOOST_TEST(testC(S("abcde"), 4, 2, "abcdefghij", 9, 4));
2678 BOOST_TEST(testC(S("abcde"), 4, 2, "abcdefghij", 10, 4));
2679 BOOST_TEST(testC(S("abcde"), 4, 2, "abcdefghijklmnopqrst", 0, 1));
2680 BOOST_TEST(testC(S("abcde"), 4, 2, "abcdefghijklmnopqrst", 1, 4));
2681 BOOST_TEST(testC(S("abcde"), 4, 2, "abcdefghijklmnopqrst", 10, 4));
2682 BOOST_TEST(testC(S("abcde"), 4, 2, "abcdefghijklmnopqrst", 19, 4));
2683 BOOST_TEST(testC(S("abcde"), 4, 2, "abcdefghijklmnopqrst", 20, 4));
2684 BOOST_TEST(testC(S("abcde"), 5, 0, "", 0, 0));
2685 BOOST_TEST(testC(S("abcde"), 5, 0, "abcde", 0, 0));
2686 BOOST_TEST(testC(S("abcde"), 5, 0, "abcde", 1, -1));
2687 BOOST_TEST(testC(S("abcde"), 5, 0, "abcde", 2, -2));
2688 BOOST_TEST(testC(S("abcde"), 5, 0, "abcde", 4, -4));
2689 BOOST_TEST(testC(S("abcde"), 5, 0, "abcde", 5, -5));
2690 BOOST_TEST(testC(S("abcde"), 5, 0, "abcdefghij", 0, 0));
2691 BOOST_TEST(testC(S("abcde"), 5, 0, "abcdefghij", 1, -1));
2692 BOOST_TEST(testC(S("abcde"), 5, 0, "abcdefghij", 5, -5));
2693 BOOST_TEST(testC(S("abcde"), 5, 0, "abcdefghij", 9, -9));
2694 BOOST_TEST(testC(S("abcde"), 5, 0, "abcdefghij", 10, -10));
2695 BOOST_TEST(testC(S("abcde"), 5, 0, "abcdefghijklmnopqrst", 0, 0));
2696 BOOST_TEST(testC(S("abcde"), 5, 0, "abcdefghijklmnopqrst", 1, -1));
2697 BOOST_TEST(testC(S("abcde"), 5, 0, "abcdefghijklmnopqrst", 10, -10));
2698 BOOST_TEST(testC(S("abcde"), 5, 0, "abcdefghijklmnopqrst", 19, -19));
2699 BOOST_TEST(testC(S("abcde"), 5, 0, "abcdefghijklmnopqrst", 20, -20));
2700 BOOST_TEST(testC(S("abcde"), 5, 1, "", 0, 0));
2701 BOOST_TEST(testC(S("abcde"), 5, 1, "abcde", 0, 0));
2702 BOOST_TEST(testC(S("abcde"), 5, 1, "abcde", 1, -1));
2703 BOOST_TEST(testC(S("abcde"), 5, 1, "abcde", 2, -2));
2704 BOOST_TEST(testC(S("abcde"), 5, 1, "abcde", 4, -4));
2705 BOOST_TEST(testC(S("abcde"), 5, 1, "abcde", 5, -5));
2706 BOOST_TEST(testC(S("abcde"), 5, 1, "abcdefghij", 0, 0));
2707 BOOST_TEST(testC(S("abcde"), 5, 1, "abcdefghij", 1, -1));
2708 BOOST_TEST(testC(S("abcde"), 5, 1, "abcdefghij", 5, -5));
2709 BOOST_TEST(testC(S("abcde"), 5, 1, "abcdefghij", 9, -9));
2710 BOOST_TEST(testC(S("abcde"), 5, 1, "abcdefghij", 10, -10));
2711 BOOST_TEST(testC(S("abcde"), 5, 1, "abcdefghijklmnopqrst", 0, 0));
2712 BOOST_TEST(testC(S("abcde"), 5, 1, "abcdefghijklmnopqrst", 1, -1));
2713 BOOST_TEST(testC(S("abcde"), 5, 1, "abcdefghijklmnopqrst", 10, -10));
2714 BOOST_TEST(testC(S("abcde"), 5, 1, "abcdefghijklmnopqrst", 19, -19));
2715 BOOST_TEST(testC(S("abcde"), 5, 1, "abcdefghijklmnopqrst", 20, -20));
2716 BOOST_TEST(testC(S("abcde"), 6, 0, "", 0, 0));
2717 BOOST_TEST(testC(S("abcde"), 6, 0, "abcde", 0, 0));
2718 BOOST_TEST(testC(S("abcde"), 6, 0, "abcde", 1, 0));
2719 BOOST_TEST(testC(S("abcde"), 6, 0, "abcde", 2, 0));
2720 BOOST_TEST(testC(S("abcde"), 6, 0, "abcde", 4, 0));
2721 BOOST_TEST(testC(S("abcde"), 6, 0, "abcde", 5, 0));
2722 BOOST_TEST(testC(S("abcde"), 6, 0, "abcdefghij", 0, 0));
2723 BOOST_TEST(testC(S("abcde"), 6, 0, "abcdefghij", 1, 0));
2724 BOOST_TEST(testC(S("abcde"), 6, 0, "abcdefghij", 5, 0));
2725 BOOST_TEST(testC(S("abcde"), 6, 0, "abcdefghij", 9, 0));
2726 BOOST_TEST(testC(S("abcde"), 6, 0, "abcdefghij", 10, 0));
2727 BOOST_TEST(testC(S("abcde"), 6, 0, "abcdefghijklmnopqrst", 0, 0));
2728 BOOST_TEST(testC(S("abcde"), 6, 0, "abcdefghijklmnopqrst", 1, 0));
2729 BOOST_TEST(testC(S("abcde"), 6, 0, "abcdefghijklmnopqrst", 10, 0));
2730 BOOST_TEST(testC(S("abcde"), 6, 0, "abcdefghijklmnopqrst", 19, 0));
2731 BOOST_TEST(testC(S("abcde"), 6, 0, "abcdefghijklmnopqrst", 20, 0));
2732 BOOST_TEST(testC(S("abcdefghij"), 0, 0, "", 0, 0));
2733 BOOST_TEST(testC(S("abcdefghij"), 0, 0, "abcde", 0, 0));
2734 BOOST_TEST(testC(S("abcdefghij"), 0, 0, "abcde", 1, -1));
2735 BOOST_TEST(testC(S("abcdefghij"), 0, 0, "abcde", 2, -2));
2736 BOOST_TEST(testC(S("abcdefghij"), 0, 0, "abcde", 4, -4));
2737 BOOST_TEST(testC(S("abcdefghij"), 0, 0, "abcde", 5, -5));
2738 BOOST_TEST(testC(S("abcdefghij"), 0, 0, "abcdefghij", 0, 0));
2739 BOOST_TEST(testC(S("abcdefghij"), 0, 0, "abcdefghij", 1, -1));
2740 BOOST_TEST(testC(S("abcdefghij"), 0, 0, "abcdefghij", 5, -5));
2741 BOOST_TEST(testC(S("abcdefghij"), 0, 0, "abcdefghij", 9, -9));
2742 BOOST_TEST(testC(S("abcdefghij"), 0, 0, "abcdefghij", 10, -10));
2743 BOOST_TEST(testC(S("abcdefghij"), 0, 0, "abcdefghijklmnopqrst", 0, 0));
2744 BOOST_TEST(testC(S("abcdefghij"), 0, 0, "abcdefghijklmnopqrst", 1, -1));
2745 BOOST_TEST(testC(S("abcdefghij"), 0, 0, "abcdefghijklmnopqrst", 10, -10));
2746 BOOST_TEST(testC(S("abcdefghij"), 0, 0, "abcdefghijklmnopqrst", 19, -19));
2747 BOOST_TEST(testC(S("abcdefghij"), 0, 0, "abcdefghijklmnopqrst", 20, -20));
2748 BOOST_TEST(testC(S("abcdefghij"), 0, 1, "", 0, 1));
2749 BOOST_TEST(testC(S("abcdefghij"), 0, 1, "abcde", 0, 1));
2750 BOOST_TEST(testC(S("abcdefghij"), 0, 1, "abcde", 1, 0));
2751 BOOST_TEST(testC(S("abcdefghij"), 0, 1, "abcde", 2, -1));
2752 BOOST_TEST(testC(S("abcdefghij"), 0, 1, "abcde", 4, -3));
2753 BOOST_TEST(testC(S("abcdefghij"), 0, 1, "abcde", 5, -4));
2754 BOOST_TEST(testC(S("abcdefghij"), 0, 1, "abcdefghij", 0, 1));
2755 BOOST_TEST(testC(S("abcdefghij"), 0, 1, "abcdefghij", 1, 0));
2756 BOOST_TEST(testC(S("abcdefghij"), 0, 1, "abcdefghij", 5, -4));
2757 BOOST_TEST(testC(S("abcdefghij"), 0, 1, "abcdefghij", 9, -8));
2758 BOOST_TEST(testC(S("abcdefghij"), 0, 1, "abcdefghij", 10, -9));
2759 BOOST_TEST(testC(S("abcdefghij"), 0, 1, "abcdefghijklmnopqrst", 0, 1));
2760 BOOST_TEST(testC(S("abcdefghij"), 0, 1, "abcdefghijklmnopqrst", 1, 0));
2761 BOOST_TEST(testC(S("abcdefghij"), 0, 1, "abcdefghijklmnopqrst", 10, -9));
2762 BOOST_TEST(testC(S("abcdefghij"), 0, 1, "abcdefghijklmnopqrst", 19, -18));
2763 BOOST_TEST(testC(S("abcdefghij"), 0, 1, "abcdefghijklmnopqrst", 20, -19));
2764 BOOST_TEST(testC(S("abcdefghij"), 0, 5, "", 0, 5));
2765 BOOST_TEST(testC(S("abcdefghij"), 0, 5, "abcde", 0, 5));
2766 BOOST_TEST(testC(S("abcdefghij"), 0, 5, "abcde", 1, 4));
2767 BOOST_TEST(testC(S("abcdefghij"), 0, 5, "abcde", 2, 3));
2768 BOOST_TEST(testC(S("abcdefghij"), 0, 5, "abcde", 4, 1));
2769 BOOST_TEST(testC(S("abcdefghij"), 0, 5, "abcde", 5, 0));
2770 BOOST_TEST(testC(S("abcdefghij"), 0, 5, "abcdefghij", 0, 5));
2771 BOOST_TEST(testC(S("abcdefghij"), 0, 5, "abcdefghij", 1, 4));
2772 BOOST_TEST(testC(S("abcdefghij"), 0, 5, "abcdefghij", 5, 0));
2773 BOOST_TEST(testC(S("abcdefghij"), 0, 5, "abcdefghij", 9, -4));
2774 BOOST_TEST(testC(S("abcdefghij"), 0, 5, "abcdefghij", 10, -5));
2775 BOOST_TEST(testC(S("abcdefghij"), 0, 5, "abcdefghijklmnopqrst", 0, 5));
2776 BOOST_TEST(testC(S("abcdefghij"), 0, 5, "abcdefghijklmnopqrst", 1, 4));
2777 BOOST_TEST(testC(S("abcdefghij"), 0, 5, "abcdefghijklmnopqrst", 10, -5));
2778 BOOST_TEST(testC(S("abcdefghij"), 0, 5, "abcdefghijklmnopqrst", 19, -14));
2779 BOOST_TEST(testC(S("abcdefghij"), 0, 5, "abcdefghijklmnopqrst", 20, -15));
2780 BOOST_TEST(testC(S("abcdefghij"), 0, 9, "", 0, 9));
2781 BOOST_TEST(testC(S("abcdefghij"), 0, 9, "abcde", 0, 9));
2782 BOOST_TEST(testC(S("abcdefghij"), 0, 9, "abcde", 1, 8));
2783 BOOST_TEST(testC(S("abcdefghij"), 0, 9, "abcde", 2, 7));
2784 BOOST_TEST(testC(S("abcdefghij"), 0, 9, "abcde", 4, 5));
2785 BOOST_TEST(testC(S("abcdefghij"), 0, 9, "abcde", 5, 4));
2786 BOOST_TEST(testC(S("abcdefghij"), 0, 9, "abcdefghij", 0, 9));
2787 BOOST_TEST(testC(S("abcdefghij"), 0, 9, "abcdefghij", 1, 8));
2788 BOOST_TEST(testC(S("abcdefghij"), 0, 9, "abcdefghij", 5, 4));
2789 BOOST_TEST(testC(S("abcdefghij"), 0, 9, "abcdefghij", 9, 0));
2790 BOOST_TEST(testC(S("abcdefghij"), 0, 9, "abcdefghij", 10, -1));
2791 BOOST_TEST(testC(S("abcdefghij"), 0, 9, "abcdefghijklmnopqrst", 0, 9));
2792 BOOST_TEST(testC(S("abcdefghij"), 0, 9, "abcdefghijklmnopqrst", 1, 8));
2793 BOOST_TEST(testC(S("abcdefghij"), 0, 9, "abcdefghijklmnopqrst", 10, -1));
2794 BOOST_TEST(testC(S("abcdefghij"), 0, 9, "abcdefghijklmnopqrst", 19, -10));
2795 BOOST_TEST(testC(S("abcdefghij"), 0, 9, "abcdefghijklmnopqrst", 20, -11));
2796 BOOST_TEST(testC(S("abcdefghij"), 0, 10, "", 0, 10));
2797 BOOST_TEST(testC(S("abcdefghij"), 0, 10, "abcde", 0, 10));
2798 BOOST_TEST(testC(S("abcdefghij"), 0, 10, "abcde", 1, 9));
2799 BOOST_TEST(testC(S("abcdefghij"), 0, 10, "abcde", 2, 8));
2800 BOOST_TEST(testC(S("abcdefghij"), 0, 10, "abcde", 4, 6));
2801 BOOST_TEST(testC(S("abcdefghij"), 0, 10, "abcde", 5, 5));
2802 BOOST_TEST(testC(S("abcdefghij"), 0, 10, "abcdefghij", 0, 10));
2803 BOOST_TEST(testC(S("abcdefghij"), 0, 10, "abcdefghij", 1, 9));
2804 BOOST_TEST(testC(S("abcdefghij"), 0, 10, "abcdefghij", 5, 5));
2805 BOOST_TEST(testC(S("abcdefghij"), 0, 10, "abcdefghij", 9, 1));
2806 BOOST_TEST(testC(S("abcdefghij"), 0, 10, "abcdefghij", 10, 0));
2807 BOOST_TEST(testC(S("abcdefghij"), 0, 10, "abcdefghijklmnopqrst", 0, 10));
2808 BOOST_TEST(testC(S("abcdefghij"), 0, 10, "abcdefghijklmnopqrst", 1, 9));
2809 BOOST_TEST(testC(S("abcdefghij"), 0, 10, "abcdefghijklmnopqrst", 10, 0));
2810 BOOST_TEST(testC(S("abcdefghij"), 0, 10, "abcdefghijklmnopqrst", 19, -9));
2811 BOOST_TEST(testC(S("abcdefghij"), 0, 10, "abcdefghijklmnopqrst", 20, -10));
2812 BOOST_TEST(testC(S("abcdefghij"), 0, 11, "", 0, 10));
2813 BOOST_TEST(testC(S("abcdefghij"), 0, 11, "abcde", 0, 10));
2814 BOOST_TEST(testC(S("abcdefghij"), 0, 11, "abcde", 1, 9));
2815 BOOST_TEST(testC(S("abcdefghij"), 0, 11, "abcde", 2, 8));
2816 BOOST_TEST(testC(S("abcdefghij"), 0, 11, "abcde", 4, 6));
2817 BOOST_TEST(testC(S("abcdefghij"), 0, 11, "abcde", 5, 5));
2818 BOOST_TEST(testC(S("abcdefghij"), 0, 11, "abcdefghij", 0, 10));
2819 BOOST_TEST(testC(S("abcdefghij"), 0, 11, "abcdefghij", 1, 9));
2820 BOOST_TEST(testC(S("abcdefghij"), 0, 11, "abcdefghij", 5, 5));
2821 BOOST_TEST(testC(S("abcdefghij"), 0, 11, "abcdefghij", 9, 1));
2822 BOOST_TEST(testC(S("abcdefghij"), 0, 11, "abcdefghij", 10, 0));
2823 BOOST_TEST(testC(S("abcdefghij"), 0, 11, "abcdefghijklmnopqrst", 0, 10));
2824 BOOST_TEST(testC(S("abcdefghij"), 0, 11, "abcdefghijklmnopqrst", 1, 9));
2825 BOOST_TEST(testC(S("abcdefghij"), 0, 11, "abcdefghijklmnopqrst", 10, 0));
2826 BOOST_TEST(testC(S("abcdefghij"), 0, 11, "abcdefghijklmnopqrst", 19, -9));
2827 BOOST_TEST(testC(S("abcdefghij"), 0, 11, "abcdefghijklmnopqrst", 20, -10));
2828 BOOST_TEST(testC(S("abcdefghij"), 1, 0, "", 0, 0));
2829 BOOST_TEST(testC(S("abcdefghij"), 1, 0, "abcde", 0, 0));
2830 BOOST_TEST(testC(S("abcdefghij"), 1, 0, "abcde", 1, -1));
2831 BOOST_TEST(testC(S("abcdefghij"), 1, 0, "abcde", 2, -2));
2832 BOOST_TEST(testC(S("abcdefghij"), 1, 0, "abcde", 4, -4));
2833 BOOST_TEST(testC(S("abcdefghij"), 1, 0, "abcde", 5, -5));
2834 BOOST_TEST(testC(S("abcdefghij"), 1, 0, "abcdefghij", 0, 0));
2835 BOOST_TEST(testC(S("abcdefghij"), 1, 0, "abcdefghij", 1, -1));
2836 BOOST_TEST(testC(S("abcdefghij"), 1, 0, "abcdefghij", 5, -5));
2837 BOOST_TEST(testC(S("abcdefghij"), 1, 0, "abcdefghij", 9, -9));
2838 BOOST_TEST(testC(S("abcdefghij"), 1, 0, "abcdefghij", 10, -10));
2839 BOOST_TEST(testC(S("abcdefghij"), 1, 0, "abcdefghijklmnopqrst", 0, 0));
2840 BOOST_TEST(testC(S("abcdefghij"), 1, 0, "abcdefghijklmnopqrst", 1, -1));
2841 BOOST_TEST(testC(S("abcdefghij"), 1, 0, "abcdefghijklmnopqrst", 10, -10));
2842 BOOST_TEST(testC(S("abcdefghij"), 1, 0, "abcdefghijklmnopqrst", 19, -19));
2843 BOOST_TEST(testC(S("abcdefghij"), 1, 0, "abcdefghijklmnopqrst", 20, -20));
2844 BOOST_TEST(testC(S("abcdefghij"), 1, 1, "", 0, 1));
2845 BOOST_TEST(testC(S("abcdefghij"), 1, 1, "abcde", 0, 1));
2846 BOOST_TEST(testC(S("abcdefghij"), 1, 1, "abcde", 1, 1));
2847 BOOST_TEST(testC(S("abcdefghij"), 1, 1, "abcde", 2, 1));
2848 BOOST_TEST(testC(S("abcdefghij"), 1, 1, "abcde", 4, 1));
2849 BOOST_TEST(testC(S("abcdefghij"), 1, 1, "abcde", 5, 1));
2850 BOOST_TEST(testC(S("abcdefghij"), 1, 1, "abcdefghij", 0, 1));
2851 BOOST_TEST(testC(S("abcdefghij"), 1, 1, "abcdefghij", 1, 1));
2852 BOOST_TEST(testC(S("abcdefghij"), 1, 1, "abcdefghij", 5, 1));
2853 BOOST_TEST(testC(S("abcdefghij"), 1, 1, "abcdefghij", 9, 1));
2854 BOOST_TEST(testC(S("abcdefghij"), 1, 1, "abcdefghij", 10, 1));
2855 BOOST_TEST(testC(S("abcdefghij"), 1, 1, "abcdefghijklmnopqrst", 0, 1));
2856 BOOST_TEST(testC(S("abcdefghij"), 1, 1, "abcdefghijklmnopqrst", 1, 1));
2857 BOOST_TEST(testC(S("abcdefghij"), 1, 1, "abcdefghijklmnopqrst", 10, 1));
2858 BOOST_TEST(testC(S("abcdefghij"), 1, 1, "abcdefghijklmnopqrst", 19, 1));
2859 BOOST_TEST(testC(S("abcdefghij"), 1, 1, "abcdefghijklmnopqrst", 20, 1));
2860 BOOST_TEST(testC(S("abcdefghij"), 1, 4, "", 0, 4));
2861 BOOST_TEST(testC(S("abcdefghij"), 1, 4, "abcde", 0, 4));
2862 BOOST_TEST(testC(S("abcdefghij"), 1, 4, "abcde", 1, 1));
2863 BOOST_TEST(testC(S("abcdefghij"), 1, 4, "abcde", 2, 1));
2864 BOOST_TEST(testC(S("abcdefghij"), 1, 4, "abcde", 4, 1));
2865 BOOST_TEST(testC(S("abcdefghij"), 1, 4, "abcde", 5, 1));
2866 BOOST_TEST(testC(S("abcdefghij"), 1, 4, "abcdefghij", 0, 4));
2867 BOOST_TEST(testC(S("abcdefghij"), 1, 4, "abcdefghij", 1, 1));
2868 BOOST_TEST(testC(S("abcdefghij"), 1, 4, "abcdefghij", 5, 1));
2869 BOOST_TEST(testC(S("abcdefghij"), 1, 4, "abcdefghij", 9, 1));
2870 BOOST_TEST(testC(S("abcdefghij"), 1, 4, "abcdefghij", 10, 1));
2871 BOOST_TEST(testC(S("abcdefghij"), 1, 4, "abcdefghijklmnopqrst", 0, 4));
2872 BOOST_TEST(testC(S("abcdefghij"), 1, 4, "abcdefghijklmnopqrst", 1, 1));
2873 BOOST_TEST(testC(S("abcdefghij"), 1, 4, "abcdefghijklmnopqrst", 10, 1));
2874 BOOST_TEST(testC(S("abcdefghij"), 1, 4, "abcdefghijklmnopqrst", 19, 1));
2875 BOOST_TEST(testC(S("abcdefghij"), 1, 4, "abcdefghijklmnopqrst", 20, 1));
2876 BOOST_TEST(testC(S("abcdefghij"), 1, 8, "", 0, 8));
2877 BOOST_TEST(testC(S("abcdefghij"), 1, 8, "abcde", 0, 8));
2878 BOOST_TEST(testC(S("abcdefghij"), 1, 8, "abcde", 1, 1));
2879 BOOST_TEST(testC(S("abcdefghij"), 1, 8, "abcde", 2, 1));
2880 BOOST_TEST(testC(S("abcdefghij"), 1, 8, "abcde", 4, 1));
2881 BOOST_TEST(testC(S("abcdefghij"), 1, 8, "abcde", 5, 1));
2882 BOOST_TEST(testC(S("abcdefghij"), 1, 8, "abcdefghij", 0, 8));
2883 BOOST_TEST(testC(S("abcdefghij"), 1, 8, "abcdefghij", 1, 1));
2884 BOOST_TEST(testC(S("abcdefghij"), 1, 8, "abcdefghij", 5, 1));
2885 BOOST_TEST(testC(S("abcdefghij"), 1, 8, "abcdefghij", 9, 1));
2886 BOOST_TEST(testC(S("abcdefghij"), 1, 8, "abcdefghij", 10, 1));
2887 BOOST_TEST(testC(S("abcdefghij"), 1, 8, "abcdefghijklmnopqrst", 0, 8));
2888 BOOST_TEST(testC(S("abcdefghij"), 1, 8, "abcdefghijklmnopqrst", 1, 1));
2889 BOOST_TEST(testC(S("abcdefghij"), 1, 8, "abcdefghijklmnopqrst", 10, 1));
2890 BOOST_TEST(testC(S("abcdefghij"), 1, 8, "abcdefghijklmnopqrst", 19, 1));
2891 BOOST_TEST(testC(S("abcdefghij"), 1, 8, "abcdefghijklmnopqrst", 20, 1));
2892 BOOST_TEST(testC(S("abcdefghij"), 1, 9, "", 0, 9));
2893 BOOST_TEST(testC(S("abcdefghij"), 1, 9, "abcde", 0, 9));
2894 BOOST_TEST(testC(S("abcdefghij"), 1, 9, "abcde", 1, 1));
2895 BOOST_TEST(testC(S("abcdefghij"), 1, 9, "abcde", 2, 1));
2896 BOOST_TEST(testC(S("abcdefghij"), 1, 9, "abcde", 4, 1));
2897 BOOST_TEST(testC(S("abcdefghij"), 1, 9, "abcde", 5, 1));
2898 BOOST_TEST(testC(S("abcdefghij"), 1, 9, "abcdefghij", 0, 9));
2899 BOOST_TEST(testC(S("abcdefghij"), 1, 9, "abcdefghij", 1, 1));
2900 BOOST_TEST(testC(S("abcdefghij"), 1, 9, "abcdefghij", 5, 1));
2901 BOOST_TEST(testC(S("abcdefghij"), 1, 9, "abcdefghij", 9, 1));
2902 BOOST_TEST(testC(S("abcdefghij"), 1, 9, "abcdefghij", 10, 1));
2903 BOOST_TEST(testC(S("abcdefghij"), 1, 9, "abcdefghijklmnopqrst", 0, 9));
2904 BOOST_TEST(testC(S("abcdefghij"), 1, 9, "abcdefghijklmnopqrst", 1, 1));
2905 BOOST_TEST(testC(S("abcdefghij"), 1, 9, "abcdefghijklmnopqrst", 10, 1));
2906 BOOST_TEST(testC(S("abcdefghij"), 1, 9, "abcdefghijklmnopqrst", 19, 1));
2907 BOOST_TEST(testC(S("abcdefghij"), 1, 9, "abcdefghijklmnopqrst", 20, 1));
2908 BOOST_TEST(testC(S("abcdefghij"), 1, 10, "", 0, 9));
2909 BOOST_TEST(testC(S("abcdefghij"), 1, 10, "abcde", 0, 9));
2910 BOOST_TEST(testC(S("abcdefghij"), 1, 10, "abcde", 1, 1));
2911 BOOST_TEST(testC(S("abcdefghij"), 1, 10, "abcde", 2, 1));
2912 BOOST_TEST(testC(S("abcdefghij"), 1, 10, "abcde", 4, 1));
2913 BOOST_TEST(testC(S("abcdefghij"), 1, 10, "abcde", 5, 1));
2914 BOOST_TEST(testC(S("abcdefghij"), 1, 10, "abcdefghij", 0, 9));
2915 BOOST_TEST(testC(S("abcdefghij"), 1, 10, "abcdefghij", 1, 1));
2916 BOOST_TEST(testC(S("abcdefghij"), 1, 10, "abcdefghij", 5, 1));
2917 BOOST_TEST(testC(S("abcdefghij"), 1, 10, "abcdefghij", 9, 1));
2918 BOOST_TEST(testC(S("abcdefghij"), 1, 10, "abcdefghij", 10, 1));
2919 BOOST_TEST(testC(S("abcdefghij"), 1, 10, "abcdefghijklmnopqrst", 0, 9));
2920 BOOST_TEST(testC(S("abcdefghij"), 1, 10, "abcdefghijklmnopqrst", 1, 1));
2921 BOOST_TEST(testC(S("abcdefghij"), 1, 10, "abcdefghijklmnopqrst", 10, 1));
2922 BOOST_TEST(testC(S("abcdefghij"), 1, 10, "abcdefghijklmnopqrst", 19, 1));
2923 BOOST_TEST(testC(S("abcdefghij"), 1, 10, "abcdefghijklmnopqrst", 20, 1));
2924 BOOST_TEST(testC(S("abcdefghij"), 5, 0, "", 0, 0));
2925 BOOST_TEST(testC(S("abcdefghij"), 5, 0, "abcde", 0, 0));
2926 BOOST_TEST(testC(S("abcdefghij"), 5, 0, "abcde", 1, -1));
2927 BOOST_TEST(testC(S("abcdefghij"), 5, 0, "abcde", 2, -2));
2928 BOOST_TEST(testC(S("abcdefghij"), 5, 0, "abcde", 4, -4));
2929 BOOST_TEST(testC(S("abcdefghij"), 5, 0, "abcde", 5, -5));
2930 BOOST_TEST(testC(S("abcdefghij"), 5, 0, "abcdefghij", 0, 0));
2931 BOOST_TEST(testC(S("abcdefghij"), 5, 0, "abcdefghij", 1, -1));
2932 BOOST_TEST(testC(S("abcdefghij"), 5, 0, "abcdefghij", 5, -5));
2933 BOOST_TEST(testC(S("abcdefghij"), 5, 0, "abcdefghij", 9, -9));
2934 BOOST_TEST(testC(S("abcdefghij"), 5, 0, "abcdefghij", 10, -10));
2935 BOOST_TEST(testC(S("abcdefghij"), 5, 0, "abcdefghijklmnopqrst", 0, 0));
2936 BOOST_TEST(testC(S("abcdefghij"), 5, 0, "abcdefghijklmnopqrst", 1, -1));
2937 BOOST_TEST(testC(S("abcdefghij"), 5, 0, "abcdefghijklmnopqrst", 10, -10));
2938 BOOST_TEST(testC(S("abcdefghij"), 5, 0, "abcdefghijklmnopqrst", 19, -19));
2939 BOOST_TEST(testC(S("abcdefghij"), 5, 0, "abcdefghijklmnopqrst", 20, -20));
2940 BOOST_TEST(testC(S("abcdefghij"), 5, 1, "", 0, 1));
2941 BOOST_TEST(testC(S("abcdefghij"), 5, 1, "abcde", 0, 1));
2942 BOOST_TEST(testC(S("abcdefghij"), 5, 1, "abcde", 1, 5));
2943 BOOST_TEST(testC(S("abcdefghij"), 5, 1, "abcde", 2, 5));
2944 BOOST_TEST(testC(S("abcdefghij"), 5, 1, "abcde", 4, 5));
2945 BOOST_TEST(testC(S("abcdefghij"), 5, 1, "abcde", 5, 5));
2946 BOOST_TEST(testC(S("abcdefghij"), 5, 1, "abcdefghij", 0, 1));
2947 BOOST_TEST(testC(S("abcdefghij"), 5, 1, "abcdefghij", 1, 5));
2948 BOOST_TEST(testC(S("abcdefghij"), 5, 1, "abcdefghij", 5, 5));
2949 BOOST_TEST(testC(S("abcdefghij"), 5, 1, "abcdefghij", 9, 5));
2950 BOOST_TEST(testC(S("abcdefghij"), 5, 1, "abcdefghij", 10, 5));
2951 BOOST_TEST(testC(S("abcdefghij"), 5, 1, "abcdefghijklmnopqrst", 0, 1));
2952 BOOST_TEST(testC(S("abcdefghij"), 5, 1, "abcdefghijklmnopqrst", 1, 5));
2953 BOOST_TEST(testC(S("abcdefghij"), 5, 1, "abcdefghijklmnopqrst", 10, 5));
2954 BOOST_TEST(testC(S("abcdefghij"), 5, 1, "abcdefghijklmnopqrst", 19, 5));
2955 BOOST_TEST(testC(S("abcdefghij"), 5, 1, "abcdefghijklmnopqrst", 20, 5));
2956 BOOST_TEST(testC(S("abcdefghij"), 5, 2, "", 0, 2));
2957 BOOST_TEST(testC(S("abcdefghij"), 5, 2, "abcde", 0, 2));
2958 BOOST_TEST(testC(S("abcdefghij"), 5, 2, "abcde", 1, 5));
2959 BOOST_TEST(testC(S("abcdefghij"), 5, 2, "abcde", 2, 5));
2960 BOOST_TEST(testC(S("abcdefghij"), 5, 2, "abcde", 4, 5));
2961 BOOST_TEST(testC(S("abcdefghij"), 5, 2, "abcde", 5, 5));
2962 BOOST_TEST(testC(S("abcdefghij"), 5, 2, "abcdefghij", 0, 2));
2963 BOOST_TEST(testC(S("abcdefghij"), 5, 2, "abcdefghij", 1, 5));
2964 BOOST_TEST(testC(S("abcdefghij"), 5, 2, "abcdefghij", 5, 5));
2965 BOOST_TEST(testC(S("abcdefghij"), 5, 2, "abcdefghij", 9, 5));
2966 BOOST_TEST(testC(S("abcdefghij"), 5, 2, "abcdefghij", 10, 5));
2967 BOOST_TEST(testC(S("abcdefghij"), 5, 2, "abcdefghijklmnopqrst", 0, 2));
2968 BOOST_TEST(testC(S("abcdefghij"), 5, 2, "abcdefghijklmnopqrst", 1, 5));
2969 BOOST_TEST(testC(S("abcdefghij"), 5, 2, "abcdefghijklmnopqrst", 10, 5));
2970 BOOST_TEST(testC(S("abcdefghij"), 5, 2, "abcdefghijklmnopqrst", 19, 5));
2971 BOOST_TEST(testC(S("abcdefghij"), 5, 2, "abcdefghijklmnopqrst", 20, 5));
2972 BOOST_TEST(testC(S("abcdefghij"), 5, 4, "", 0, 4));
2973 BOOST_TEST(testC(S("abcdefghij"), 5, 4, "abcde", 0, 4));
2974 BOOST_TEST(testC(S("abcdefghij"), 5, 4, "abcde", 1, 5));
2975 BOOST_TEST(testC(S("abcdefghij"), 5, 4, "abcde", 2, 5));
2976 BOOST_TEST(testC(S("abcdefghij"), 5, 4, "abcde", 4, 5));
2977 BOOST_TEST(testC(S("abcdefghij"), 5, 4, "abcde", 5, 5));
2978 BOOST_TEST(testC(S("abcdefghij"), 5, 4, "abcdefghij", 0, 4));
2979 BOOST_TEST(testC(S("abcdefghij"), 5, 4, "abcdefghij", 1, 5));
2980 BOOST_TEST(testC(S("abcdefghij"), 5, 4, "abcdefghij", 5, 5));
2981 BOOST_TEST(testC(S("abcdefghij"), 5, 4, "abcdefghij", 9, 5));
2982 BOOST_TEST(testC(S("abcdefghij"), 5, 4, "abcdefghij", 10, 5));
2983 BOOST_TEST(testC(S("abcdefghij"), 5, 4, "abcdefghijklmnopqrst", 0, 4));
2984 BOOST_TEST(testC(S("abcdefghij"), 5, 4, "abcdefghijklmnopqrst", 1, 5));
2985 BOOST_TEST(testC(S("abcdefghij"), 5, 4, "abcdefghijklmnopqrst", 10, 5));
2986 BOOST_TEST(testC(S("abcdefghij"), 5, 4, "abcdefghijklmnopqrst", 19, 5));
2987 BOOST_TEST(testC(S("abcdefghij"), 5, 4, "abcdefghijklmnopqrst", 20, 5));
2988 BOOST_TEST(testC(S("abcdefghij"), 5, 5, "", 0, 5));
2989 BOOST_TEST(testC(S("abcdefghij"), 5, 5, "abcde", 0, 5));
2990 BOOST_TEST(testC(S("abcdefghij"), 5, 5, "abcde", 1, 5));
2991 BOOST_TEST(testC(S("abcdefghij"), 5, 5, "abcde", 2, 5));
2992 BOOST_TEST(testC(S("abcdefghij"), 5, 5, "abcde", 4, 5));
2993 BOOST_TEST(testC(S("abcdefghij"), 5, 5, "abcde", 5, 5));
2994 BOOST_TEST(testC(S("abcdefghij"), 5, 5, "abcdefghij", 0, 5));
2995 BOOST_TEST(testC(S("abcdefghij"), 5, 5, "abcdefghij", 1, 5));
2996 BOOST_TEST(testC(S("abcdefghij"), 5, 5, "abcdefghij", 5, 5));
2997 BOOST_TEST(testC(S("abcdefghij"), 5, 5, "abcdefghij", 9, 5));
2998 BOOST_TEST(testC(S("abcdefghij"), 5, 5, "abcdefghij", 10, 5));
2999 BOOST_TEST(testC(S("abcdefghij"), 5, 5, "abcdefghijklmnopqrst", 0, 5));
3000 BOOST_TEST(testC(S("abcdefghij"), 5, 5, "abcdefghijklmnopqrst", 1, 5));
3001 BOOST_TEST(testC(S("abcdefghij"), 5, 5, "abcdefghijklmnopqrst", 10, 5));
3002 BOOST_TEST(testC(S("abcdefghij"), 5, 5, "abcdefghijklmnopqrst", 19, 5));
3003 BOOST_TEST(testC(S("abcdefghij"), 5, 5, "abcdefghijklmnopqrst", 20, 5));
3004 BOOST_TEST(testC(S("abcdefghij"), 5, 6, "", 0, 5));
3005 BOOST_TEST(testC(S("abcdefghij"), 5, 6, "abcde", 0, 5));
3006 BOOST_TEST(testC(S("abcdefghij"), 5, 6, "abcde", 1, 5));
3007 BOOST_TEST(testC(S("abcdefghij"), 5, 6, "abcde", 2, 5));
3008 BOOST_TEST(testC(S("abcdefghij"), 5, 6, "abcde", 4, 5));
3009 BOOST_TEST(testC(S("abcdefghij"), 5, 6, "abcde", 5, 5));
3010 BOOST_TEST(testC(S("abcdefghij"), 5, 6, "abcdefghij", 0, 5));
3011 BOOST_TEST(testC(S("abcdefghij"), 5, 6, "abcdefghij", 1, 5));
3012 BOOST_TEST(testC(S("abcdefghij"), 5, 6, "abcdefghij", 5, 5));
3013 BOOST_TEST(testC(S("abcdefghij"), 5, 6, "abcdefghij", 9, 5));
3014 BOOST_TEST(testC(S("abcdefghij"), 5, 6, "abcdefghij", 10, 5));
3015 BOOST_TEST(testC(S("abcdefghij"), 5, 6, "abcdefghijklmnopqrst", 0, 5));
3016 BOOST_TEST(testC(S("abcdefghij"), 5, 6, "abcdefghijklmnopqrst", 1, 5));
3017 BOOST_TEST(testC(S("abcdefghij"), 5, 6, "abcdefghijklmnopqrst", 10, 5));
3018 BOOST_TEST(testC(S("abcdefghij"), 5, 6, "abcdefghijklmnopqrst", 19, 5));
3019 BOOST_TEST(testC(S("abcdefghij"), 5, 6, "abcdefghijklmnopqrst", 20, 5));
3020 BOOST_TEST(testC(S("abcdefghij"), 9, 0, "", 0, 0));
3021 BOOST_TEST(testC(S("abcdefghij"), 9, 0, "abcde", 0, 0));
3022 BOOST_TEST(testC(S("abcdefghij"), 9, 0, "abcde", 1, -1));
3023 BOOST_TEST(testC(S("abcdefghij"), 9, 0, "abcde", 2, -2));
3024 BOOST_TEST(testC(S("abcdefghij"), 9, 0, "abcde", 4, -4));
3025 BOOST_TEST(testC(S("abcdefghij"), 9, 0, "abcde", 5, -5));
3026 BOOST_TEST(testC(S("abcdefghij"), 9, 0, "abcdefghij", 0, 0));
3027 BOOST_TEST(testC(S("abcdefghij"), 9, 0, "abcdefghij", 1, -1));
3028 BOOST_TEST(testC(S("abcdefghij"), 9, 0, "abcdefghij", 5, -5));
3029 BOOST_TEST(testC(S("abcdefghij"), 9, 0, "abcdefghij", 9, -9));
3030 BOOST_TEST(testC(S("abcdefghij"), 9, 0, "abcdefghij", 10, -10));
3031 BOOST_TEST(testC(S("abcdefghij"), 9, 0, "abcdefghijklmnopqrst", 0, 0));
3032 BOOST_TEST(testC(S("abcdefghij"), 9, 0, "abcdefghijklmnopqrst", 1, -1));
3033 BOOST_TEST(testC(S("abcdefghij"), 9, 0, "abcdefghijklmnopqrst", 10, -10));
3034 BOOST_TEST(testC(S("abcdefghij"), 9, 0, "abcdefghijklmnopqrst", 19, -19));
3035 BOOST_TEST(testC(S("abcdefghij"), 9, 0, "abcdefghijklmnopqrst", 20, -20));
3036 BOOST_TEST(testC(S("abcdefghij"), 9, 1, "", 0, 1));
3037 BOOST_TEST(testC(S("abcdefghij"), 9, 1, "abcde", 0, 1));
3038 BOOST_TEST(testC(S("abcdefghij"), 9, 1, "abcde", 1, 9));
3039 BOOST_TEST(testC(S("abcdefghij"), 9, 1, "abcde", 2, 9));
3040 BOOST_TEST(testC(S("abcdefghij"), 9, 1, "abcde", 4, 9));
3041 BOOST_TEST(testC(S("abcdefghij"), 9, 1, "abcde", 5, 9));
3042 BOOST_TEST(testC(S("abcdefghij"), 9, 1, "abcdefghij", 0, 1));
3043 BOOST_TEST(testC(S("abcdefghij"), 9, 1, "abcdefghij", 1, 9));
3044 BOOST_TEST(testC(S("abcdefghij"), 9, 1, "abcdefghij", 5, 9));
3045 BOOST_TEST(testC(S("abcdefghij"), 9, 1, "abcdefghij", 9, 9));
3046 BOOST_TEST(testC(S("abcdefghij"), 9, 1, "abcdefghij", 10, 9));
3047 BOOST_TEST(testC(S("abcdefghij"), 9, 1, "abcdefghijklmnopqrst", 0, 1));
3048 BOOST_TEST(testC(S("abcdefghij"), 9, 1, "abcdefghijklmnopqrst", 1, 9));
3049 BOOST_TEST(testC(S("abcdefghij"), 9, 1, "abcdefghijklmnopqrst", 10, 9));
3050 BOOST_TEST(testC(S("abcdefghij"), 9, 1, "abcdefghijklmnopqrst", 19, 9));
3051 BOOST_TEST(testC(S("abcdefghij"), 9, 1, "abcdefghijklmnopqrst", 20, 9));
3052 BOOST_TEST(testC(S("abcdefghij"), 9, 2, "", 0, 1));
3053 BOOST_TEST(testC(S("abcdefghij"), 9, 2, "abcde", 0, 1));
3054 BOOST_TEST(testC(S("abcdefghij"), 9, 2, "abcde", 1, 9));
3055 BOOST_TEST(testC(S("abcdefghij"), 9, 2, "abcde", 2, 9));
3056 BOOST_TEST(testC(S("abcdefghij"), 9, 2, "abcde", 4, 9));
3057 BOOST_TEST(testC(S("abcdefghij"), 9, 2, "abcde", 5, 9));
3058 BOOST_TEST(testC(S("abcdefghij"), 9, 2, "abcdefghij", 0, 1));
3059 BOOST_TEST(testC(S("abcdefghij"), 9, 2, "abcdefghij", 1, 9));
3060 BOOST_TEST(testC(S("abcdefghij"), 9, 2, "abcdefghij", 5, 9));
3061 BOOST_TEST(testC(S("abcdefghij"), 9, 2, "abcdefghij", 9, 9));
3062 BOOST_TEST(testC(S("abcdefghij"), 9, 2, "abcdefghij", 10, 9));
3063 BOOST_TEST(testC(S("abcdefghij"), 9, 2, "abcdefghijklmnopqrst", 0, 1));
3064 BOOST_TEST(testC(S("abcdefghij"), 9, 2, "abcdefghijklmnopqrst", 1, 9));
3065 BOOST_TEST(testC(S("abcdefghij"), 9, 2, "abcdefghijklmnopqrst", 10, 9));
3066 BOOST_TEST(testC(S("abcdefghij"), 9, 2, "abcdefghijklmnopqrst", 19, 9));
3067 BOOST_TEST(testC(S("abcdefghij"), 9, 2, "abcdefghijklmnopqrst", 20, 9));
3068 BOOST_TEST(testC(S("abcdefghij"), 10, 0, "", 0, 0));
3069 BOOST_TEST(testC(S("abcdefghij"), 10, 0, "abcde", 0, 0));
3070 BOOST_TEST(testC(S("abcdefghij"), 10, 0, "abcde", 1, -1));
3071 BOOST_TEST(testC(S("abcdefghij"), 10, 0, "abcde", 2, -2));
3072 BOOST_TEST(testC(S("abcdefghij"), 10, 0, "abcde", 4, -4));
3073 BOOST_TEST(testC(S("abcdefghij"), 10, 0, "abcde", 5, -5));
3074 BOOST_TEST(testC(S("abcdefghij"), 10, 0, "abcdefghij", 0, 0));
3075 BOOST_TEST(testC(S("abcdefghij"), 10, 0, "abcdefghij", 1, -1));
3076 BOOST_TEST(testC(S("abcdefghij"), 10, 0, "abcdefghij", 5, -5));
3077 BOOST_TEST(testC(S("abcdefghij"), 10, 0, "abcdefghij", 9, -9));
3078 BOOST_TEST(testC(S("abcdefghij"), 10, 0, "abcdefghij", 10, -10));
3079 BOOST_TEST(testC(S("abcdefghij"), 10, 0, "abcdefghijklmnopqrst", 0, 0));
3080 BOOST_TEST(testC(S("abcdefghij"), 10, 0, "abcdefghijklmnopqrst", 1, -1));
3081 BOOST_TEST(testC(S("abcdefghij"), 10, 0, "abcdefghijklmnopqrst", 10, -10));
3082 BOOST_TEST(testC(S("abcdefghij"), 10, 0, "abcdefghijklmnopqrst", 19, -19));
3083 BOOST_TEST(testC(S("abcdefghij"), 10, 0, "abcdefghijklmnopqrst", 20, -20));
3084 BOOST_TEST(testC(S("abcdefghij"), 10, 1, "", 0, 0));
3085 BOOST_TEST(testC(S("abcdefghij"), 10, 1, "abcde", 0, 0));
3086 BOOST_TEST(testC(S("abcdefghij"), 10, 1, "abcde", 1, -1));
3087 BOOST_TEST(testC(S("abcdefghij"), 10, 1, "abcde", 2, -2));
3088 BOOST_TEST(testC(S("abcdefghij"), 10, 1, "abcde", 4, -4));
3089 BOOST_TEST(testC(S("abcdefghij"), 10, 1, "abcde", 5, -5));
3090 BOOST_TEST(testC(S("abcdefghij"), 10, 1, "abcdefghij", 0, 0));
3091 BOOST_TEST(testC(S("abcdefghij"), 10, 1, "abcdefghij", 1, -1));
3092 BOOST_TEST(testC(S("abcdefghij"), 10, 1, "abcdefghij", 5, -5));
3093 BOOST_TEST(testC(S("abcdefghij"), 10, 1, "abcdefghij", 9, -9));
3094 BOOST_TEST(testC(S("abcdefghij"), 10, 1, "abcdefghij", 10, -10));
3095 BOOST_TEST(testC(S("abcdefghij"), 10, 1, "abcdefghijklmnopqrst", 0, 0));
3096 BOOST_TEST(testC(S("abcdefghij"), 10, 1, "abcdefghijklmnopqrst", 1, -1));
3097 BOOST_TEST(testC(S("abcdefghij"), 10, 1, "abcdefghijklmnopqrst", 10, -10));
3098 BOOST_TEST(testC(S("abcdefghij"), 10, 1, "abcdefghijklmnopqrst", 19, -19));
3099 BOOST_TEST(testC(S("abcdefghij"), 10, 1, "abcdefghijklmnopqrst", 20, -20));
3100 BOOST_TEST(testC(S("abcdefghij"), 11, 0, "", 0, 0));
3101 BOOST_TEST(testC(S("abcdefghij"), 11, 0, "abcde", 0, 0));
3102 BOOST_TEST(testC(S("abcdefghij"), 11, 0, "abcde", 1, 0));
3103 BOOST_TEST(testC(S("abcdefghij"), 11, 0, "abcde", 2, 0));
3104 BOOST_TEST(testC(S("abcdefghij"), 11, 0, "abcde", 4, 0));
3105 BOOST_TEST(testC(S("abcdefghij"), 11, 0, "abcde", 5, 0));
3106 BOOST_TEST(testC(S("abcdefghij"), 11, 0, "abcdefghij", 0, 0));
3107 BOOST_TEST(testC(S("abcdefghij"), 11, 0, "abcdefghij", 1, 0));
3108 BOOST_TEST(testC(S("abcdefghij"), 11, 0, "abcdefghij", 5, 0));
3109 BOOST_TEST(testC(S("abcdefghij"), 11, 0, "abcdefghij", 9, 0));
3110 BOOST_TEST(testC(S("abcdefghij"), 11, 0, "abcdefghij", 10, 0));
3111 BOOST_TEST(testC(S("abcdefghij"), 11, 0, "abcdefghijklmnopqrst", 0, 0));
3112 BOOST_TEST(testC(S("abcdefghij"), 11, 0, "abcdefghijklmnopqrst", 1, 0));
3113 BOOST_TEST(testC(S("abcdefghij"), 11, 0, "abcdefghijklmnopqrst", 10, 0));
3114 BOOST_TEST(testC(S("abcdefghij"), 11, 0, "abcdefghijklmnopqrst", 19, 0));
3115 BOOST_TEST(testC(S("abcdefghij"), 11, 0, "abcdefghijklmnopqrst", 20, 0));
3116 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 0, "", 0, 0));
3117 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 0, "abcde", 0, 0));
3118 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 0, "abcde", 1, -1));
3119 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 0, "abcde", 2, -2));
3120 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 0, "abcde", 4, -4));
3121 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 0, "abcde", 5, -5));
3122 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghij", 0, 0));
3123 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghij", 1, -1));
3124 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghij", 5, -5));
3125 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghij", 9, -9));
3126 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghij", 10, -10));
3127 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghijklmnopqrst", 0, 0));
3128 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghijklmnopqrst", 1, -1));
3129 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghijklmnopqrst", 10, -10));
3130 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghijklmnopqrst", 19, -19));
3131 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghijklmnopqrst", 20, -20));
3132 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 1, "", 0, 1));
3133 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 1, "abcde", 0, 1));
3134 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 1, "abcde", 1, 0));
3135 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 1, "abcde", 2, -1));
3136 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 1, "abcde", 4, -3));
3137 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 1, "abcde", 5, -4));
3138 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghij", 0, 1));
3139 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghij", 1, 0));
3140 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghij", 5, -4));
3141 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghij", 9, -8));
3142 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghij", 10, -9));
3143 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghijklmnopqrst", 0, 1));
3144 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghijklmnopqrst", 1, 0));
3145 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghijklmnopqrst", 10, -9));
3146 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghijklmnopqrst", 19, -18));
3147 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghijklmnopqrst", 20, -19));
3148 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 10, "", 0, 10));
3149 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 10, "abcde", 0, 10));
3150 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 10, "abcde", 1, 9));
3151 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 10, "abcde", 2, 8));
3152 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 10, "abcde", 4, 6));
3153 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 10, "abcde", 5, 5));
3154 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghij", 0, 10));
3155 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghij", 1, 9));
3156 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghij", 5, 5));
3157 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghij", 9, 1));
3158 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghij", 10, 0));
3159 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghijklmnopqrst", 0, 10));
3160 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghijklmnopqrst", 1, 9));
3161 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghijklmnopqrst", 10, 0));
3162 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghijklmnopqrst", 19, -9));
3163 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghijklmnopqrst", 20, -10));
3164 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 19, "", 0, 19));
3165 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 19, "abcde", 0, 19));
3166 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 19, "abcde", 1, 18));
3167 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 19, "abcde", 2, 17));
3168 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 19, "abcde", 4, 15));
3169 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 19, "abcde", 5, 14));
3170 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghij", 0, 19));
3171 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghij", 1, 18));
3172 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghij", 5, 14));
3173 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghij", 9, 10));
3174 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghij", 10, 9));
3175 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghijklmnopqrst", 0, 19));
3176 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghijklmnopqrst", 1, 18));
3177 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghijklmnopqrst", 10, 9));
3178 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghijklmnopqrst", 19, 0));
3179 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghijklmnopqrst", 20, -1));
3180 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 20, "", 0, 20));
3181 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 20, "abcde", 0, 20));
3182 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 20, "abcde", 1, 19));
3183 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 20, "abcde", 2, 18));
3184 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 20, "abcde", 4, 16));
3185 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 20, "abcde", 5, 15));
3186 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghij", 0, 20));
3187 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghij", 1, 19));
3188 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghij", 5, 15));
3189 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghij", 9, 11));
3190 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghij", 10, 10));
3191 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghijklmnopqrst", 0, 20));
3192 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghijklmnopqrst", 1, 19));
3193 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghijklmnopqrst", 10, 10));
3194 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghijklmnopqrst", 19, 1));
3195 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghijklmnopqrst", 20, 0));
3196 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 21, "", 0, 20));
3197 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 21, "abcde", 0, 20));
3198 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 21, "abcde", 1, 19));
3199 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 21, "abcde", 2, 18));
3200 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 21, "abcde", 4, 16));
3201 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 21, "abcde", 5, 15));
3202 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghij", 0, 20));
3203 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghij", 1, 19));
3204 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghij", 5, 15));
3205 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghij", 9, 11));
3206 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghij", 10, 10));
3207 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghijklmnopqrst", 0, 20));
3208 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghijklmnopqrst", 1, 19));
3209 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghijklmnopqrst", 10, 10));
3210 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghijklmnopqrst", 19, 1));
3211 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghijklmnopqrst", 20, 0));
3212 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 0, "", 0, 0));
3213 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 0, "abcde", 0, 0));
3214 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 0, "abcde", 1, -1));
3215 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 0, "abcde", 2, -2));
3216 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 0, "abcde", 4, -4));
3217 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 0, "abcde", 5, -5));
3218 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghij", 0, 0));
3219 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghij", 1, -1));
3220 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghij", 5, -5));
3221 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghij", 9, -9));
3222 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghij", 10, -10));
3223 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghijklmnopqrst", 0, 0));
3224 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghijklmnopqrst", 1, -1));
3225 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghijklmnopqrst", 10, -10));
3226 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghijklmnopqrst", 19, -19));
3227 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghijklmnopqrst", 20, -20));
3228 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 1, "", 0, 1));
3229 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 1, "abcde", 0, 1));
3230 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 1, "abcde", 1, 1));
3231 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 1, "abcde", 2, 1));
3232 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 1, "abcde", 4, 1));
3233 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 1, "abcde", 5, 1));
3234 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghij", 0, 1));
3235 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghij", 1, 1));
3236 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghij", 5, 1));
3237 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghij", 9, 1));
3238 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghij", 10, 1));
3239 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghijklmnopqrst", 0, 1));
3240 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghijklmnopqrst", 1, 1));
3241 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghijklmnopqrst", 10, 1));
3242 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghijklmnopqrst", 19, 1));
3243 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghijklmnopqrst", 20, 1));
3244 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 9, "", 0, 9));
3245 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 9, "abcde", 0, 9));
3246 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 9, "abcde", 1, 1));
3247 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 9, "abcde", 2, 1));
3248 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 9, "abcde", 4, 1));
3249 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 9, "abcde", 5, 1));
3250 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghij", 0, 9));
3251 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghij", 1, 1));
3252 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghij", 5, 1));
3253 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghij", 9, 1));
3254 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghij", 10, 1));
3255 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghijklmnopqrst", 0, 9));
3256 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghijklmnopqrst", 1, 1));
3257 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghijklmnopqrst", 10, 1));
3258 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghijklmnopqrst", 19, 1));
3259 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghijklmnopqrst", 20, 1));
3260 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 18, "", 0, 18));
3261 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 18, "abcde", 0, 18));
3262 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 18, "abcde", 1, 1));
3263 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 18, "abcde", 2, 1));
3264 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 18, "abcde", 4, 1));
3265 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 18, "abcde", 5, 1));
3266 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghij", 0, 18));
3267 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghij", 1, 1));
3268 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghij", 5, 1));
3269 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghij", 9, 1));
3270 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghij", 10, 1));
3271 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghijklmnopqrst", 0, 18));
3272 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghijklmnopqrst", 1, 1));
3273 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghijklmnopqrst", 10, 1));
3274 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghijklmnopqrst", 19, 1));
3275 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghijklmnopqrst", 20, 1));
3276 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 19, "", 0, 19));
3277 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 19, "abcde", 0, 19));
3278 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 19, "abcde", 1, 1));
3279 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 19, "abcde", 2, 1));
3280 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 19, "abcde", 4, 1));
3281 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 19, "abcde", 5, 1));
3282 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghij", 0, 19));
3283 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghij", 1, 1));
3284 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghij", 5, 1));
3285 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghij", 9, 1));
3286 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghij", 10, 1));
3287 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghijklmnopqrst", 0, 19));
3288 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghijklmnopqrst", 1, 1));
3289 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghijklmnopqrst", 10, 1));
3290 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghijklmnopqrst", 19, 1));
3291 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghijklmnopqrst", 20, 1));
3292 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 20, "", 0, 19));
3293 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 20, "abcde", 0, 19));
3294 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 20, "abcde", 1, 1));
3295 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 20, "abcde", 2, 1));
3296 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 20, "abcde", 4, 1));
3297 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 20, "abcde", 5, 1));
3298 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghij", 0, 19));
3299 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghij", 1, 1));
3300 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghij", 5, 1));
3301 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghij", 9, 1));
3302 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghij", 10, 1));
3303 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghijklmnopqrst", 0, 19));
3304 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghijklmnopqrst", 1, 1));
3305 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghijklmnopqrst", 10, 1));
3306 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghijklmnopqrst", 19, 1));
3307 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghijklmnopqrst", 20, 1));
3308 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 0, "", 0, 0));
3309 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 0, "abcde", 0, 0));
3310 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 0, "abcde", 1, -1));
3311 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 0, "abcde", 2, -2));
3312 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 0, "abcde", 4, -4));
3313 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 0, "abcde", 5, -5));
3314 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghij", 0, 0));
3315 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghij", 1, -1));
3316 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghij", 5, -5));
3317 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghij", 9, -9));
3318 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghij", 10, -10));
3319 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghijklmnopqrst", 0, 0));
3320 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghijklmnopqrst", 1, -1));
3321 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghijklmnopqrst", 10, -10));
3322 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghijklmnopqrst", 19, -19));
3323 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghijklmnopqrst", 20, -20));
3324 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 1, "", 0, 1));
3325 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 1, "abcde", 0, 1));
3326 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 1, "abcde", 1, 10));
3327 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 1, "abcde", 2, 10));
3328 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 1, "abcde", 4, 10));
3329 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 1, "abcde", 5, 10));
3330 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghij", 0, 1));
3331 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghij", 1, 10));
3332 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghij", 5, 10));
3333 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghij", 9, 10));
3334 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghij", 10, 10));
3335 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghijklmnopqrst", 0, 1));
3336 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghijklmnopqrst", 1, 10));
3337 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghijklmnopqrst", 10, 10));
3338 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghijklmnopqrst", 19, 10));
3339 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghijklmnopqrst", 20, 10));
3340 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 5, "", 0, 5));
3341 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 5, "abcde", 0, 5));
3342 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 5, "abcde", 1, 10));
3343 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 5, "abcde", 2, 10));
3344 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 5, "abcde", 4, 10));
3345 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 5, "abcde", 5, 10));
3346 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghij", 0, 5));
3347 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghij", 1, 10));
3348 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghij", 5, 10));
3349 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghij", 9, 10));
3350 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghij", 10, 10));
3351 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghijklmnopqrst", 0, 5));
3352 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghijklmnopqrst", 1, 10));
3353 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghijklmnopqrst", 10, 10));
3354 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghijklmnopqrst", 19, 10));
3355 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghijklmnopqrst", 20, 10));
3356 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 9, "", 0, 9));
3357 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 9, "abcde", 0, 9));
3358 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 9, "abcde", 1, 10));
3359 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 9, "abcde", 2, 10));
3360 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 9, "abcde", 4, 10));
3361 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 9, "abcde", 5, 10));
3362 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghij", 0, 9));
3363 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghij", 1, 10));
3364 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghij", 5, 10));
3365 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghij", 9, 10));
3366 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghij", 10, 10));
3367 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghijklmnopqrst", 0, 9));
3368 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghijklmnopqrst", 1, 10));
3369 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghijklmnopqrst", 10, 10));
3370 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghijklmnopqrst", 19, 10));
3371 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghijklmnopqrst", 20, 10));
3372 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 10, "", 0, 10));
3373 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 10, "abcde", 0, 10));
3374 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 10, "abcde", 1, 10));
3375 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 10, "abcde", 2, 10));
3376 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 10, "abcde", 4, 10));
3377 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 10, "abcde", 5, 10));
3378 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghij", 0, 10));
3379 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghij", 1, 10));
3380 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghij", 5, 10));
3381 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghij", 9, 10));
3382 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghij", 10, 10));
3383 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghijklmnopqrst", 0, 10));
3384 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghijklmnopqrst", 1, 10));
3385 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghijklmnopqrst", 10, 10));
3386 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghijklmnopqrst", 19, 10));
3387 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghijklmnopqrst", 20, 10));
3388 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 11, "", 0, 10));
3389 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 11, "abcde", 0, 10));
3390 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 11, "abcde", 1, 10));
3391 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 11, "abcde", 2, 10));
3392 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 11, "abcde", 4, 10));
3393 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 11, "abcde", 5, 10));
3394 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghij", 0, 10));
3395 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghij", 1, 10));
3396 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghij", 5, 10));
3397 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghij", 9, 10));
3398 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghij", 10, 10));
3399 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghijklmnopqrst", 0, 10));
3400 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghijklmnopqrst", 1, 10));
3401 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghijklmnopqrst", 10, 10));
3402 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghijklmnopqrst", 19, 10));
3403 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghijklmnopqrst", 20, 10));
3404 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 0, "", 0, 0));
3405 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 0, "abcde", 0, 0));
3406 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 0, "abcde", 1, -1));
3407 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 0, "abcde", 2, -2));
3408 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 0, "abcde", 4, -4));
3409 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 0, "abcde", 5, -5));
3410 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghij", 0, 0));
3411 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghij", 1, -1));
3412 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghij", 5, -5));
3413 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghij", 9, -9));
3414 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghij", 10, -10));
3415 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghijklmnopqrst", 0, 0));
3416 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghijklmnopqrst", 1, -1));
3417 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghijklmnopqrst", 10, -10));
3418 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghijklmnopqrst", 19, -19));
3419 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghijklmnopqrst", 20, -20));
3420 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 1, "", 0, 1));
3421 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 1, "abcde", 0, 1));
3422 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 1, "abcde", 1, 19));
3423 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 1, "abcde", 2, 19));
3424 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 1, "abcde", 4, 19));
3425 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 1, "abcde", 5, 19));
3426 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghij", 0, 1));
3427 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghij", 1, 19));
3428 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghij", 5, 19));
3429 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghij", 9, 19));
3430 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghij", 10, 19));
3431 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghijklmnopqrst", 0, 1));
3432 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghijklmnopqrst", 1, 19));
3433 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghijklmnopqrst", 10, 19));
3434 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghijklmnopqrst", 19, 19));
3435 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghijklmnopqrst", 20, 19));
3436 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 2, "", 0, 1));
3437 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 2, "abcde", 0, 1));
3438 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 2, "abcde", 1, 19));
3439 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 2, "abcde", 2, 19));
3440 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 2, "abcde", 4, 19));
3441 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 2, "abcde", 5, 19));
3442 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghij", 0, 1));
3443 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghij", 1, 19));
3444 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghij", 5, 19));
3445 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghij", 9, 19));
3446 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghij", 10, 19));
3447 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghijklmnopqrst", 0, 1));
3448 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghijklmnopqrst", 1, 19));
3449 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghijklmnopqrst", 10, 19));
3450 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghijklmnopqrst", 19, 19));
3451 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghijklmnopqrst", 20, 19));
3452 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 0, "", 0, 0));
3453 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 0, "abcde", 0, 0));
3454 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 0, "abcde", 1, -1));
3455 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 0, "abcde", 2, -2));
3456 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 0, "abcde", 4, -4));
3457 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 0, "abcde", 5, -5));
3458 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghij", 0, 0));
3459 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghij", 1, -1));
3460 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghij", 5, -5));
3461 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghij", 9, -9));
3462 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghij", 10, -10));
3463 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghijklmnopqrst", 0, 0));
3464 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghijklmnopqrst", 1, -1));
3465 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghijklmnopqrst", 10, -10));
3466 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghijklmnopqrst", 19, -19));
3467 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghijklmnopqrst", 20, -20));
3468 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 1, "", 0, 0));
3469 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 1, "abcde", 0, 0));
3470 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 1, "abcde", 1, -1));
3471 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 1, "abcde", 2, -2));
3472 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 1, "abcde", 4, -4));
3473 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 1, "abcde", 5, -5));
3474 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghij", 0, 0));
3475 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghij", 1, -1));
3476 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghij", 5, -5));
3477 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghij", 9, -9));
3478 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghij", 10, -10));
3479 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghijklmnopqrst", 0, 0));
3480 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghijklmnopqrst", 1, -1));
3481 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghijklmnopqrst", 10, -10));
3482 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghijklmnopqrst", 19, -19));
3483 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghijklmnopqrst", 20, -20));
3484 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 21, 0, "", 0, 0));
3485 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 21, 0, "abcde", 0, 0));
3486 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 21, 0, "abcde", 1, 0));
3487 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 21, 0, "abcde", 2, 0));
3488 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 21, 0, "abcde", 4, 0));
3489 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 21, 0, "abcde", 5, 0));
3490 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghij", 0, 0));
3491 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghij", 1, 0));
3492 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghij", 5, 0));
3493 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghij", 9, 0));
3494 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghij", 10, 0));
3495 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghijklmnopqrst", 0, 0));
3496 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghijklmnopqrst", 1, 0));
3497 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghijklmnopqrst", 10, 0));
3498 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghijklmnopqrst", 19, 0));
3499 BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghijklmnopqrst", 20, 0));
3500}
3501
3502// done
3503void
3504testSwap()
3505{
3506 {
3507 static_string<3> s1("123");
3508 static_string<3> s2("XYZ");
3509 swap(s1, s2);
3510 BOOST_TEST(s1 == "XYZ");
3511 BOOST_TEST(*s1.end() == 0);
3512 BOOST_TEST(s2 == "123");
3513 BOOST_TEST(*s2.end() == 0);
3514 static_string<3> s3("UV");
3515 swap(s2, s3);
3516 BOOST_TEST(s2 == "UV");
3517 BOOST_TEST(*s2.end() == 0);
3518 BOOST_TEST(s3 == "123");
3519 BOOST_TEST(*s3.end() == 0);
3520 }
3521 {
3522 static_string<5> s1("123");
3523 static_string<7> s2("XYZ");
3524 swap(s1, s2);
3525 BOOST_TEST(s1 == "XYZ");
3526 BOOST_TEST(*s1.end() == 0);
3527 BOOST_TEST(s2 == "123");
3528 BOOST_TEST(*s2.end() == 0);
3529 static_string<3> s3("UV");
3530 swap(s2, s3);
3531 BOOST_TEST(s2 == "UV");
3532 BOOST_TEST(*s2.end() == 0);
3533 BOOST_TEST(s3 == "123");
3534 BOOST_TEST(*s3.end() == 0);
3535 {
3536 static_string<5> s4("12345");
3537 static_string<3> s5("XYZ");
3538 BOOST_TEST_THROWS(
3539 (swap(s4, s5)),
3540 std::length_error);
3541 }
3542 {
3543 static_string<3> s4("XYZ");
3544 static_string<5> s5("12345");
3545 BOOST_TEST_THROWS(
3546 (swap(s4, s5)),
3547 std::length_error);
3548 }
3549 }
3550}
3551
3552void
3553testGeneral()
3554{
3555 using str1 = static_string<1>;
3556 using str2 = static_string<2>;
3557 {
3558 str1 s1;
3559 BOOST_TEST(s1 == "");
3560 BOOST_TEST(s1.empty());
3561 BOOST_TEST(s1.size() == 0);
3562 BOOST_TEST(s1.max_size() == 1);
3563 BOOST_TEST(s1.capacity() == 1);
3564 BOOST_TEST(s1.begin() == s1.end());
3565 BOOST_TEST(s1.cbegin() == s1.cend());
3566 BOOST_TEST(s1.rbegin() == s1.rend());
3567 BOOST_TEST(s1.crbegin() == s1.crend());
3568 BOOST_TEST_THROWS(
3569 s1.at(0),
3570 std::out_of_range);
3571 BOOST_TEST(s1.data()[0] == 0);
3572 BOOST_TEST(*s1.c_str() == 0);
3573 BOOST_TEST(std::distance(s1.begin(), s1.end()) == 0);
3574 BOOST_TEST(std::distance(s1.cbegin(), s1.cend()) == 0);
3575 BOOST_TEST(std::distance(s1.rbegin(), s1.rend()) == 0);
3576 BOOST_TEST(std::distance(s1.crbegin(), s1.crend()) == 0);
3577 BOOST_TEST(s1.compare(s1) == 0);
3578 }
3579 {
3580 str1 const s1;
3581 BOOST_TEST(s1 == "");
3582 BOOST_TEST(s1.empty());
3583 BOOST_TEST(s1.size() == 0);
3584 BOOST_TEST(s1.max_size() == 1);
3585 BOOST_TEST(s1.capacity() == 1);
3586 BOOST_TEST(s1.begin() == s1.end());
3587 BOOST_TEST(s1.cbegin() == s1.cend());
3588 BOOST_TEST(s1.rbegin() == s1.rend());
3589 BOOST_TEST(s1.crbegin() == s1.crend());
3590 BOOST_TEST_THROWS(
3591 s1.at(0),
3592 std::out_of_range);
3593 BOOST_TEST(s1.data()[0] == 0);
3594 BOOST_TEST(*s1.c_str() == 0);
3595 BOOST_TEST(std::distance(s1.begin(), s1.end()) == 0);
3596 BOOST_TEST(std::distance(s1.cbegin(), s1.cend()) == 0);
3597 BOOST_TEST(std::distance(s1.rbegin(), s1.rend()) == 0);
3598 BOOST_TEST(std::distance(s1.crbegin(), s1.crend()) == 0);
3599 BOOST_TEST(s1.compare(s1) == 0);
3600 }
3601 {
3602 str1 s1;
3603 str1 s2("x");
3604 BOOST_TEST(s2 == "x");
3605 BOOST_TEST(s2[0] == 'x');
3606 BOOST_TEST(s2.at(0) == 'x');
3607 BOOST_TEST(s2.front() == 'x');
3608 BOOST_TEST(s2.back() == 'x');
3609 str1 const s3(s2);
3610 BOOST_TEST(s3 == "x");
3611 BOOST_TEST(s3[0] == 'x');
3612 BOOST_TEST(s3.at(0) == 'x');
3613 BOOST_TEST(s3.front() == 'x');
3614 BOOST_TEST(s3.back() == 'x');
3615 s2 = "y";
3616 BOOST_TEST(s2 == "y");
3617 BOOST_TEST(s3 == "x");
3618 s1 = s2;
3619 BOOST_TEST(s1 == "y");
3620 s1.clear();
3621 BOOST_TEST(s1.empty());
3622 BOOST_TEST(s1.size() == 0);
3623 }
3624 {
3625 str2 s1("x");
3626 str1 s2(s1);
3627 BOOST_TEST(s2 == "x");
3628 str1 s3;
3629 s3 = s2;
3630 BOOST_TEST(s3 == "x");
3631 s1 = "xy";
3632 BOOST_TEST(s1.size() == 2);
3633 BOOST_TEST(s1[0] == 'x');
3634 BOOST_TEST(s1[1] == 'y');
3635 BOOST_TEST(s1.at(0) == 'x');
3636 BOOST_TEST(s1.at(1) == 'y');
3637 BOOST_TEST(s1.front() == 'x');
3638 BOOST_TEST(s1.back() == 'y');
3639 auto const s4 = s1;
3640 BOOST_TEST(s4[0] == 'x');
3641 BOOST_TEST(s4[1] == 'y');
3642 BOOST_TEST(s4.at(0) == 'x');
3643 BOOST_TEST(s4.at(1) == 'y');
3644 BOOST_TEST(s4.front() == 'x');
3645 BOOST_TEST(s4.back() == 'y');
3646 BOOST_TEST_THROWS(
3647 s3 = s1,
3648 std::length_error);
3649 BOOST_TEST_THROWS(
3650 str1{s1},
3651 std::length_error);
3652 }
3653 {
3654 str1 s1("x");
3655 str2 s2;
3656 s2 = s1;
3657 BOOST_TEST_THROWS(
3658 s1.resize(2),
3659 std::length_error);
3660 }
3661 // copy
3662 {
3663 {
3664 static_string<20> str = "helloworld";
3665 char arr[20]{};
3666 BOOST_TEST(str.copy(arr, str.size()) ==
3667 str.size());
3668 BOOST_TEST(str == arr);
3669 BOOST_TEST_THROWS(
3670 str.copy(arr, str.size(), str.size() + 1),
3671 std::out_of_range);
3672 }
3673 {
3674 static_string<20> str = "helloworld";
3675 char arr[20]{};
3676 BOOST_TEST(str.copy(arr, 2, 2) == 2);
3677 BOOST_TEST(arr[0] == 'l' && arr[1] == 'l');
3678 }
3679 }
3680}
3681
3682// done
3683void
3684testToStaticString()
3685{
3686 BOOST_TEST(testTS(0, "0", L"0", true));
3687 BOOST_TEST(testTS(0u, "0", L"0", true));
3688 BOOST_TEST(testTS(0xffff, "65535", L"65535", true));
3689 BOOST_TEST(testTS(0x10000, "65536", L"65536", true));
3690 BOOST_TEST(testTS(0xffffffff, "4294967295", L"4294967295", true));
3691 BOOST_TEST(testTS(-65535, "-65535", L"-65535", true));
3692 BOOST_TEST(testTS(-65536, "-65536", L"-65536", true));
3693 BOOST_TEST(testTS(-4294967295ll, "-4294967295", L"-4294967295", true));
3694 BOOST_TEST(testTS(1, "1", L"1", true));
3695 BOOST_TEST(testTS(-1, "-1", L"-1", true));
3696 BOOST_TEST(testTS(0.1));
3697 BOOST_TEST(testTS(0.0000001));
3698 BOOST_TEST(testTS(-0.0000001));
3699 BOOST_TEST(testTS(-0.1));
3700 BOOST_TEST(testTS(1234567890.0001));
3701 BOOST_TEST(testTS(1.123456789012345));
3702 BOOST_TEST(testTS(-1234567890.1234));
3703 BOOST_TEST(testTS(-1.123456789012345));
3704
3705 BOOST_TEST(testTS(std::numeric_limits<long long>::max()));
3706 BOOST_TEST(testTS(std::numeric_limits<long long>::min()));
3707 BOOST_TEST(testTS(std::numeric_limits<unsigned long long>::max()));
3708 BOOST_TEST(testTS(std::numeric_limits<unsigned long long>::max()));
3709 BOOST_TEST(testTS(std::numeric_limits<long double>::min()));
3710 BOOST_TEST(testTS(std::numeric_limits<float>::min()));
3711
3712 // these tests technically are not portable, but they will work
3713 // 99% of the time.
3714 {
3715 auto str = to_static_string(std::numeric_limits<float>::max());
3716 BOOST_TEST(str.find('e') != static_string<0>::npos || str.find('.') !=
3717 static_string<0>::npos || str == "infinity" || str == "inf");
3718 }
3719 {
3720 auto str = to_static_string(std::numeric_limits<double>::max());
3721 BOOST_TEST(str.find('e') != static_string<0>::npos || str.find('.') !=
3722 static_string<0>::npos || str == "infinity" || str == "inf");
3723 }
3724 {
3725 auto str = to_static_string(std::numeric_limits<long double>::max());
3726 BOOST_TEST(str.find('e') != static_string<0>::npos || str.find('.') !=
3727 static_string<0>::npos || str == "infinity" || str == "inf");
3728 }
3729 {
3730 auto str = to_static_wstring(std::numeric_limits<float>::max());
3731 BOOST_TEST(str.find('e') != static_string<0>::npos || str.find('.') !=
3732 static_string<0>::npos || str == L"infinity" || str == L"inf");
3733 }
3734 {
3735 auto str = to_static_wstring(std::numeric_limits<double>::max());
3736 BOOST_TEST(str.find('e') != static_string<0>::npos || str.find('.') !=
3737 static_string<0>::npos || str == L"infinity" || str == L"inf");
3738 }
3739 {
3740 auto str = to_static_wstring(std::numeric_limits<long double>::max());
3741 BOOST_TEST(str.find('e') != static_string<0>::npos || str.find('.') !=
3742 static_string<0>::npos || str == L"infinity" || str == L"inf");
3743 }
3744}
3745
3746// done
3747void
3748testFind()
3749{
3750 const char* cs1 = "12345";
3751 const char* cs2 = "2345";
3752 string_view v1 = cs1;
3753 string_view v2 = cs2;
3754 static_string<5> fs1 = cs1;
3755 static_string<4> fs2 = cs2;
3756 using S = static_string<400>;
3757
3758
3759 // find
3760 BOOST_TEST(fs1.find(v1) == 0);
3761 BOOST_TEST(fs1.find(v2) == 1);
3762 BOOST_TEST(fs1.find(fs1) == 0);
3763 BOOST_TEST(fs1.find(fs2) == 1);
3764
3765 BOOST_TEST(fs1.find(cs1) == 0);
3766 BOOST_TEST(fs1.find(cs2) == 1);
3767
3768 BOOST_TEST(fs1.find(cs1, 0) == 0);
3769 BOOST_TEST(fs1.find(cs2, 0) == 1);
3770
3771 BOOST_TEST(fs1.find(cs2, 0, 2) == 1);
3772
3773 BOOST_TEST(fs1.find(cs1, 4) == S::npos);
3774 BOOST_TEST(fs1.find(cs2, 4) == S::npos);
3775
3776 BOOST_TEST(fs1.find('1') == 0);
3777 BOOST_TEST(fs1.find('1', 4) == S::npos);
3778
3779 BOOST_TEST(testF(S(""), "", 0, 0, 0));
3780 BOOST_TEST(testF(S(""), "abcde", 0, 0, 0));
3781 BOOST_TEST(testF(S(""), "abcde", 0, 1, S::npos));
3782 BOOST_TEST(testF(S(""), "abcde", 0, 2, S::npos));
3783 BOOST_TEST(testF(S(""), "abcde", 0, 4, S::npos));
3784 BOOST_TEST(testF(S(""), "abcde", 0, 5, S::npos));
3785 BOOST_TEST(testF(S(""), "abcdeabcde", 0, 0, 0));
3786 BOOST_TEST(testF(S(""), "abcdeabcde", 0, 1, S::npos));
3787 BOOST_TEST(testF(S(""), "abcdeabcde", 0, 5, S::npos));
3788 BOOST_TEST(testF(S(""), "abcdeabcde", 0, 9, S::npos));
3789 BOOST_TEST(testF(S(""), "abcdeabcde", 0, 10, S::npos));
3790 BOOST_TEST(testF(S(""), "abcdeabcdeabcdeabcde", 0, 0, 0));
3791 BOOST_TEST(testF(S(""), "abcdeabcdeabcdeabcde", 0, 1, S::npos));
3792 BOOST_TEST(testF(S(""), "abcdeabcdeabcdeabcde", 0, 10, S::npos));
3793 BOOST_TEST(testF(S(""), "abcdeabcdeabcdeabcde", 0, 19, S::npos));
3794 BOOST_TEST(testF(S(""), "abcdeabcdeabcdeabcde", 0, 20, S::npos));
3795 BOOST_TEST(testF(S(""), "", 1, 0, S::npos));
3796 BOOST_TEST(testF(S(""), "abcde", 1, 0, S::npos));
3797 BOOST_TEST(testF(S(""), "abcde", 1, 1, S::npos));
3798 BOOST_TEST(testF(S(""), "abcde", 1, 2, S::npos));
3799 BOOST_TEST(testF(S(""), "abcde", 1, 4, S::npos));
3800 BOOST_TEST(testF(S(""), "abcde", 1, 5, S::npos));
3801 BOOST_TEST(testF(S(""), "abcdeabcde", 1, 0, S::npos));
3802 BOOST_TEST(testF(S(""), "abcdeabcde", 1, 1, S::npos));
3803 BOOST_TEST(testF(S(""), "abcdeabcde", 1, 5, S::npos));
3804 BOOST_TEST(testF(S(""), "abcdeabcde", 1, 9, S::npos));
3805 BOOST_TEST(testF(S(""), "abcdeabcde", 1, 10, S::npos));
3806 BOOST_TEST(testF(S(""), "abcdeabcdeabcdeabcde", 1, 0, S::npos));
3807 BOOST_TEST(testF(S(""), "abcdeabcdeabcdeabcde", 1, 1, S::npos));
3808 BOOST_TEST(testF(S(""), "abcdeabcdeabcdeabcde", 1, 10, S::npos));
3809 BOOST_TEST(testF(S(""), "abcdeabcdeabcdeabcde", 1, 19, S::npos));
3810 BOOST_TEST(testF(S(""), "abcdeabcdeabcdeabcde", 1, 20, S::npos));
3811 BOOST_TEST(testF(S("abcde"), "", 0, 0, 0));
3812 BOOST_TEST(testF(S("abcde"), "abcde", 0, 0, 0));
3813 BOOST_TEST(testF(S("abcde"), "abcde", 0, 1, 0));
3814 BOOST_TEST(testF(S("abcde"), "abcde", 0, 2, 0));
3815 BOOST_TEST(testF(S("abcde"), "abcde", 0, 4, 0));
3816 BOOST_TEST(testF(S("abcde"), "abcde", 0, 5, 0));
3817 BOOST_TEST(testF(S("abcde"), "abcdeabcde", 0, 0, 0));
3818 BOOST_TEST(testF(S("abcde"), "abcdeabcde", 0, 1, 0));
3819 BOOST_TEST(testF(S("abcde"), "abcdeabcde", 0, 5, 0));
3820 BOOST_TEST(testF(S("abcde"), "abcdeabcde", 0, 9, S::npos));
3821 BOOST_TEST(testF(S("abcde"), "abcdeabcde", 0, 10, S::npos));
3822 BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 0, 0, 0));
3823 BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 0, 1, 0));
3824 BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 0, 10, S::npos));
3825 BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 0, 19, S::npos));
3826 BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 0, 20, S::npos));
3827 BOOST_TEST(testF(S("abcde"), "", 1, 0, 1));
3828 BOOST_TEST(testF(S("abcde"), "abcde", 1, 0, 1));
3829 BOOST_TEST(testF(S("abcde"), "abcde", 1, 1, S::npos));
3830 BOOST_TEST(testF(S("abcde"), "abcde", 1, 2, S::npos));
3831 BOOST_TEST(testF(S("abcde"), "abcde", 1, 4, S::npos));
3832 BOOST_TEST(testF(S("abcde"), "abcde", 1, 5, S::npos));
3833 BOOST_TEST(testF(S("abcde"), "abcdeabcde", 1, 0, 1));
3834 BOOST_TEST(testF(S("abcde"), "abcdeabcde", 1, 1, S::npos));
3835 BOOST_TEST(testF(S("abcde"), "abcdeabcde", 1, 5, S::npos));
3836 BOOST_TEST(testF(S("abcde"), "abcdeabcde", 1, 9, S::npos));
3837 BOOST_TEST(testF(S("abcde"), "abcdeabcde", 1, 10, S::npos));
3838 BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 1, 0, 1));
3839 BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 1, 1, S::npos));
3840 BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 1, 10, S::npos));
3841 BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 1, 19, S::npos));
3842 BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 1, 20, S::npos));
3843 BOOST_TEST(testF(S("abcde"), "", 2, 0, 2));
3844 BOOST_TEST(testF(S("abcde"), "abcde", 2, 0, 2));
3845 BOOST_TEST(testF(S("abcde"), "abcde", 2, 1, S::npos));
3846 BOOST_TEST(testF(S("abcde"), "abcde", 2, 2, S::npos));
3847 BOOST_TEST(testF(S("abcde"), "abcde", 2, 4, S::npos));
3848 BOOST_TEST(testF(S("abcde"), "abcde", 2, 5, S::npos));
3849 BOOST_TEST(testF(S("abcde"), "abcdeabcde", 2, 0, 2));
3850 BOOST_TEST(testF(S("abcde"), "abcdeabcde", 2, 1, S::npos));
3851 BOOST_TEST(testF(S("abcde"), "abcdeabcde", 2, 5, S::npos));
3852 BOOST_TEST(testF(S("abcde"), "abcdeabcde", 2, 9, S::npos));
3853 BOOST_TEST(testF(S("abcde"), "abcdeabcde", 2, 10, S::npos));
3854 BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 2, 0, 2));
3855 BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 2, 1, S::npos));
3856 BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 2, 10, S::npos));
3857 BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 2, 19, S::npos));
3858 BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 2, 20, S::npos));
3859 BOOST_TEST(testF(S("abcde"), "", 4, 0, 4));
3860 BOOST_TEST(testF(S("abcde"), "abcde", 4, 0, 4));
3861 BOOST_TEST(testF(S("abcde"), "abcde", 4, 1, S::npos));
3862 BOOST_TEST(testF(S("abcde"), "abcde", 4, 2, S::npos));
3863 BOOST_TEST(testF(S("abcde"), "abcde", 4, 4, S::npos));
3864 BOOST_TEST(testF(S("abcde"), "abcde", 4, 5, S::npos));
3865 BOOST_TEST(testF(S("abcde"), "abcdeabcde", 4, 0, 4));
3866 BOOST_TEST(testF(S("abcde"), "abcdeabcde", 4, 1, S::npos));
3867 BOOST_TEST(testF(S("abcde"), "abcdeabcde", 4, 5, S::npos));
3868 BOOST_TEST(testF(S("abcde"), "abcdeabcde", 4, 9, S::npos));
3869 BOOST_TEST(testF(S("abcde"), "abcdeabcde", 4, 10, S::npos));
3870 BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 4, 0, 4));
3871 BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 4, 1, S::npos));
3872 BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 4, 10, S::npos));
3873 BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 4, 19, S::npos));
3874 BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 4, 20, S::npos));
3875 BOOST_TEST(testF(S("abcde"), "", 5, 0, 5));
3876 BOOST_TEST(testF(S("abcde"), "abcde", 5, 0, 5));
3877 BOOST_TEST(testF(S("abcde"), "abcde", 5, 1, S::npos));
3878 BOOST_TEST(testF(S("abcde"), "abcde", 5, 2, S::npos));
3879 BOOST_TEST(testF(S("abcde"), "abcde", 5, 4, S::npos));
3880 BOOST_TEST(testF(S("abcde"), "abcde", 5, 5, S::npos));
3881 BOOST_TEST(testF(S("abcde"), "abcdeabcde", 5, 0, 5));
3882 BOOST_TEST(testF(S("abcde"), "abcdeabcde", 5, 1, S::npos));
3883 BOOST_TEST(testF(S("abcde"), "abcdeabcde", 5, 5, S::npos));
3884 BOOST_TEST(testF(S("abcde"), "abcdeabcde", 5, 9, S::npos));
3885 BOOST_TEST(testF(S("abcde"), "abcdeabcde", 5, 10, S::npos));
3886 BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 5, 0, 5));
3887 BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 5, 1, S::npos));
3888 BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 5, 10, S::npos));
3889 BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 5, 19, S::npos));
3890 BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 5, 20, S::npos));
3891 BOOST_TEST(testF(S("abcde"), "", 6, 0, S::npos));
3892 BOOST_TEST(testF(S("abcde"), "abcde", 6, 0, S::npos));
3893 BOOST_TEST(testF(S("abcde"), "abcde", 6, 1, S::npos));
3894 BOOST_TEST(testF(S("abcde"), "abcde", 6, 2, S::npos));
3895 BOOST_TEST(testF(S("abcde"), "abcde", 6, 4, S::npos));
3896 BOOST_TEST(testF(S("abcde"), "abcde", 6, 5, S::npos));
3897 BOOST_TEST(testF(S("abcde"), "abcdeabcde", 6, 0, S::npos));
3898 BOOST_TEST(testF(S("abcde"), "abcdeabcde", 6, 1, S::npos));
3899 BOOST_TEST(testF(S("abcde"), "abcdeabcde", 6, 5, S::npos));
3900 BOOST_TEST(testF(S("abcde"), "abcdeabcde", 6, 9, S::npos));
3901 BOOST_TEST(testF(S("abcde"), "abcdeabcde", 6, 10, S::npos));
3902 BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 6, 0, S::npos));
3903 BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 6, 1, S::npos));
3904 BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 6, 10, S::npos));
3905 BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 6, 19, S::npos));
3906 BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 6, 20, S::npos));
3907 BOOST_TEST(testF(S("abcdeabcde"), "", 0, 0, 0));
3908 BOOST_TEST(testF(S("abcdeabcde"), "abcde", 0, 0, 0));
3909 BOOST_TEST(testF(S("abcdeabcde"), "abcde", 0, 1, 0));
3910 BOOST_TEST(testF(S("abcdeabcde"), "abcde", 0, 2, 0));
3911 BOOST_TEST(testF(S("abcdeabcde"), "abcde", 0, 4, 0));
3912 BOOST_TEST(testF(S("abcdeabcde"), "abcde", 0, 5, 0));
3913 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 0, 0, 0));
3914 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 0, 1, 0));
3915 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 0, 5, 0));
3916 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 0, 9, 0));
3917 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 0, 10, 0));
3918 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 0, 0));
3919 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 1, 0));
3920 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 10, 0));
3921 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 19, S::npos));
3922 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 20, S::npos));
3923 BOOST_TEST(testF(S("abcdeabcde"), "", 1, 0, 1));
3924 BOOST_TEST(testF(S("abcdeabcde"), "abcde", 1, 0, 1));
3925 BOOST_TEST(testF(S("abcdeabcde"), "abcde", 1, 1, 5));
3926 BOOST_TEST(testF(S("abcdeabcde"), "abcde", 1, 2, 5));
3927 BOOST_TEST(testF(S("abcdeabcde"), "abcde", 1, 4, 5));
3928 BOOST_TEST(testF(S("abcdeabcde"), "abcde", 1, 5, 5));
3929 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 1, 0, 1));
3930 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 1, 1, 5));
3931 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 1, 5, 5));
3932 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 1, 9, S::npos));
3933 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 1, 10, S::npos));
3934 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 0, 1));
3935 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 1, 5));
3936 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 10, S::npos));
3937 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 19, S::npos));
3938 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 20, S::npos));
3939 BOOST_TEST(testF(S("abcdeabcde"), "", 5, 0, 5));
3940 BOOST_TEST(testF(S("abcdeabcde"), "abcde", 5, 0, 5));
3941 BOOST_TEST(testF(S("abcdeabcde"), "abcde", 5, 1, 5));
3942 BOOST_TEST(testF(S("abcdeabcde"), "abcde", 5, 2, 5));
3943 BOOST_TEST(testF(S("abcdeabcde"), "abcde", 5, 4, 5));
3944 BOOST_TEST(testF(S("abcdeabcde"), "abcde", 5, 5, 5));
3945 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 5, 0, 5));
3946 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 5, 1, 5));
3947 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 5, 5, 5));
3948 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 5, 9, S::npos));
3949 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 5, 10, S::npos));
3950 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 0, 5));
3951 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 1, 5));
3952 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 10, S::npos));
3953 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 19, S::npos));
3954 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 20, S::npos));
3955 BOOST_TEST(testF(S("abcdeabcde"), "", 9, 0, 9));
3956 BOOST_TEST(testF(S("abcdeabcde"), "abcde", 9, 0, 9));
3957 BOOST_TEST(testF(S("abcdeabcde"), "abcde", 9, 1, S::npos));
3958 BOOST_TEST(testF(S("abcdeabcde"), "abcde", 9, 2, S::npos));
3959 BOOST_TEST(testF(S("abcdeabcde"), "abcde", 9, 4, S::npos));
3960 BOOST_TEST(testF(S("abcdeabcde"), "abcde", 9, 5, S::npos));
3961 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 9, 0, 9));
3962 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 9, 1, S::npos));
3963 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 9, 5, S::npos));
3964 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 9, 9, S::npos));
3965 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 9, 10, S::npos));
3966 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 0, 9));
3967 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 1, S::npos));
3968 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 10, S::npos));
3969 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 19, S::npos));
3970 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 20, S::npos));
3971 BOOST_TEST(testF(S("abcdeabcde"), "", 10, 0, 10));
3972 BOOST_TEST(testF(S("abcdeabcde"), "abcde", 10, 0, 10));
3973 BOOST_TEST(testF(S("abcdeabcde"), "abcde", 10, 1, S::npos));
3974 BOOST_TEST(testF(S("abcdeabcde"), "abcde", 10, 2, S::npos));
3975 BOOST_TEST(testF(S("abcdeabcde"), "abcde", 10, 4, S::npos));
3976 BOOST_TEST(testF(S("abcdeabcde"), "abcde", 10, 5, S::npos));
3977 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 10, 0, 10));
3978 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 10, 1, S::npos));
3979 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 10, 5, S::npos));
3980 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 10, 9, S::npos));
3981 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 10, 10, S::npos));
3982 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 0, 10));
3983 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 1, S::npos));
3984 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 10, S::npos));
3985 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 19, S::npos));
3986 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 20, S::npos));
3987 BOOST_TEST(testF(S("abcdeabcde"), "", 11, 0, S::npos));
3988 BOOST_TEST(testF(S("abcdeabcde"), "abcde", 11, 0, S::npos));
3989 BOOST_TEST(testF(S("abcdeabcde"), "abcde", 11, 1, S::npos));
3990 BOOST_TEST(testF(S("abcdeabcde"), "abcde", 11, 2, S::npos));
3991 BOOST_TEST(testF(S("abcdeabcde"), "abcde", 11, 4, S::npos));
3992 BOOST_TEST(testF(S("abcdeabcde"), "abcde", 11, 5, S::npos));
3993 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 11, 0, S::npos));
3994 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 11, 1, S::npos));
3995 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 11, 5, S::npos));
3996 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 11, 9, S::npos));
3997 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 11, 10, S::npos));
3998 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 0, S::npos));
3999 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 1, S::npos));
4000 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 10, S::npos));
4001 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 19, S::npos));
4002 BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 20, S::npos));
4003 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "", 0, 0, 0));
4004 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 0, 0, 0));
4005 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 0, 1, 0));
4006 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 0, 2, 0));
4007 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 0, 4, 0));
4008 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 0, 5, 0));
4009 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 0, 0));
4010 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 1, 0));
4011 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 5, 0));
4012 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 9, 0));
4013 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 10, 0));
4014 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 0, 0));
4015 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 1, 0));
4016 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 10, 0));
4017 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 19, 0));
4018 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 20, 0));
4019 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "", 1, 0, 1));
4020 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 1, 0, 1));
4021 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 1, 1, 5));
4022 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 1, 2, 5));
4023 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 1, 4, 5));
4024 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 1, 5, 5));
4025 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 0, 1));
4026 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 1, 5));
4027 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 5, 5));
4028 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 9, 5));
4029 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 10, 5));
4030 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 0, 1));
4031 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 1, 5));
4032 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 10, 5));
4033 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 19, S::npos));
4034 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 20, S::npos));
4035 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "", 10, 0, 10));
4036 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 10, 0, 10));
4037 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 10, 1, 10));
4038 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 10, 2, 10));
4039 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 10, 4, 10));
4040 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 10, 5, 10));
4041 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 0, 10));
4042 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 1, 10));
4043 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 5, 10));
4044 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 9, 10));
4045 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 10, 10));
4046 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 0, 10));
4047 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 1, 10));
4048 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 10, 10));
4049 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 19, S::npos));
4050 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 20, S::npos));
4051 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "", 19, 0, 19));
4052 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 19, 0, 19));
4053 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 19, 1, S::npos));
4054 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 19, 2, S::npos));
4055 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 19, 4, S::npos));
4056 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 19, 5, S::npos));
4057 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 0, 19));
4058 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 1, S::npos));
4059 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 5, S::npos));
4060 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 9, S::npos));
4061 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 10, S::npos));
4062 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 0, 19));
4063 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 1, S::npos));
4064 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 10, S::npos));
4065 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 19, S::npos));
4066 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 20, S::npos));
4067 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "", 20, 0, 20));
4068 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 20, 0, 20));
4069 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 20, 1, S::npos));
4070 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 20, 2, S::npos));
4071 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 20, 4, S::npos));
4072 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 20, 5, S::npos));
4073 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 0, 20));
4074 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 1, S::npos));
4075 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 5, S::npos));
4076 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 9, S::npos));
4077 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 10, S::npos));
4078 BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 0, 20));
4079
4080 // rfind
4081
4082 BOOST_TEST(fs1.rfind(v1) == 0);
4083 BOOST_TEST(fs1.rfind(v2) == 1);
4084
4085 BOOST_TEST(fs1.rfind(fs1) == 0);
4086 BOOST_TEST(fs1.rfind(fs2) == 1);
4087
4088 BOOST_TEST(fs1.rfind(cs1) == 0);
4089 BOOST_TEST(fs1.rfind(cs2) == 1);
4090
4091 BOOST_TEST(fs1.rfind(cs1, 0) == 0);
4092 BOOST_TEST(fs1.rfind(cs2, 0) == S::npos);
4093
4094 BOOST_TEST(fs1.rfind(cs2, 0, 2) == S::npos);
4095 BOOST_TEST(fs1.rfind(cs1, 4) == 0);
4096
4097 BOOST_TEST(fs1.rfind('1') == 0);
4098 BOOST_TEST(fs1.rfind('1', 4) == 0);
4099
4100
4101 BOOST_TEST(testRF(S(""), "", 0, 0, 0));
4102 BOOST_TEST(testRF(S(""), "abcde", 0, 0, 0));
4103 BOOST_TEST(testRF(S(""), "abcde", 0, 1, S::npos));
4104 BOOST_TEST(testRF(S(""), "abcde", 0, 2, S::npos));
4105 BOOST_TEST(testRF(S(""), "abcde", 0, 4, S::npos));
4106 BOOST_TEST(testRF(S(""), "abcde", 0, 5, S::npos));
4107 BOOST_TEST(testRF(S(""), "abcdeabcde", 0, 0, 0));
4108 BOOST_TEST(testRF(S(""), "abcdeabcde", 0, 1, S::npos));
4109 BOOST_TEST(testRF(S(""), "abcdeabcde", 0, 5, S::npos));
4110 BOOST_TEST(testRF(S(""), "abcdeabcde", 0, 9, S::npos));
4111 BOOST_TEST(testRF(S(""), "abcdeabcde", 0, 10, S::npos));
4112 BOOST_TEST(testRF(S(""), "abcdeabcdeabcdeabcde", 0, 0, 0));
4113 BOOST_TEST(testRF(S(""), "abcdeabcdeabcdeabcde", 0, 1, S::npos));
4114 BOOST_TEST(testRF(S(""), "abcdeabcdeabcdeabcde", 0, 10, S::npos));
4115 BOOST_TEST(testRF(S(""), "abcdeabcdeabcdeabcde", 0, 19, S::npos));
4116 BOOST_TEST(testRF(S(""), "abcdeabcdeabcdeabcde", 0, 20, S::npos));
4117 BOOST_TEST(testRF(S(""), "", 1, 0, 0));
4118 BOOST_TEST(testRF(S(""), "abcde", 1, 0, 0));
4119 BOOST_TEST(testRF(S(""), "abcde", 1, 1, S::npos));
4120 BOOST_TEST(testRF(S(""), "abcde", 1, 2, S::npos));
4121 BOOST_TEST(testRF(S(""), "abcde", 1, 4, S::npos));
4122 BOOST_TEST(testRF(S(""), "abcde", 1, 5, S::npos));
4123 BOOST_TEST(testRF(S(""), "abcdeabcde", 1, 0, 0));
4124 BOOST_TEST(testRF(S(""), "abcdeabcde", 1, 1, S::npos));
4125 BOOST_TEST(testRF(S(""), "abcdeabcde", 1, 5, S::npos));
4126 BOOST_TEST(testRF(S(""), "abcdeabcde", 1, 9, S::npos));
4127 BOOST_TEST(testRF(S(""), "abcdeabcde", 1, 10, S::npos));
4128 BOOST_TEST(testRF(S(""), "abcdeabcdeabcdeabcde", 1, 0, 0));
4129 BOOST_TEST(testRF(S(""), "abcdeabcdeabcdeabcde", 1, 1, S::npos));
4130 BOOST_TEST(testRF(S(""), "abcdeabcdeabcdeabcde", 1, 10, S::npos));
4131 BOOST_TEST(testRF(S(""), "abcdeabcdeabcdeabcde", 1, 19, S::npos));
4132 BOOST_TEST(testRF(S(""), "abcdeabcdeabcdeabcde", 1, 20, S::npos));
4133 BOOST_TEST(testRF(S("abcde"), "", 0, 0, 0));
4134 BOOST_TEST(testRF(S("abcde"), "abcde", 0, 0, 0));
4135 BOOST_TEST(testRF(S("abcde"), "abcde", 0, 1, 0));
4136 BOOST_TEST(testRF(S("abcde"), "abcde", 0, 2, 0));
4137 BOOST_TEST(testRF(S("abcde"), "abcde", 0, 4, 0));
4138 BOOST_TEST(testRF(S("abcde"), "abcde", 0, 5, 0));
4139 BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 0, 0, 0));
4140 BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 0, 1, 0));
4141 BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 0, 5, 0));
4142 BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 0, 9, S::npos));
4143 BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 0, 10, S::npos));
4144 BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 0, 0, 0));
4145 BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 0, 1, 0));
4146 BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 0, 10, S::npos));
4147 BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 0, 19, S::npos));
4148 BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 0, 20, S::npos));
4149 BOOST_TEST(testRF(S("abcde"), "", 1, 0, 1));
4150 BOOST_TEST(testRF(S("abcde"), "abcde", 1, 0, 1));
4151 BOOST_TEST(testRF(S("abcde"), "abcde", 1, 1, 0));
4152 BOOST_TEST(testRF(S("abcde"), "abcde", 1, 2, 0));
4153 BOOST_TEST(testRF(S("abcde"), "abcde", 1, 4, 0));
4154 BOOST_TEST(testRF(S("abcde"), "abcde", 1, 5, 0));
4155 BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 1, 0, 1));
4156 BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 1, 1, 0));
4157 BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 1, 5, 0));
4158 BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 1, 9, S::npos));
4159 BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 1, 10, S::npos));
4160 BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 1, 0, 1));
4161 BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 1, 1, 0));
4162 BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 1, 10, S::npos));
4163 BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 1, 19, S::npos));
4164 BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 1, 20, S::npos));
4165 BOOST_TEST(testRF(S("abcde"), "", 2, 0, 2));
4166 BOOST_TEST(testRF(S("abcde"), "abcde", 2, 0, 2));
4167 BOOST_TEST(testRF(S("abcde"), "abcde", 2, 1, 0));
4168 BOOST_TEST(testRF(S("abcde"), "abcde", 2, 2, 0));
4169 BOOST_TEST(testRF(S("abcde"), "abcde", 2, 4, 0));
4170 BOOST_TEST(testRF(S("abcde"), "abcde", 2, 5, 0));
4171 BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 2, 0, 2));
4172 BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 2, 1, 0));
4173 BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 2, 5, 0));
4174 BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 2, 9, S::npos));
4175 BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 2, 10, S::npos));
4176 BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 2, 0, 2));
4177 BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 2, 1, 0));
4178 BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 2, 10, S::npos));
4179 BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 2, 19, S::npos));
4180 BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 2, 20, S::npos));
4181 BOOST_TEST(testRF(S("abcde"), "", 4, 0, 4));
4182 BOOST_TEST(testRF(S("abcde"), "abcde", 4, 0, 4));
4183 BOOST_TEST(testRF(S("abcde"), "abcde", 4, 1, 0));
4184 BOOST_TEST(testRF(S("abcde"), "abcde", 4, 2, 0));
4185 BOOST_TEST(testRF(S("abcde"), "abcde", 4, 4, 0));
4186 BOOST_TEST(testRF(S("abcde"), "abcde", 4, 5, 0));
4187 BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 4, 0, 4));
4188 BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 4, 1, 0));
4189 BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 4, 5, 0));
4190 BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 4, 9, S::npos));
4191 BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 4, 10, S::npos));
4192 BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 4, 0, 4));
4193 BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 4, 1, 0));
4194 BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 4, 10, S::npos));
4195 BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 4, 19, S::npos));
4196 BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 4, 20, S::npos));
4197 BOOST_TEST(testRF(S("abcde"), "", 5, 0, 5));
4198 BOOST_TEST(testRF(S("abcde"), "abcde", 5, 0, 5));
4199 BOOST_TEST(testRF(S("abcde"), "abcde", 5, 1, 0));
4200 BOOST_TEST(testRF(S("abcde"), "abcde", 5, 2, 0));
4201 BOOST_TEST(testRF(S("abcde"), "abcde", 5, 4, 0));
4202 BOOST_TEST(testRF(S("abcde"), "abcde", 5, 5, 0));
4203 BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 5, 0, 5));
4204 BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 5, 1, 0));
4205 BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 5, 5, 0));
4206 BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 5, 9, S::npos));
4207 BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 5, 10, S::npos));
4208 BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 5, 0, 5));
4209 BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 5, 1, 0));
4210 BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 5, 10, S::npos));
4211 BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 5, 19, S::npos));
4212 BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 5, 20, S::npos));
4213 BOOST_TEST(testRF(S("abcde"), "", 6, 0, 5));
4214 BOOST_TEST(testRF(S("abcde"), "abcde", 6, 0, 5));
4215 BOOST_TEST(testRF(S("abcde"), "abcde", 6, 1, 0));
4216 BOOST_TEST(testRF(S("abcde"), "abcde", 6, 2, 0));
4217 BOOST_TEST(testRF(S("abcde"), "abcde", 6, 4, 0));
4218 BOOST_TEST(testRF(S("abcde"), "abcde", 6, 5, 0));
4219 BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 6, 0, 5));
4220 BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 6, 1, 0));
4221 BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 6, 5, 0));
4222 BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 6, 9, S::npos));
4223 BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 6, 10, S::npos));
4224 BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 6, 0, 5));
4225 BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 6, 1, 0));
4226 BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 6, 10, S::npos));
4227 BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 6, 19, S::npos));
4228 BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 6, 20, S::npos));
4229 BOOST_TEST(testRF(S("abcdeabcde"), "", 0, 0, 0));
4230 BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 0, 0, 0));
4231 BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 0, 1, 0));
4232 BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 0, 2, 0));
4233 BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 0, 4, 0));
4234 BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 0, 5, 0));
4235 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 0, 0, 0));
4236 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 0, 1, 0));
4237 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 0, 5, 0));
4238 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 0, 9, 0));
4239 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 0, 10, 0));
4240 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 0, 0));
4241 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 1, 0));
4242 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 10, 0));
4243 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 19, S::npos));
4244 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 20, S::npos));
4245 BOOST_TEST(testRF(S("abcdeabcde"), "", 1, 0, 1));
4246 BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 1, 0, 1));
4247 BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 1, 1, 0));
4248 BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 1, 2, 0));
4249 BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 1, 4, 0));
4250 BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 1, 5, 0));
4251 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 1, 0, 1));
4252 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 1, 1, 0));
4253 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 1, 5, 0));
4254 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 1, 9, 0));
4255 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 1, 10, 0));
4256 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 0, 1));
4257 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 1, 0));
4258 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 10, 0));
4259 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 19, S::npos));
4260 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 20, S::npos));
4261 BOOST_TEST(testRF(S("abcdeabcde"), "", 5, 0, 5));
4262 BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 5, 0, 5));
4263 BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 5, 1, 5));
4264 BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 5, 2, 5));
4265 BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 5, 4, 5));
4266 BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 5, 5, 5));
4267 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 5, 0, 5));
4268 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 5, 1, 5));
4269 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 5, 5, 5));
4270 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 5, 9, 0));
4271 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 5, 10, 0));
4272 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 0, 5));
4273 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 1, 5));
4274 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 10, 0));
4275 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 19, S::npos));
4276 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 20, S::npos));
4277 BOOST_TEST(testRF(S("abcdeabcde"), "", 9, 0, 9));
4278 BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 9, 0, 9));
4279 BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 9, 1, 5));
4280 BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 9, 2, 5));
4281 BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 9, 4, 5));
4282 BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 9, 5, 5));
4283 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 9, 0, 9));
4284 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 9, 1, 5));
4285 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 9, 5, 5));
4286 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 9, 9, 0));
4287 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 9, 10, 0));
4288 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 0, 9));
4289 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 1, 5));
4290 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 10, 0));
4291 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 19, S::npos));
4292 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 20, S::npos));
4293 BOOST_TEST(testRF(S("abcdeabcde"), "", 10, 0, 10));
4294 BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 10, 0, 10));
4295 BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 10, 1, 5));
4296 BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 10, 2, 5));
4297 BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 10, 4, 5));
4298 BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 10, 5, 5));
4299 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 10, 0, 10));
4300 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 10, 1, 5));
4301 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 10, 5, 5));
4302 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 10, 9, 0));
4303 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 10, 10, 0));
4304 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 0, 10));
4305 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 1, 5));
4306 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 10, 0));
4307 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 19, S::npos));
4308 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 20, S::npos));
4309 BOOST_TEST(testRF(S("abcdeabcde"), "", 11, 0, 10));
4310 BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 11, 0, 10));
4311 BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 11, 1, 5));
4312 BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 11, 2, 5));
4313 BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 11, 4, 5));
4314 BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 11, 5, 5));
4315 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 11, 0, 10));
4316 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 11, 1, 5));
4317 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 11, 5, 5));
4318 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 11, 9, 0));
4319 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 11, 10, 0));
4320 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 0, 10));
4321 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 1, 5));
4322 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 10, 0));
4323 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 19, S::npos));
4324 BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 20, S::npos));
4325 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "", 0, 0, 0));
4326 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 0, 0, 0));
4327 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 0, 1, 0));
4328 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 0, 2, 0));
4329 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 0, 4, 0));
4330 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 0, 5, 0));
4331 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 0, 0));
4332 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 1, 0));
4333 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 5, 0));
4334 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 9, 0));
4335 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 10, 0));
4336 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 0, 0));
4337 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 1, 0));
4338 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 10, 0));
4339 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 19, 0));
4340 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 20, 0));
4341 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "", 1, 0, 1));
4342 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 1, 0, 1));
4343 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 1, 1, 0));
4344 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 1, 2, 0));
4345 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 1, 4, 0));
4346 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 1, 5, 0));
4347 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 0, 1));
4348 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 1, 0));
4349 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 5, 0));
4350 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 9, 0));
4351 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 10, 0));
4352 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 0, 1));
4353 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 1, 0));
4354 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 10, 0));
4355 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 19, 0));
4356 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 20, 0));
4357 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "", 10, 0, 10));
4358 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 10, 0, 10));
4359 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 10, 1, 10));
4360 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 10, 2, 10));
4361 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 10, 4, 10));
4362 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 10, 5, 10));
4363 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 0, 10));
4364 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 1, 10));
4365 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 5, 10));
4366 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 9, 10));
4367 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 10, 10));
4368 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 0, 10));
4369 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 1, 10));
4370 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 10, 10));
4371 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 19, 0));
4372 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 20, 0));
4373 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "", 19, 0, 19));
4374 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 19, 0, 19));
4375 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 19, 1, 15));
4376 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 19, 2, 15));
4377 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 19, 4, 15));
4378 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 19, 5, 15));
4379 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 0, 19));
4380 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 1, 15));
4381 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 5, 15));
4382 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 9, 10));
4383 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 10, 10));
4384 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 0, 19));
4385 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 1, 15));
4386 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 10, 10));
4387 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 19, 0));
4388 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 20, 0));
4389 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "", 20, 0, 20));
4390 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 20, 0, 20));
4391 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 20, 1, 15));
4392 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 20, 2, 15));
4393 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 20, 4, 15));
4394 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 20, 5, 15));
4395 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 0, 20));
4396 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 1, 15));
4397 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 5, 15));
4398 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 9, 10));
4399 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 10, 10));
4400 BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 0, 20));
4401
4402 // find_first_of
4403
4404 BOOST_TEST(fs1.find_first_of(v1) == 0);
4405 BOOST_TEST(fs1.find_first_of(v2) == 1);
4406 BOOST_TEST(fs1.find_first_of(fs1) == 0);
4407 BOOST_TEST(fs1.find_first_of(fs2) == 1);
4408
4409 BOOST_TEST(fs1.find_first_of(cs1) == 0);
4410 BOOST_TEST(fs1.find_first_of(cs2) == 1);
4411
4412 BOOST_TEST(fs1.find_first_of(cs1, 0) == 0);
4413 BOOST_TEST(fs1.find_first_of(cs2, 0) == 1);
4414
4415 BOOST_TEST(fs1.find_first_of(cs2, 0, 2) == 1);
4416
4417 BOOST_TEST(fs1.find_first_of(cs1, 4) == 4);
4418 BOOST_TEST(fs1.find_first_of(cs2, 4) == 4);
4419
4420 BOOST_TEST(fs1.find_first_of('1') == 0);
4421 BOOST_TEST(fs1.find_first_of('1', 4) == S::npos);
4422
4423 BOOST_TEST(testFF(S(""), "", 0, 0, S::npos));
4424 BOOST_TEST(testFF(S(""), "irkhs", 0, 0, S::npos));
4425 BOOST_TEST(testFF(S(""), "kante", 0, 1, S::npos));
4426 BOOST_TEST(testFF(S(""), "oknlr", 0, 2, S::npos));
4427 BOOST_TEST(testFF(S(""), "pcdro", 0, 4, S::npos));
4428 BOOST_TEST(testFF(S(""), "bnrpe", 0, 5, S::npos));
4429 BOOST_TEST(testFF(S(""), "jtdaefblso", 0, 0, S::npos));
4430 BOOST_TEST(testFF(S(""), "oselktgbca", 0, 1, S::npos));
4431 BOOST_TEST(testFF(S(""), "eqgaplhckj", 0, 5, S::npos));
4432 BOOST_TEST(testFF(S(""), "bjahtcmnlp", 0, 9, S::npos));
4433 BOOST_TEST(testFF(S(""), "hjlcmgpket", 0, 10, S::npos));
4434 BOOST_TEST(testFF(S(""), "htaobedqikfplcgjsmrn", 0, 0, S::npos));
4435 BOOST_TEST(testFF(S(""), "hpqiarojkcdlsgnmfetb", 0, 1, S::npos));
4436 BOOST_TEST(testFF(S(""), "dfkaprhjloqetcsimnbg", 0, 10, S::npos));
4437 BOOST_TEST(testFF(S(""), "ihqrfebgadntlpmjksoc", 0, 19, S::npos));
4438 BOOST_TEST(testFF(S(""), "ngtjfcalbseiqrphmkdo", 0, 20, S::npos));
4439 BOOST_TEST(testFF(S(""), "", 1, 0, S::npos));
4440 BOOST_TEST(testFF(S(""), "lbtqd", 1, 0, S::npos));
4441 BOOST_TEST(testFF(S(""), "tboim", 1, 1, S::npos));
4442 BOOST_TEST(testFF(S(""), "slcer", 1, 2, S::npos));
4443 BOOST_TEST(testFF(S(""), "cbjfs", 1, 4, S::npos));
4444 BOOST_TEST(testFF(S(""), "aqibs", 1, 5, S::npos));
4445 BOOST_TEST(testFF(S(""), "gtfblmqinc", 1, 0, S::npos));
4446 BOOST_TEST(testFF(S(""), "mkqpbtdalg", 1, 1, S::npos));
4447 BOOST_TEST(testFF(S(""), "kphatlimcd", 1, 5, S::npos));
4448 BOOST_TEST(testFF(S(""), "pblasqogic", 1, 9, S::npos));
4449 BOOST_TEST(testFF(S(""), "arosdhcfme", 1, 10, S::npos));
4450 BOOST_TEST(testFF(S(""), "blkhjeogicatqfnpdmsr", 1, 0, S::npos));
4451 BOOST_TEST(testFF(S(""), "bmhineprjcoadgstflqk", 1, 1, S::npos));
4452 BOOST_TEST(testFF(S(""), "djkqcmetslnghpbarfoi", 1, 10, S::npos));
4453 BOOST_TEST(testFF(S(""), "lgokshjtpbemarcdqnfi", 1, 19, S::npos));
4454 BOOST_TEST(testFF(S(""), "bqjhtkfepimcnsgrlado", 1, 20, S::npos));
4455 BOOST_TEST(testFF(S("eaint"), "", 0, 0, S::npos));
4456 BOOST_TEST(testFF(S("binja"), "gfsrt", 0, 0, S::npos));
4457 BOOST_TEST(testFF(S("latkm"), "pfsoc", 0, 1, S::npos));
4458 BOOST_TEST(testFF(S("lecfr"), "tpflm", 0, 2, S::npos));
4459 BOOST_TEST(testFF(S("eqkst"), "sgkec", 0, 4, 0));
4460 BOOST_TEST(testFF(S("cdafr"), "romds", 0, 5, 1));
4461 BOOST_TEST(testFF(S("prbhe"), "qhjistlgmr", 0, 0, S::npos));
4462 BOOST_TEST(testFF(S("lbisk"), "pedfirsglo", 0, 1, S::npos));
4463 BOOST_TEST(testFF(S("hrlpd"), "aqcoslgrmk", 0, 5, S::npos));
4464 BOOST_TEST(testFF(S("ehmja"), "dabckmepqj", 0, 9, 0));
4465 BOOST_TEST(testFF(S("mhqgd"), "pqscrjthli", 0, 10, 1));
4466 BOOST_TEST(testFF(S("tgklq"), "kfphdcsjqmobliagtren", 0, 0, S::npos));
4467 BOOST_TEST(testFF(S("bocjs"), "rokpefncljibsdhqtagm", 0, 1, S::npos));
4468 BOOST_TEST(testFF(S("grbsd"), "afionmkphlebtcjqsgrd", 0, 10, S::npos));
4469 BOOST_TEST(testFF(S("ofjqr"), "aenmqplidhkofrjbctsg", 0, 19, 0));
4470 BOOST_TEST(testFF(S("btlfi"), "osjmbtcadhiklegrpqnf", 0, 20, 0));
4471 BOOST_TEST(testFF(S("clrgb"), "", 1, 0, S::npos));
4472 BOOST_TEST(testFF(S("tjmek"), "osmia", 1, 0, S::npos));
4473 BOOST_TEST(testFF(S("bgstp"), "ckonl", 1, 1, S::npos));
4474 BOOST_TEST(testFF(S("hstrk"), "ilcaj", 1, 2, S::npos));
4475 BOOST_TEST(testFF(S("kmspj"), "lasiq", 1, 4, 2));
4476 BOOST_TEST(testFF(S("tjboh"), "kfqmr", 1, 5, S::npos));
4477 BOOST_TEST(testFF(S("ilbcj"), "klnitfaobg", 1, 0, S::npos));
4478 BOOST_TEST(testFF(S("jkngf"), "gjhmdlqikp", 1, 1, 3));
4479 BOOST_TEST(testFF(S("gfcql"), "skbgtahqej", 1, 5, S::npos));
4480 BOOST_TEST(testFF(S("dqtlg"), "bjsdgtlpkf", 1, 9, 2));
4481 BOOST_TEST(testFF(S("bthpg"), "bjgfmnlkio", 1, 10, 4));
4482 BOOST_TEST(testFF(S("dgsnq"), "lbhepotfsjdqigcnamkr", 1, 0, S::npos));
4483 BOOST_TEST(testFF(S("rmfhp"), "tebangckmpsrqdlfojhi", 1, 1, S::npos));
4484 BOOST_TEST(testFF(S("jfdam"), "joflqbdkhtegimscpanr", 1, 10, 1));
4485 BOOST_TEST(testFF(S("edapb"), "adpmcohetfbsrjinlqkg", 1, 19, 1));
4486 BOOST_TEST(testFF(S("brfsm"), "iacldqjpfnogbsrhmetk", 1, 20, 1));
4487 BOOST_TEST(testFF(S("ndrhl"), "", 2, 0, S::npos));
4488 BOOST_TEST(testFF(S("mrecp"), "otkgb", 2, 0, S::npos));
4489 BOOST_TEST(testFF(S("qlasf"), "cqsjl", 2, 1, S::npos));
4490 BOOST_TEST(testFF(S("smaqd"), "dpifl", 2, 2, 4));
4491 BOOST_TEST(testFF(S("hjeni"), "oapht", 2, 4, S::npos));
4492 BOOST_TEST(testFF(S("ocmfj"), "cifts", 2, 5, 3));
4493 BOOST_TEST(testFF(S("hmftq"), "nmsckbgalo", 2, 0, S::npos));
4494 BOOST_TEST(testFF(S("fklad"), "tpksqhamle", 2, 1, S::npos));
4495 BOOST_TEST(testFF(S("dirnm"), "tpdrchmkji", 2, 5, 2));
4496 BOOST_TEST(testFF(S("hrgdc"), "ijagfkblst", 2, 9, 2));
4497 BOOST_TEST(testFF(S("ifakg"), "kpocsignjb", 2, 10, 3));
4498 BOOST_TEST(testFF(S("ebrgd"), "pecqtkjsnbdrialgmohf", 2, 0, S::npos));
4499 BOOST_TEST(testFF(S("rcjml"), "aiortphfcmkjebgsndql", 2, 1, S::npos));
4500 BOOST_TEST(testFF(S("peqmt"), "sdbkeamglhipojqftrcn", 2, 10, 3));
4501 BOOST_TEST(testFF(S("frehn"), "ljqncehgmfktroapidbs", 2, 19, 2));
4502 BOOST_TEST(testFF(S("tqolf"), "rtcfodilamkbenjghqps", 2, 20, 2));
4503 BOOST_TEST(testFF(S("cjgao"), "", 4, 0, S::npos));
4504 BOOST_TEST(testFF(S("kjplq"), "mabns", 4, 0, S::npos));
4505 BOOST_TEST(testFF(S("herni"), "bdnrp", 4, 1, S::npos));
4506 BOOST_TEST(testFF(S("tadrb"), "scidp", 4, 2, S::npos));
4507 BOOST_TEST(testFF(S("pkfeo"), "agbjl", 4, 4, S::npos));
4508 BOOST_TEST(testFF(S("hoser"), "jfmpr", 4, 5, 4));
4509 BOOST_TEST(testFF(S("kgrsp"), "rbpefghsmj", 4, 0, S::npos));
4510 BOOST_TEST(testFF(S("pgejb"), "apsfntdoqc", 4, 1, S::npos));
4511 BOOST_TEST(testFF(S("thlnq"), "ndkjeisgcl", 4, 5, S::npos));
4512 BOOST_TEST(testFF(S("nbmit"), "rnfpqatdeo", 4, 9, 4));
4513 BOOST_TEST(testFF(S("jgmib"), "bntjlqrfik", 4, 10, 4));
4514 BOOST_TEST(testFF(S("ncrfj"), "kcrtmpolnaqejghsfdbi", 4, 0, S::npos));
4515 BOOST_TEST(testFF(S("ncsik"), "lobheanpkmqidsrtcfgj", 4, 1, S::npos));
4516 BOOST_TEST(testFF(S("sgbfh"), "athdkljcnreqbgpmisof", 4, 10, 4));
4517 BOOST_TEST(testFF(S("dktbn"), "qkdmjialrscpbhefgont", 4, 19, 4));
4518 BOOST_TEST(testFF(S("fthqm"), "dmasojntqleribkgfchp", 4, 20, 4));
4519 BOOST_TEST(testFF(S("klopi"), "", 5, 0, S::npos));
4520 BOOST_TEST(testFF(S("dajhn"), "psthd", 5, 0, S::npos));
4521 BOOST_TEST(testFF(S("jbgno"), "rpmjd", 5, 1, S::npos));
4522 BOOST_TEST(testFF(S("hkjae"), "dfsmk", 5, 2, S::npos));
4523 BOOST_TEST(testFF(S("gbhqo"), "skqne", 5, 4, S::npos));
4524 BOOST_TEST(testFF(S("ktdor"), "kipnf", 5, 5, S::npos));
4525 BOOST_TEST(testFF(S("ldprn"), "hmrnqdgifl", 5, 0, S::npos));
4526 BOOST_TEST(testFF(S("egmjk"), "fsmjcdairn", 5, 1, S::npos));
4527 BOOST_TEST(testFF(S("armql"), "pcdgltbrfj", 5, 5, S::npos));
4528 BOOST_TEST(testFF(S("cdhjo"), "aekfctpirg", 5, 9, S::npos));
4529 BOOST_TEST(testFF(S("jcons"), "ledihrsgpf", 5, 10, S::npos));
4530 BOOST_TEST(testFF(S("cbrkp"), "mqcklahsbtirgopefndj", 5, 0, S::npos));
4531 BOOST_TEST(testFF(S("fhgna"), "kmlthaoqgecrnpdbjfis", 5, 1, S::npos));
4532 BOOST_TEST(testFF(S("ejfcd"), "sfhbamcdptojlkrenqgi", 5, 10, S::npos));
4533 BOOST_TEST(testFF(S("kqjhe"), "pbniofmcedrkhlstgaqj", 5, 19, S::npos));
4534 BOOST_TEST(testFF(S("pbdjl"), "mongjratcskbhqiepfdl", 5, 20, S::npos));
4535 BOOST_TEST(testFF(S("gajqn"), "", 6, 0, S::npos));
4536 BOOST_TEST(testFF(S("stedk"), "hrnat", 6, 0, S::npos));
4537 BOOST_TEST(testFF(S("tjkaf"), "gsqdt", 6, 1, S::npos));
4538 BOOST_TEST(testFF(S("dthpe"), "bspkd", 6, 2, S::npos));
4539 BOOST_TEST(testFF(S("klhde"), "ohcmb", 6, 4, S::npos));
4540 BOOST_TEST(testFF(S("bhlki"), "heatr", 6, 5, S::npos));
4541 BOOST_TEST(testFF(S("lqmoh"), "pmblckedfn", 6, 0, S::npos));
4542 BOOST_TEST(testFF(S("mtqin"), "aceqmsrbik", 6, 1, S::npos));
4543 BOOST_TEST(testFF(S("dpqbr"), "lmbtdehjrn", 6, 5, S::npos));
4544 BOOST_TEST(testFF(S("kdhmo"), "teqmcrlgib", 6, 9, S::npos));
4545 BOOST_TEST(testFF(S("jblqp"), "njolbmspac", 6, 10, S::npos));
4546 BOOST_TEST(testFF(S("qmjgl"), "pofnhidklamecrbqjgst", 6, 0, S::npos));
4547 BOOST_TEST(testFF(S("rothp"), "jbhckmtgrqnosafedpli", 6, 1, S::npos));
4548 BOOST_TEST(testFF(S("ghknq"), "dobntpmqklicsahgjerf", 6, 10, S::npos));
4549 BOOST_TEST(testFF(S("eopfi"), "tpdshainjkbfoemlrgcq", 6, 19, S::npos));
4550 BOOST_TEST(testFF(S("dsnmg"), "oldpfgeakrnitscbjmqh", 6, 20, S::npos));
4551 BOOST_TEST(testFF(S("jnkrfhotgl"), "", 0, 0, S::npos));
4552 BOOST_TEST(testFF(S("dltjfngbko"), "rqegt", 0, 0, S::npos));
4553 BOOST_TEST(testFF(S("bmjlpkiqde"), "dashm", 0, 1, 8));
4554 BOOST_TEST(testFF(S("skrflobnqm"), "jqirk", 0, 2, 8));
4555 BOOST_TEST(testFF(S("jkpldtshrm"), "rckeg", 0, 4, 1));
4556 BOOST_TEST(testFF(S("ghasdbnjqo"), "jscie", 0, 5, 3));
4557 BOOST_TEST(testFF(S("igrkhpbqjt"), "efsphndliq", 0, 0, S::npos));
4558 BOOST_TEST(testFF(S("ikthdgcamf"), "gdicosleja", 0, 1, 5));
4559 BOOST_TEST(testFF(S("pcofgeniam"), "qcpjibosfl", 0, 5, 0));
4560 BOOST_TEST(testFF(S("rlfjgesqhc"), "lrhmefnjcq", 0, 9, 0));
4561 BOOST_TEST(testFF(S("itphbqsker"), "dtablcrseo", 0, 10, 1));
4562 BOOST_TEST(testFF(S("skjafcirqm"), "apckjsftedbhgomrnilq", 0, 0, S::npos));
4563 BOOST_TEST(testFF(S("tcqomarsfd"), "pcbrgflehjtiadnsokqm", 0, 1, S::npos));
4564 BOOST_TEST(testFF(S("rocfeldqpk"), "nsiadegjklhobrmtqcpf", 0, 10, 4));
4565 BOOST_TEST(testFF(S("cfpegndlkt"), "cpmajdqnolikhgsbretf", 0, 19, 0));
4566 BOOST_TEST(testFF(S("fqbtnkeasj"), "jcflkntmgiqrphdosaeb", 0, 20, 0));
4567 BOOST_TEST(testFF(S("shbcqnmoar"), "", 1, 0, S::npos));
4568 BOOST_TEST(testFF(S("bdoshlmfin"), "ontrs", 1, 0, S::npos));
4569 BOOST_TEST(testFF(S("khfrebnsgq"), "pfkna", 1, 1, S::npos));
4570 BOOST_TEST(testFF(S("getcrsaoji"), "ekosa", 1, 2, 1));
4571 BOOST_TEST(testFF(S("fjiknedcpq"), "anqhk", 1, 4, 4));
4572 BOOST_TEST(testFF(S("tkejgnafrm"), "jekca", 1, 5, 1));
4573 BOOST_TEST(testFF(S("jnakolqrde"), "ikemsjgacf", 1, 0, S::npos));
4574 BOOST_TEST(testFF(S("lcjptsmgbe"), "arolgsjkhm", 1, 1, S::npos));
4575 BOOST_TEST(testFF(S("itfsmcjorl"), "oftkbldhre", 1, 5, 1));
4576 BOOST_TEST(testFF(S("omchkfrjea"), "gbkqdoeftl", 1, 9, 4));
4577 BOOST_TEST(testFF(S("cigfqkated"), "sqcflrgtim", 1, 10, 1));
4578 BOOST_TEST(testFF(S("tscenjikml"), "fmhbkislrjdpanogqcet", 1, 0, S::npos));
4579 BOOST_TEST(testFF(S("qcpaemsinf"), "rnioadktqlgpbcjsmhef", 1, 1, S::npos));
4580 BOOST_TEST(testFF(S("gltkojeipd"), "oakgtnldpsefihqmjcbr", 1, 10, 1));
4581 BOOST_TEST(testFF(S("qistfrgnmp"), "gbnaelosidmcjqktfhpr", 1, 19, 1));
4582 BOOST_TEST(testFF(S("bdnpfcqaem"), "akbripjhlosndcmqgfet", 1, 20, 1));
4583 BOOST_TEST(testFF(S("ectnhskflp"), "", 5, 0, S::npos));
4584 BOOST_TEST(testFF(S("fgtianblpq"), "pijag", 5, 0, S::npos));
4585 BOOST_TEST(testFF(S("mfeqklirnh"), "jrckd", 5, 1, S::npos));
4586 BOOST_TEST(testFF(S("astedncjhk"), "qcloh", 5, 2, 6));
4587 BOOST_TEST(testFF(S("fhlqgcajbr"), "thlmp", 5, 4, S::npos));
4588 BOOST_TEST(testFF(S("epfhocmdng"), "qidmo", 5, 5, 6));
4589 BOOST_TEST(testFF(S("apcnsibger"), "lnegpsjqrd", 5, 0, S::npos));
4590 BOOST_TEST(testFF(S("aqkocrbign"), "rjqdablmfs", 5, 1, 5));
4591 BOOST_TEST(testFF(S("ijsmdtqgce"), "enkgpbsjaq", 5, 5, 7));
4592 BOOST_TEST(testFF(S("clobgsrken"), "kdsgoaijfh", 5, 9, 5));
4593 BOOST_TEST(testFF(S("jbhcfposld"), "trfqgmckbe", 5, 10, S::npos));
4594 BOOST_TEST(testFF(S("oqnpblhide"), "igetsracjfkdnpoblhqm", 5, 0, S::npos));
4595 BOOST_TEST(testFF(S("lroeasctif"), "nqctfaogirshlekbdjpm", 5, 1, S::npos));
4596 BOOST_TEST(testFF(S("bpjlgmiedh"), "csehfgomljdqinbartkp", 5, 10, 5));
4597 BOOST_TEST(testFF(S("pamkeoidrj"), "qahoegcmplkfsjbdnitr", 5, 19, 5));
4598 BOOST_TEST(testFF(S("espogqbthk"), "dpteiajrqmsognhlfbkc", 5, 20, 5));
4599 BOOST_TEST(testFF(S("shoiedtcjb"), "", 9, 0, S::npos));
4600 BOOST_TEST(testFF(S("ebcinjgads"), "tqbnh", 9, 0, S::npos));
4601 BOOST_TEST(testFF(S("dqmregkcfl"), "akmle", 9, 1, S::npos));
4602 BOOST_TEST(testFF(S("ngcrieqajf"), "iqfkm", 9, 2, S::npos));
4603 BOOST_TEST(testFF(S("qosmilgnjb"), "tqjsr", 9, 4, S::npos));
4604 BOOST_TEST(testFF(S("ikabsjtdfl"), "jplqg", 9, 5, 9));
4605 BOOST_TEST(testFF(S("ersmicafdh"), "oilnrbcgtj", 9, 0, S::npos));
4606 BOOST_TEST(testFF(S("fdnplotmgh"), "morkglpesn", 9, 1, S::npos));
4607 BOOST_TEST(testFF(S("fdbicojerm"), "dmicerngat", 9, 5, 9));
4608 BOOST_TEST(testFF(S("mbtafndjcq"), "radgeskbtc", 9, 9, S::npos));
4609 BOOST_TEST(testFF(S("mlenkpfdtc"), "ljikprsmqo", 9, 10, S::npos));
4610 BOOST_TEST(testFF(S("ahlcifdqgs"), "trqihkcgsjamfdbolnpe", 9, 0, S::npos));
4611 BOOST_TEST(testFF(S("bgjemaltks"), "lqmthbsrekajgnofcipd", 9, 1, S::npos));
4612 BOOST_TEST(testFF(S("pdhslbqrfc"), "jtalmedribkgqsopcnfh", 9, 10, S::npos));
4613 BOOST_TEST(testFF(S("dirhtsnjkc"), "spqfoiclmtagejbndkrh", 9, 19, 9));
4614 BOOST_TEST(testFF(S("dlroktbcja"), "nmotklspigjrdhcfaebq", 9, 20, 9));
4615 BOOST_TEST(testFF(S("ncjpmaekbs"), "", 10, 0, S::npos));
4616 BOOST_TEST(testFF(S("hlbosgmrak"), "hpmsd", 10, 0, S::npos));
4617 BOOST_TEST(testFF(S("pqfhsgilen"), "qnpor", 10, 1, S::npos));
4618 BOOST_TEST(testFF(S("gqtjsbdckh"), "otdma", 10, 2, S::npos));
4619 BOOST_TEST(testFF(S("cfkqpjlegi"), "efhjg", 10, 4, S::npos));
4620 BOOST_TEST(testFF(S("beanrfodgj"), "odpte", 10, 5, S::npos));
4621 BOOST_TEST(testFF(S("adtkqpbjfi"), "bctdgfmolr", 10, 0, S::npos));
4622 BOOST_TEST(testFF(S("iomkfthagj"), "oaklidrbqg", 10, 1, S::npos));
4623 BOOST_TEST(testFF(S("sdpcilonqj"), "dnjfsagktr", 10, 5, S::npos));
4624 BOOST_TEST(testFF(S("gtfbdkqeml"), "nejaktmiqg", 10, 9, S::npos));
4625 BOOST_TEST(testFF(S("bmeqgcdorj"), "pjqonlebsf", 10, 10, S::npos));
4626 BOOST_TEST(testFF(S("etqlcanmob"), "dshmnbtolcjepgaikfqr", 10, 0, S::npos));
4627 BOOST_TEST(testFF(S("roqmkbdtia"), "iogfhpabtjkqlrnemcds", 10, 1, S::npos));
4628 BOOST_TEST(testFF(S("kadsithljf"), "ngridfabjsecpqltkmoh", 10, 10, S::npos));
4629 BOOST_TEST(testFF(S("sgtkpbfdmh"), "athmknplcgofrqejsdib", 10, 19, S::npos));
4630 BOOST_TEST(testFF(S("qgmetnabkl"), "ldobhmqcafnjtkeisgrp", 10, 20, S::npos));
4631 BOOST_TEST(testFF(S("cqjohampgd"), "", 11, 0, S::npos));
4632 BOOST_TEST(testFF(S("hobitmpsan"), "aocjb", 11, 0, S::npos));
4633 BOOST_TEST(testFF(S("tjehkpsalm"), "jbrnk", 11, 1, S::npos));
4634 BOOST_TEST(testFF(S("ngfbojitcl"), "tqedg", 11, 2, S::npos));
4635 BOOST_TEST(testFF(S("rcfkdbhgjo"), "nqskp", 11, 4, S::npos));
4636 BOOST_TEST(testFF(S("qghptonrea"), "eaqkl", 11, 5, S::npos));
4637 BOOST_TEST(testFF(S("hnprfgqjdl"), "reaoicljqm", 11, 0, S::npos));
4638 BOOST_TEST(testFF(S("hlmgabenti"), "lsftgajqpm", 11, 1, S::npos));
4639 BOOST_TEST(testFF(S("ofcjanmrbs"), "rlpfogmits", 11, 5, S::npos));
4640 BOOST_TEST(testFF(S("jqedtkornm"), "shkncmiaqj", 11, 9, S::npos));
4641 BOOST_TEST(testFF(S("rfedlasjmg"), "fpnatrhqgs", 11, 10, S::npos));
4642 BOOST_TEST(testFF(S("talpqjsgkm"), "sjclemqhnpdbgikarfot", 11, 0, S::npos));
4643 BOOST_TEST(testFF(S("lrkcbtqpie"), "otcmedjikgsfnqbrhpla", 11, 1, S::npos));
4644 BOOST_TEST(testFF(S("cipogdskjf"), "bonsaefdqiprkhlgtjcm", 11, 10, S::npos));
4645 BOOST_TEST(testFF(S("nqedcojahi"), "egpscmahijlfnkrodqtb", 11, 19, S::npos));
4646 BOOST_TEST(testFF(S("hefnrkmctj"), "kmqbfepjthgilscrndoa", 11, 20, S::npos));
4647 BOOST_TEST(testFF(S("atqirnmekfjolhpdsgcb"), "", 0, 0, S::npos));
4648 BOOST_TEST(testFF(S("echfkmlpribjnqsaogtd"), "prboq", 0, 0, S::npos));
4649 BOOST_TEST(testFF(S("qnhiftdgcleajbpkrosm"), "fjcqh", 0, 1, 4));
4650 BOOST_TEST(testFF(S("chamfknorbedjitgslpq"), "fmosa", 0, 2, 3));
4651 BOOST_TEST(testFF(S("njhqpibfmtlkaecdrgso"), "qdbok", 0, 4, 3));
4652 BOOST_TEST(testFF(S("ebnghfsqkprmdcljoiat"), "amslg", 0, 5, 3));
4653 BOOST_TEST(testFF(S("letjomsgihfrpqbkancd"), "smpltjneqb", 0, 0, S::npos));
4654 BOOST_TEST(testFF(S("nblgoipcrqeaktshjdmf"), "flitskrnge", 0, 1, 19));
4655 BOOST_TEST(testFF(S("cehkbngtjoiflqapsmrd"), "pgqihmlbef", 0, 5, 2));
4656 BOOST_TEST(testFF(S("mignapfoklbhcqjetdrs"), "cfpdqjtgsb", 0, 9, 2));
4657 BOOST_TEST(testFF(S("ceatbhlsqjgpnokfrmdi"), "htpsiaflom", 0, 10, 2));
4658 BOOST_TEST(testFF(S("ocihkjgrdelpfnmastqb"), "kpjfiaceghsrdtlbnomq", 0, 0, S::npos));
4659 BOOST_TEST(testFF(S("noelgschdtbrjfmiqkap"), "qhtbomidljgafneksprc", 0, 1, 16));
4660 BOOST_TEST(testFF(S("dkclqfombepritjnghas"), "nhtjobkcefldimpsaqgr", 0, 10, 1));
4661 BOOST_TEST(testFF(S("miklnresdgbhqcojftap"), "prabcjfqnoeskilmtgdh", 0, 19, 0));
4662 BOOST_TEST(testFF(S("htbcigojaqmdkfrnlsep"), "dtrgmchilkasqoebfpjn", 0, 20, 0));
4663 BOOST_TEST(testFF(S("febhmqtjanokscdirpgl"), "", 1, 0, S::npos));
4664 BOOST_TEST(testFF(S("loakbsqjpcrdhftniegm"), "sqome", 1, 0, S::npos));
4665 BOOST_TEST(testFF(S("reagphsqflbitdcjmkno"), "smfte", 1, 1, 6));
4666 BOOST_TEST(testFF(S("jitlfrqemsdhkopncabg"), "ciboh", 1, 2, 1));
4667 BOOST_TEST(testFF(S("mhtaepscdnrjqgbkifol"), "haois", 1, 4, 1));
4668 BOOST_TEST(testFF(S("tocesrfmnglpbjihqadk"), "abfki", 1, 5, 6));
4669 BOOST_TEST(testFF(S("lpfmctjrhdagneskbqoi"), "frdkocntmq", 1, 0, S::npos));
4670 BOOST_TEST(testFF(S("lsmqaepkdhncirbtjfgo"), "oasbpedlnr", 1, 1, 19));
4671 BOOST_TEST(testFF(S("epoiqmtldrabnkjhcfsg"), "kltqmhgand", 1, 5, 4));
4672 BOOST_TEST(testFF(S("emgasrilpknqojhtbdcf"), "gdtfjchpmr", 1, 9, 1));
4673 BOOST_TEST(testFF(S("hnfiagdpcklrjetqbsom"), "ponmcqblet", 1, 10, 1));
4674 BOOST_TEST(testFF(S("nsdfebgajhmtricpoklq"), "sgphqdnofeiklatbcmjr", 1, 0, S::npos));
4675 BOOST_TEST(testFF(S("atjgfsdlpobmeiqhncrk"), "ljqprsmigtfoneadckbh", 1, 1, 7));
4676 BOOST_TEST(testFF(S("sitodfgnrejlahcbmqkp"), "ligeojhafnkmrcsqtbdp", 1, 10, 1));
4677 BOOST_TEST(testFF(S("fraghmbiceknltjpqosd"), "lsimqfnjarbopedkhcgt", 1, 19, 1));
4678 BOOST_TEST(testFF(S("pmafenlhqtdbkirjsogc"), "abedmfjlghniorcqptks", 1, 20, 1));
4679 BOOST_TEST(testFF(S("pihgmoeqtnakrjslcbfd"), "", 10, 0, S::npos));
4680 BOOST_TEST(testFF(S("gjdkeprctqblnhiafsom"), "hqtoa", 10, 0, S::npos));
4681 BOOST_TEST(testFF(S("mkpnblfdsahrcqijteog"), "cahif", 10, 1, 12));
4682 BOOST_TEST(testFF(S("gckarqnelodfjhmbptis"), "kehis", 10, 2, S::npos));
4683 BOOST_TEST(testFF(S("gqpskidtbclomahnrjfe"), "kdlmh", 10, 4, 10));
4684 BOOST_TEST(testFF(S("pkldjsqrfgitbhmaecno"), "paeql", 10, 5, 15));
4685 BOOST_TEST(testFF(S("aftsijrbeklnmcdqhgop"), "aghoqiefnb", 10, 0, S::npos));
4686 BOOST_TEST(testFF(S("mtlgdrhafjkbiepqnsoc"), "jrbqaikpdo", 10, 1, S::npos));
4687 BOOST_TEST(testFF(S("pqgirnaefthokdmbsclj"), "smjonaeqcl", 10, 5, 11));
4688 BOOST_TEST(testFF(S("kpdbgjmtherlsfcqoina"), "eqbdrkcfah", 10, 9, 10));
4689 BOOST_TEST(testFF(S("jrlbothiknqmdgcfasep"), "kapmsienhf", 10, 10, 11));
4690 BOOST_TEST(testFF(S("mjogldqferckabinptsh"), "jpqotrlenfcsbhkaimdg", 10, 0, S::npos));
4691 BOOST_TEST(testFF(S("apoklnefbhmgqcdrisjt"), "jlbmhnfgtcqprikeados", 10, 1, 18));
4692 BOOST_TEST(testFF(S("ifeopcnrjbhkdgatmqls"), "stgbhfmdaljnpqoicker", 10, 10, 10));
4693 BOOST_TEST(testFF(S("ckqhaiesmjdnrgolbtpf"), "oihcetflbjagdsrkmqpn", 10, 19, 10));
4694 BOOST_TEST(testFF(S("bnlgapfimcoterskqdjh"), "adtclebmnpjsrqfkigoh", 10, 20, 10));
4695 BOOST_TEST(testFF(S("kgdlrobpmjcthqsafeni"), "", 19, 0, S::npos));
4696 BOOST_TEST(testFF(S("dfkechomjapgnslbtqir"), "beafg", 19, 0, S::npos));
4697 BOOST_TEST(testFF(S("rloadknfbqtgmhcsipje"), "iclat", 19, 1, S::npos));
4698 BOOST_TEST(testFF(S("mgjhkolrnadqbpetcifs"), "rkhnf", 19, 2, S::npos));
4699 BOOST_TEST(testFF(S("cmlfakiojdrgtbsphqen"), "clshq", 19, 4, S::npos));
4700 BOOST_TEST(testFF(S("kghbfipeomsntdalrqjc"), "dtcoj", 19, 5, 19));
4701 BOOST_TEST(testFF(S("eldiqckrnmtasbghjfpo"), "rqosnjmfth", 19, 0, S::npos));
4702 BOOST_TEST(testFF(S("abqjcfedgotihlnspkrm"), "siatdfqglh", 19, 1, S::npos));
4703 BOOST_TEST(testFF(S("qfbadrtjsimkolcenhpg"), "mrlshtpgjq", 19, 5, S::npos));
4704 BOOST_TEST(testFF(S("abseghclkjqifmtodrnp"), "adlcskgqjt", 19, 9, S::npos));
4705 BOOST_TEST(testFF(S("ibmsnlrjefhtdokacqpg"), "drshcjknaf", 19, 10, S::npos));
4706 BOOST_TEST(testFF(S("mrkfciqjebaponsthldg"), "etsaqroinghpkjdlfcbm", 19, 0, S::npos));
4707 BOOST_TEST(testFF(S("mjkticdeoqshpalrfbgn"), "sgepdnkqliambtrocfhj", 19, 1, S::npos));
4708 BOOST_TEST(testFF(S("rqnoclbdejgiphtfsakm"), "nlmcjaqgbsortfdihkpe", 19, 10, 19));
4709 BOOST_TEST(testFF(S("plkqbhmtfaeodjcrsing"), "racfnpmosldibqkghjet", 19, 19, 19));
4710 BOOST_TEST(testFF(S("oegalhmstjrfickpbndq"), "fjhdsctkqeiolagrnmbp", 19, 20, 19));
4711 BOOST_TEST(testFF(S("rdtgjcaohpblniekmsfq"), "", 20, 0, S::npos));
4712 BOOST_TEST(testFF(S("ofkqbnjetrmsaidphglc"), "ejanp", 20, 0, S::npos));
4713 BOOST_TEST(testFF(S("grkpahljcftesdmonqib"), "odife", 20, 1, S::npos));
4714 BOOST_TEST(testFF(S("jimlgbhfqkteospardcn"), "okaqd", 20, 2, S::npos));
4715 BOOST_TEST(testFF(S("gftenihpmslrjkqadcob"), "lcdbi", 20, 4, S::npos));
4716 BOOST_TEST(testFF(S("bmhldogtckrfsanijepq"), "fsqbj", 20, 5, S::npos));
4717 BOOST_TEST(testFF(S("nfqkrpjdesabgtlcmoih"), "bigdomnplq", 20, 0, S::npos));
4718 BOOST_TEST(testFF(S("focalnrpiqmdkstehbjg"), "apiblotgcd", 20, 1, S::npos));
4719 BOOST_TEST(testFF(S("rhqdspkmebiflcotnjga"), "acfhdenops", 20, 5, S::npos));
4720 BOOST_TEST(testFF(S("rahdtmsckfboqlpniegj"), "jopdeamcrk", 20, 9, S::npos));
4721 BOOST_TEST(testFF(S("fbkeiopclstmdqranjhg"), "trqncbkgmh", 20, 10, S::npos));
4722 BOOST_TEST(testFF(S("lifhpdgmbconstjeqark"), "tomglrkencbsfjqpihda", 20, 0, S::npos));
4723
4724 // find_last_of
4725
4726 BOOST_TEST(fs1.find_last_of(v1) == 4);
4727 BOOST_TEST(fs1.find_last_of(v2) == 4);
4728 BOOST_TEST(fs1.find_last_of(fs1) == 4);
4729 BOOST_TEST(fs1.find_last_of(fs2) == 4);
4730
4731 BOOST_TEST(fs1.find_last_of(cs1) == 4);
4732 BOOST_TEST(fs1.find_last_of(cs2) == 4);
4733
4734 BOOST_TEST(fs1.find_last_of(cs1, 0) == 0);
4735 BOOST_TEST(fs1.find_last_of(cs2, 0) == S::npos);
4736
4737 BOOST_TEST(fs1.find_last_of(cs2, 0, 2) == S::npos);
4738
4739 BOOST_TEST(fs1.find_last_of(cs1, 4) == 4);
4740 BOOST_TEST(fs1.find_last_of(cs2, 4) == 4);
4741
4742 BOOST_TEST(fs1.find_last_of('1') == 0);
4743 BOOST_TEST(fs1.find_last_of('5', 3) == S::npos);
4744
4745 BOOST_TEST(testFL(S(""), "", 0, 0, S::npos));
4746 BOOST_TEST(testFL(S(""), "irkhs", 0, 0, S::npos));
4747 BOOST_TEST(testFL(S(""), "kante", 0, 1, S::npos));
4748 BOOST_TEST(testFL(S(""), "oknlr", 0, 2, S::npos));
4749 BOOST_TEST(testFL(S(""), "pcdro", 0, 4, S::npos));
4750 BOOST_TEST(testFL(S(""), "bnrpe", 0, 5, S::npos));
4751 BOOST_TEST(testFL(S(""), "jtdaefblso", 0, 0, S::npos));
4752 BOOST_TEST(testFL(S(""), "oselktgbca", 0, 1, S::npos));
4753 BOOST_TEST(testFL(S(""), "eqgaplhckj", 0, 5, S::npos));
4754 BOOST_TEST(testFL(S(""), "bjahtcmnlp", 0, 9, S::npos));
4755 BOOST_TEST(testFL(S(""), "hjlcmgpket", 0, 10, S::npos));
4756 BOOST_TEST(testFL(S(""), "htaobedqikfplcgjsmrn", 0, 0, S::npos));
4757 BOOST_TEST(testFL(S(""), "hpqiarojkcdlsgnmfetb", 0, 1, S::npos));
4758 BOOST_TEST(testFL(S(""), "dfkaprhjloqetcsimnbg", 0, 10, S::npos));
4759 BOOST_TEST(testFL(S(""), "ihqrfebgadntlpmjksoc", 0, 19, S::npos));
4760 BOOST_TEST(testFL(S(""), "ngtjfcalbseiqrphmkdo", 0, 20, S::npos));
4761 BOOST_TEST(testFL(S(""), "", 1, 0, S::npos));
4762 BOOST_TEST(testFL(S(""), "lbtqd", 1, 0, S::npos));
4763 BOOST_TEST(testFL(S(""), "tboim", 1, 1, S::npos));
4764 BOOST_TEST(testFL(S(""), "slcer", 1, 2, S::npos));
4765 BOOST_TEST(testFL(S(""), "cbjfs", 1, 4, S::npos));
4766 BOOST_TEST(testFL(S(""), "aqibs", 1, 5, S::npos));
4767 BOOST_TEST(testFL(S(""), "gtfblmqinc", 1, 0, S::npos));
4768 BOOST_TEST(testFL(S(""), "mkqpbtdalg", 1, 1, S::npos));
4769 BOOST_TEST(testFL(S(""), "kphatlimcd", 1, 5, S::npos));
4770 BOOST_TEST(testFL(S(""), "pblasqogic", 1, 9, S::npos));
4771 BOOST_TEST(testFL(S(""), "arosdhcfme", 1, 10, S::npos));
4772 BOOST_TEST(testFL(S(""), "blkhjeogicatqfnpdmsr", 1, 0, S::npos));
4773 BOOST_TEST(testFL(S(""), "bmhineprjcoadgstflqk", 1, 1, S::npos));
4774 BOOST_TEST(testFL(S(""), "djkqcmetslnghpbarfoi", 1, 10, S::npos));
4775 BOOST_TEST(testFL(S(""), "lgokshjtpbemarcdqnfi", 1, 19, S::npos));
4776 BOOST_TEST(testFL(S(""), "bqjhtkfepimcnsgrlado", 1, 20, S::npos));
4777 BOOST_TEST(testFL(S("eaint"), "", 0, 0, S::npos));
4778 BOOST_TEST(testFL(S("binja"), "gfsrt", 0, 0, S::npos));
4779 BOOST_TEST(testFL(S("latkm"), "pfsoc", 0, 1, S::npos));
4780 BOOST_TEST(testFL(S("lecfr"), "tpflm", 0, 2, S::npos));
4781 BOOST_TEST(testFL(S("eqkst"), "sgkec", 0, 4, 0));
4782 BOOST_TEST(testFL(S("cdafr"), "romds", 0, 5, S::npos));
4783 BOOST_TEST(testFL(S("prbhe"), "qhjistlgmr", 0, 0, S::npos));
4784 BOOST_TEST(testFL(S("lbisk"), "pedfirsglo", 0, 1, S::npos));
4785 BOOST_TEST(testFL(S("hrlpd"), "aqcoslgrmk", 0, 5, S::npos));
4786 BOOST_TEST(testFL(S("ehmja"), "dabckmepqj", 0, 9, 0));
4787 BOOST_TEST(testFL(S("mhqgd"), "pqscrjthli", 0, 10, S::npos));
4788 BOOST_TEST(testFL(S("tgklq"), "kfphdcsjqmobliagtren", 0, 0, S::npos));
4789 BOOST_TEST(testFL(S("bocjs"), "rokpefncljibsdhqtagm", 0, 1, S::npos));
4790 BOOST_TEST(testFL(S("grbsd"), "afionmkphlebtcjqsgrd", 0, 10, S::npos));
4791 BOOST_TEST(testFL(S("ofjqr"), "aenmqplidhkofrjbctsg", 0, 19, 0));
4792 BOOST_TEST(testFL(S("btlfi"), "osjmbtcadhiklegrpqnf", 0, 20, 0));
4793 BOOST_TEST(testFL(S("clrgb"), "", 1, 0, S::npos));
4794 BOOST_TEST(testFL(S("tjmek"), "osmia", 1, 0, S::npos));
4795 BOOST_TEST(testFL(S("bgstp"), "ckonl", 1, 1, S::npos));
4796 BOOST_TEST(testFL(S("hstrk"), "ilcaj", 1, 2, S::npos));
4797 BOOST_TEST(testFL(S("kmspj"), "lasiq", 1, 4, S::npos));
4798 BOOST_TEST(testFL(S("tjboh"), "kfqmr", 1, 5, S::npos));
4799 BOOST_TEST(testFL(S("ilbcj"), "klnitfaobg", 1, 0, S::npos));
4800 BOOST_TEST(testFL(S("jkngf"), "gjhmdlqikp", 1, 1, S::npos));
4801 BOOST_TEST(testFL(S("gfcql"), "skbgtahqej", 1, 5, 0));
4802 BOOST_TEST(testFL(S("dqtlg"), "bjsdgtlpkf", 1, 9, 0));
4803 BOOST_TEST(testFL(S("bthpg"), "bjgfmnlkio", 1, 10, 0));
4804 BOOST_TEST(testFL(S("dgsnq"), "lbhepotfsjdqigcnamkr", 1, 0, S::npos));
4805 BOOST_TEST(testFL(S("rmfhp"), "tebangckmpsrqdlfojhi", 1, 1, S::npos));
4806 BOOST_TEST(testFL(S("jfdam"), "joflqbdkhtegimscpanr", 1, 10, 1));
4807 BOOST_TEST(testFL(S("edapb"), "adpmcohetfbsrjinlqkg", 1, 19, 1));
4808 BOOST_TEST(testFL(S("brfsm"), "iacldqjpfnogbsrhmetk", 1, 20, 1));
4809 BOOST_TEST(testFL(S("ndrhl"), "", 2, 0, S::npos));
4810 BOOST_TEST(testFL(S("mrecp"), "otkgb", 2, 0, S::npos));
4811 BOOST_TEST(testFL(S("qlasf"), "cqsjl", 2, 1, S::npos));
4812 BOOST_TEST(testFL(S("smaqd"), "dpifl", 2, 2, S::npos));
4813 BOOST_TEST(testFL(S("hjeni"), "oapht", 2, 4, 0));
4814 BOOST_TEST(testFL(S("ocmfj"), "cifts", 2, 5, 1));
4815 BOOST_TEST(testFL(S("hmftq"), "nmsckbgalo", 2, 0, S::npos));
4816 BOOST_TEST(testFL(S("fklad"), "tpksqhamle", 2, 1, S::npos));
4817 BOOST_TEST(testFL(S("dirnm"), "tpdrchmkji", 2, 5, 2));
4818 BOOST_TEST(testFL(S("hrgdc"), "ijagfkblst", 2, 9, 2));
4819 BOOST_TEST(testFL(S("ifakg"), "kpocsignjb", 2, 10, 0));
4820 BOOST_TEST(testFL(S("ebrgd"), "pecqtkjsnbdrialgmohf", 2, 0, S::npos));
4821 BOOST_TEST(testFL(S("rcjml"), "aiortphfcmkjebgsndql", 2, 1, S::npos));
4822 BOOST_TEST(testFL(S("peqmt"), "sdbkeamglhipojqftrcn", 2, 10, 1));
4823 BOOST_TEST(testFL(S("frehn"), "ljqncehgmfktroapidbs", 2, 19, 2));
4824 BOOST_TEST(testFL(S("tqolf"), "rtcfodilamkbenjghqps", 2, 20, 2));
4825 BOOST_TEST(testFL(S("cjgao"), "", 4, 0, S::npos));
4826 BOOST_TEST(testFL(S("kjplq"), "mabns", 4, 0, S::npos));
4827 BOOST_TEST(testFL(S("herni"), "bdnrp", 4, 1, S::npos));
4828 BOOST_TEST(testFL(S("tadrb"), "scidp", 4, 2, S::npos));
4829 BOOST_TEST(testFL(S("pkfeo"), "agbjl", 4, 4, S::npos));
4830 BOOST_TEST(testFL(S("hoser"), "jfmpr", 4, 5, 4));
4831 BOOST_TEST(testFL(S("kgrsp"), "rbpefghsmj", 4, 0, S::npos));
4832 BOOST_TEST(testFL(S("pgejb"), "apsfntdoqc", 4, 1, S::npos));
4833 BOOST_TEST(testFL(S("thlnq"), "ndkjeisgcl", 4, 5, 3));
4834 BOOST_TEST(testFL(S("nbmit"), "rnfpqatdeo", 4, 9, 4));
4835 BOOST_TEST(testFL(S("jgmib"), "bntjlqrfik", 4, 10, 4));
4836 BOOST_TEST(testFL(S("ncrfj"), "kcrtmpolnaqejghsfdbi", 4, 0, S::npos));
4837 BOOST_TEST(testFL(S("ncsik"), "lobheanpkmqidsrtcfgj", 4, 1, S::npos));
4838 BOOST_TEST(testFL(S("sgbfh"), "athdkljcnreqbgpmisof", 4, 10, 4));
4839 BOOST_TEST(testFL(S("dktbn"), "qkdmjialrscpbhefgont", 4, 19, 4));
4840 BOOST_TEST(testFL(S("fthqm"), "dmasojntqleribkgfchp", 4, 20, 4));
4841 BOOST_TEST(testFL(S("klopi"), "", 5, 0, S::npos));
4842 BOOST_TEST(testFL(S("dajhn"), "psthd", 5, 0, S::npos));
4843 BOOST_TEST(testFL(S("jbgno"), "rpmjd", 5, 1, S::npos));
4844 BOOST_TEST(testFL(S("hkjae"), "dfsmk", 5, 2, S::npos));
4845 BOOST_TEST(testFL(S("gbhqo"), "skqne", 5, 4, 3));
4846 BOOST_TEST(testFL(S("ktdor"), "kipnf", 5, 5, 0));
4847 BOOST_TEST(testFL(S("ldprn"), "hmrnqdgifl", 5, 0, S::npos));
4848 BOOST_TEST(testFL(S("egmjk"), "fsmjcdairn", 5, 1, S::npos));
4849 BOOST_TEST(testFL(S("armql"), "pcdgltbrfj", 5, 5, 4));
4850 BOOST_TEST(testFL(S("cdhjo"), "aekfctpirg", 5, 9, 0));
4851 BOOST_TEST(testFL(S("jcons"), "ledihrsgpf", 5, 10, 4));
4852 BOOST_TEST(testFL(S("cbrkp"), "mqcklahsbtirgopefndj", 5, 0, S::npos));
4853 BOOST_TEST(testFL(S("fhgna"), "kmlthaoqgecrnpdbjfis", 5, 1, S::npos));
4854 BOOST_TEST(testFL(S("ejfcd"), "sfhbamcdptojlkrenqgi", 5, 10, 4));
4855 BOOST_TEST(testFL(S("kqjhe"), "pbniofmcedrkhlstgaqj", 5, 19, 4));
4856 BOOST_TEST(testFL(S("pbdjl"), "mongjratcskbhqiepfdl", 5, 20, 4));
4857 BOOST_TEST(testFL(S("gajqn"), "", 6, 0, S::npos));
4858 BOOST_TEST(testFL(S("stedk"), "hrnat", 6, 0, S::npos));
4859 BOOST_TEST(testFL(S("tjkaf"), "gsqdt", 6, 1, S::npos));
4860 BOOST_TEST(testFL(S("dthpe"), "bspkd", 6, 2, S::npos));
4861 BOOST_TEST(testFL(S("klhde"), "ohcmb", 6, 4, 2));
4862 BOOST_TEST(testFL(S("bhlki"), "heatr", 6, 5, 1));
4863 BOOST_TEST(testFL(S("lqmoh"), "pmblckedfn", 6, 0, S::npos));
4864 BOOST_TEST(testFL(S("mtqin"), "aceqmsrbik", 6, 1, S::npos));
4865 BOOST_TEST(testFL(S("dpqbr"), "lmbtdehjrn", 6, 5, 3));
4866 BOOST_TEST(testFL(S("kdhmo"), "teqmcrlgib", 6, 9, 3));
4867 BOOST_TEST(testFL(S("jblqp"), "njolbmspac", 6, 10, 4));
4868 BOOST_TEST(testFL(S("qmjgl"), "pofnhidklamecrbqjgst", 6, 0, S::npos));
4869 BOOST_TEST(testFL(S("rothp"), "jbhckmtgrqnosafedpli", 6, 1, S::npos));
4870 BOOST_TEST(testFL(S("ghknq"), "dobntpmqklicsahgjerf", 6, 10, 4));
4871 BOOST_TEST(testFL(S("eopfi"), "tpdshainjkbfoemlrgcq", 6, 19, 4));
4872 BOOST_TEST(testFL(S("dsnmg"), "oldpfgeakrnitscbjmqh", 6, 20, 4));
4873 BOOST_TEST(testFL(S("jnkrfhotgl"), "", 0, 0, S::npos));
4874 BOOST_TEST(testFL(S("dltjfngbko"), "rqegt", 0, 0, S::npos));
4875 BOOST_TEST(testFL(S("bmjlpkiqde"), "dashm", 0, 1, S::npos));
4876 BOOST_TEST(testFL(S("skrflobnqm"), "jqirk", 0, 2, S::npos));
4877 BOOST_TEST(testFL(S("jkpldtshrm"), "rckeg", 0, 4, S::npos));
4878 BOOST_TEST(testFL(S("ghasdbnjqo"), "jscie", 0, 5, S::npos));
4879 BOOST_TEST(testFL(S("igrkhpbqjt"), "efsphndliq", 0, 0, S::npos));
4880 BOOST_TEST(testFL(S("ikthdgcamf"), "gdicosleja", 0, 1, S::npos));
4881 BOOST_TEST(testFL(S("pcofgeniam"), "qcpjibosfl", 0, 5, 0));
4882 BOOST_TEST(testFL(S("rlfjgesqhc"), "lrhmefnjcq", 0, 9, 0));
4883 BOOST_TEST(testFL(S("itphbqsker"), "dtablcrseo", 0, 10, S::npos));
4884 BOOST_TEST(testFL(S("skjafcirqm"), "apckjsftedbhgomrnilq", 0, 0, S::npos));
4885 BOOST_TEST(testFL(S("tcqomarsfd"), "pcbrgflehjtiadnsokqm", 0, 1, S::npos));
4886 BOOST_TEST(testFL(S("rocfeldqpk"), "nsiadegjklhobrmtqcpf", 0, 10, S::npos));
4887 BOOST_TEST(testFL(S("cfpegndlkt"), "cpmajdqnolikhgsbretf", 0, 19, 0));
4888 BOOST_TEST(testFL(S("fqbtnkeasj"), "jcflkntmgiqrphdosaeb", 0, 20, 0));
4889 BOOST_TEST(testFL(S("shbcqnmoar"), "", 1, 0, S::npos));
4890 BOOST_TEST(testFL(S("bdoshlmfin"), "ontrs", 1, 0, S::npos));
4891 BOOST_TEST(testFL(S("khfrebnsgq"), "pfkna", 1, 1, S::npos));
4892 BOOST_TEST(testFL(S("getcrsaoji"), "ekosa", 1, 2, 1));
4893 BOOST_TEST(testFL(S("fjiknedcpq"), "anqhk", 1, 4, S::npos));
4894 BOOST_TEST(testFL(S("tkejgnafrm"), "jekca", 1, 5, 1));
4895 BOOST_TEST(testFL(S("jnakolqrde"), "ikemsjgacf", 1, 0, S::npos));
4896 BOOST_TEST(testFL(S("lcjptsmgbe"), "arolgsjkhm", 1, 1, S::npos));
4897 BOOST_TEST(testFL(S("itfsmcjorl"), "oftkbldhre", 1, 5, 1));
4898 BOOST_TEST(testFL(S("omchkfrjea"), "gbkqdoeftl", 1, 9, 0));
4899 BOOST_TEST(testFL(S("cigfqkated"), "sqcflrgtim", 1, 10, 1));
4900 BOOST_TEST(testFL(S("tscenjikml"), "fmhbkislrjdpanogqcet", 1, 0, S::npos));
4901 BOOST_TEST(testFL(S("qcpaemsinf"), "rnioadktqlgpbcjsmhef", 1, 1, S::npos));
4902 BOOST_TEST(testFL(S("gltkojeipd"), "oakgtnldpsefihqmjcbr", 1, 10, 1));
4903 BOOST_TEST(testFL(S("qistfrgnmp"), "gbnaelosidmcjqktfhpr", 1, 19, 1));
4904 BOOST_TEST(testFL(S("bdnpfcqaem"), "akbripjhlosndcmqgfet", 1, 20, 1));
4905 BOOST_TEST(testFL(S("ectnhskflp"), "", 5, 0, S::npos));
4906 BOOST_TEST(testFL(S("fgtianblpq"), "pijag", 5, 0, S::npos));
4907 BOOST_TEST(testFL(S("mfeqklirnh"), "jrckd", 5, 1, S::npos));
4908 BOOST_TEST(testFL(S("astedncjhk"), "qcloh", 5, 2, S::npos));
4909 BOOST_TEST(testFL(S("fhlqgcajbr"), "thlmp", 5, 4, 2));
4910 BOOST_TEST(testFL(S("epfhocmdng"), "qidmo", 5, 5, 4));
4911 BOOST_TEST(testFL(S("apcnsibger"), "lnegpsjqrd", 5, 0, S::npos));
4912 BOOST_TEST(testFL(S("aqkocrbign"), "rjqdablmfs", 5, 1, 5));
4913 BOOST_TEST(testFL(S("ijsmdtqgce"), "enkgpbsjaq", 5, 5, S::npos));
4914 BOOST_TEST(testFL(S("clobgsrken"), "kdsgoaijfh", 5, 9, 5));
4915 BOOST_TEST(testFL(S("jbhcfposld"), "trfqgmckbe", 5, 10, 4));
4916 BOOST_TEST(testFL(S("oqnpblhide"), "igetsracjfkdnpoblhqm", 5, 0, S::npos));
4917 BOOST_TEST(testFL(S("lroeasctif"), "nqctfaogirshlekbdjpm", 5, 1, S::npos));
4918 BOOST_TEST(testFL(S("bpjlgmiedh"), "csehfgomljdqinbartkp", 5, 10, 5));
4919 BOOST_TEST(testFL(S("pamkeoidrj"), "qahoegcmplkfsjbdnitr", 5, 19, 5));
4920 BOOST_TEST(testFL(S("espogqbthk"), "dpteiajrqmsognhlfbkc", 5, 20, 5));
4921 BOOST_TEST(testFL(S("shoiedtcjb"), "", 9, 0, S::npos));
4922 BOOST_TEST(testFL(S("ebcinjgads"), "tqbnh", 9, 0, S::npos));
4923 BOOST_TEST(testFL(S("dqmregkcfl"), "akmle", 9, 1, S::npos));
4924 BOOST_TEST(testFL(S("ngcrieqajf"), "iqfkm", 9, 2, 6));
4925 BOOST_TEST(testFL(S("qosmilgnjb"), "tqjsr", 9, 4, 8));
4926 BOOST_TEST(testFL(S("ikabsjtdfl"), "jplqg", 9, 5, 9));
4927 BOOST_TEST(testFL(S("ersmicafdh"), "oilnrbcgtj", 9, 0, S::npos));
4928 BOOST_TEST(testFL(S("fdnplotmgh"), "morkglpesn", 9, 1, 7));
4929 BOOST_TEST(testFL(S("fdbicojerm"), "dmicerngat", 9, 5, 9));
4930 BOOST_TEST(testFL(S("mbtafndjcq"), "radgeskbtc", 9, 9, 6));
4931 BOOST_TEST(testFL(S("mlenkpfdtc"), "ljikprsmqo", 9, 10, 5));
4932 BOOST_TEST(testFL(S("ahlcifdqgs"), "trqihkcgsjamfdbolnpe", 9, 0, S::npos));
4933 BOOST_TEST(testFL(S("bgjemaltks"), "lqmthbsrekajgnofcipd", 9, 1, 6));
4934 BOOST_TEST(testFL(S("pdhslbqrfc"), "jtalmedribkgqsopcnfh", 9, 10, 7));
4935 BOOST_TEST(testFL(S("dirhtsnjkc"), "spqfoiclmtagejbndkrh", 9, 19, 9));
4936 BOOST_TEST(testFL(S("dlroktbcja"), "nmotklspigjrdhcfaebq", 9, 20, 9));
4937 BOOST_TEST(testFL(S("ncjpmaekbs"), "", 10, 0, S::npos));
4938 BOOST_TEST(testFL(S("hlbosgmrak"), "hpmsd", 10, 0, S::npos));
4939 BOOST_TEST(testFL(S("pqfhsgilen"), "qnpor", 10, 1, 1));
4940 BOOST_TEST(testFL(S("gqtjsbdckh"), "otdma", 10, 2, 2));
4941 BOOST_TEST(testFL(S("cfkqpjlegi"), "efhjg", 10, 4, 7));
4942 BOOST_TEST(testFL(S("beanrfodgj"), "odpte", 10, 5, 7));
4943 BOOST_TEST(testFL(S("adtkqpbjfi"), "bctdgfmolr", 10, 0, S::npos));
4944 BOOST_TEST(testFL(S("iomkfthagj"), "oaklidrbqg", 10, 1, 1));
4945 BOOST_TEST(testFL(S("sdpcilonqj"), "dnjfsagktr", 10, 5, 9));
4946 BOOST_TEST(testFL(S("gtfbdkqeml"), "nejaktmiqg", 10, 9, 8));
4947 BOOST_TEST(testFL(S("bmeqgcdorj"), "pjqonlebsf", 10, 10, 9));
4948 BOOST_TEST(testFL(S("etqlcanmob"), "dshmnbtolcjepgaikfqr", 10, 0, S::npos));
4949 BOOST_TEST(testFL(S("roqmkbdtia"), "iogfhpabtjkqlrnemcds", 10, 1, 8));
4950 BOOST_TEST(testFL(S("kadsithljf"), "ngridfabjsecpqltkmoh", 10, 10, 9));
4951 BOOST_TEST(testFL(S("sgtkpbfdmh"), "athmknplcgofrqejsdib", 10, 19, 9));
4952 BOOST_TEST(testFL(S("qgmetnabkl"), "ldobhmqcafnjtkeisgrp", 10, 20, 9));
4953 BOOST_TEST(testFL(S("cqjohampgd"), "", 11, 0, S::npos));
4954 BOOST_TEST(testFL(S("hobitmpsan"), "aocjb", 11, 0, S::npos));
4955 BOOST_TEST(testFL(S("tjehkpsalm"), "jbrnk", 11, 1, 1));
4956 BOOST_TEST(testFL(S("ngfbojitcl"), "tqedg", 11, 2, 7));
4957 BOOST_TEST(testFL(S("rcfkdbhgjo"), "nqskp", 11, 4, 3));
4958 BOOST_TEST(testFL(S("qghptonrea"), "eaqkl", 11, 5, 9));
4959 BOOST_TEST(testFL(S("hnprfgqjdl"), "reaoicljqm", 11, 0, S::npos));
4960 BOOST_TEST(testFL(S("hlmgabenti"), "lsftgajqpm", 11, 1, 1));
4961 BOOST_TEST(testFL(S("ofcjanmrbs"), "rlpfogmits", 11, 5, 7));
4962 BOOST_TEST(testFL(S("jqedtkornm"), "shkncmiaqj", 11, 9, 9));
4963 BOOST_TEST(testFL(S("rfedlasjmg"), "fpnatrhqgs", 11, 10, 9));
4964 BOOST_TEST(testFL(S("talpqjsgkm"), "sjclemqhnpdbgikarfot", 11, 0, S::npos));
4965 BOOST_TEST(testFL(S("lrkcbtqpie"), "otcmedjikgsfnqbrhpla", 11, 1, S::npos));
4966 BOOST_TEST(testFL(S("cipogdskjf"), "bonsaefdqiprkhlgtjcm", 11, 10, 9));
4967 BOOST_TEST(testFL(S("nqedcojahi"), "egpscmahijlfnkrodqtb", 11, 19, 9));
4968 BOOST_TEST(testFL(S("hefnrkmctj"), "kmqbfepjthgilscrndoa", 11, 20, 9));
4969 BOOST_TEST(testFL(S("atqirnmekfjolhpdsgcb"), "", 0, 0, S::npos));
4970 BOOST_TEST(testFL(S("echfkmlpribjnqsaogtd"), "prboq", 0, 0, S::npos));
4971 BOOST_TEST(testFL(S("qnhiftdgcleajbpkrosm"), "fjcqh", 0, 1, S::npos));
4972 BOOST_TEST(testFL(S("chamfknorbedjitgslpq"), "fmosa", 0, 2, S::npos));
4973 BOOST_TEST(testFL(S("njhqpibfmtlkaecdrgso"), "qdbok", 0, 4, S::npos));
4974 BOOST_TEST(testFL(S("ebnghfsqkprmdcljoiat"), "amslg", 0, 5, S::npos));
4975 BOOST_TEST(testFL(S("letjomsgihfrpqbkancd"), "smpltjneqb", 0, 0, S::npos));
4976 BOOST_TEST(testFL(S("nblgoipcrqeaktshjdmf"), "flitskrnge", 0, 1, S::npos));
4977 BOOST_TEST(testFL(S("cehkbngtjoiflqapsmrd"), "pgqihmlbef", 0, 5, S::npos));
4978 BOOST_TEST(testFL(S("mignapfoklbhcqjetdrs"), "cfpdqjtgsb", 0, 9, S::npos));
4979 BOOST_TEST(testFL(S("ceatbhlsqjgpnokfrmdi"), "htpsiaflom", 0, 10, S::npos));
4980 BOOST_TEST(testFL(S("ocihkjgrdelpfnmastqb"), "kpjfiaceghsrdtlbnomq", 0, 0, S::npos));
4981 BOOST_TEST(testFL(S("noelgschdtbrjfmiqkap"), "qhtbomidljgafneksprc", 0, 1, S::npos));
4982 BOOST_TEST(testFL(S("dkclqfombepritjnghas"), "nhtjobkcefldimpsaqgr", 0, 10, S::npos));
4983 BOOST_TEST(testFL(S("miklnresdgbhqcojftap"), "prabcjfqnoeskilmtgdh", 0, 19, 0));
4984 BOOST_TEST(testFL(S("htbcigojaqmdkfrnlsep"), "dtrgmchilkasqoebfpjn", 0, 20, 0));
4985 BOOST_TEST(testFL(S("febhmqtjanokscdirpgl"), "", 1, 0, S::npos));
4986 BOOST_TEST(testFL(S("loakbsqjpcrdhftniegm"), "sqome", 1, 0, S::npos));
4987 BOOST_TEST(testFL(S("reagphsqflbitdcjmkno"), "smfte", 1, 1, S::npos));
4988 BOOST_TEST(testFL(S("jitlfrqemsdhkopncabg"), "ciboh", 1, 2, 1));
4989 BOOST_TEST(testFL(S("mhtaepscdnrjqgbkifol"), "haois", 1, 4, 1));
4990 BOOST_TEST(testFL(S("tocesrfmnglpbjihqadk"), "abfki", 1, 5, S::npos));
4991 BOOST_TEST(testFL(S("lpfmctjrhdagneskbqoi"), "frdkocntmq", 1, 0, S::npos));
4992 BOOST_TEST(testFL(S("lsmqaepkdhncirbtjfgo"), "oasbpedlnr", 1, 1, S::npos));
4993 BOOST_TEST(testFL(S("epoiqmtldrabnkjhcfsg"), "kltqmhgand", 1, 5, S::npos));
4994 BOOST_TEST(testFL(S("emgasrilpknqojhtbdcf"), "gdtfjchpmr", 1, 9, 1));
4995 BOOST_TEST(testFL(S("hnfiagdpcklrjetqbsom"), "ponmcqblet", 1, 10, 1));
4996 BOOST_TEST(testFL(S("nsdfebgajhmtricpoklq"), "sgphqdnofeiklatbcmjr", 1, 0, S::npos));
4997 BOOST_TEST(testFL(S("atjgfsdlpobmeiqhncrk"), "ljqprsmigtfoneadckbh", 1, 1, S::npos));
4998 BOOST_TEST(testFL(S("sitodfgnrejlahcbmqkp"), "ligeojhafnkmrcsqtbdp", 1, 10, 1));
4999 BOOST_TEST(testFL(S("fraghmbiceknltjpqosd"), "lsimqfnjarbopedkhcgt", 1, 19, 1));
5000 BOOST_TEST(testFL(S("pmafenlhqtdbkirjsogc"), "abedmfjlghniorcqptks", 1, 20, 1));
5001 BOOST_TEST(testFL(S("pihgmoeqtnakrjslcbfd"), "", 10, 0, S::npos));
5002 BOOST_TEST(testFL(S("gjdkeprctqblnhiafsom"), "hqtoa", 10, 0, S::npos));
5003 BOOST_TEST(testFL(S("mkpnblfdsahrcqijteog"), "cahif", 10, 1, S::npos));
5004 BOOST_TEST(testFL(S("gckarqnelodfjhmbptis"), "kehis", 10, 2, 7));
5005 BOOST_TEST(testFL(S("gqpskidtbclomahnrjfe"), "kdlmh", 10, 4, 10));
5006 BOOST_TEST(testFL(S("pkldjsqrfgitbhmaecno"), "paeql", 10, 5, 6));
5007 BOOST_TEST(testFL(S("aftsijrbeklnmcdqhgop"), "aghoqiefnb", 10, 0, S::npos));
5008 BOOST_TEST(testFL(S("mtlgdrhafjkbiepqnsoc"), "jrbqaikpdo", 10, 1, 9));
5009 BOOST_TEST(testFL(S("pqgirnaefthokdmbsclj"), "smjonaeqcl", 10, 5, 5));
5010 BOOST_TEST(testFL(S("kpdbgjmtherlsfcqoina"), "eqbdrkcfah", 10, 9, 10));
5011 BOOST_TEST(testFL(S("jrlbothiknqmdgcfasep"), "kapmsienhf", 10, 10, 9));
5012 BOOST_TEST(testFL(S("mjogldqferckabinptsh"), "jpqotrlenfcsbhkaimdg", 10, 0, S::npos));
5013 BOOST_TEST(testFL(S("apoklnefbhmgqcdrisjt"), "jlbmhnfgtcqprikeados", 10, 1, S::npos));
5014 BOOST_TEST(testFL(S("ifeopcnrjbhkdgatmqls"), "stgbhfmdaljnpqoicker", 10, 10, 10));
5015 BOOST_TEST(testFL(S("ckqhaiesmjdnrgolbtpf"), "oihcetflbjagdsrkmqpn", 10, 19, 10));
5016 BOOST_TEST(testFL(S("bnlgapfimcoterskqdjh"), "adtclebmnpjsrqfkigoh", 10, 20, 10));
5017 BOOST_TEST(testFL(S("kgdlrobpmjcthqsafeni"), "", 19, 0, S::npos));
5018 BOOST_TEST(testFL(S("dfkechomjapgnslbtqir"), "beafg", 19, 0, S::npos));
5019 BOOST_TEST(testFL(S("rloadknfbqtgmhcsipje"), "iclat", 19, 1, 16));
5020 BOOST_TEST(testFL(S("mgjhkolrnadqbpetcifs"), "rkhnf", 19, 2, 7));
5021 BOOST_TEST(testFL(S("cmlfakiojdrgtbsphqen"), "clshq", 19, 4, 16));
5022 BOOST_TEST(testFL(S("kghbfipeomsntdalrqjc"), "dtcoj", 19, 5, 19));
5023 BOOST_TEST(testFL(S("eldiqckrnmtasbghjfpo"), "rqosnjmfth", 19, 0, S::npos));
5024 BOOST_TEST(testFL(S("abqjcfedgotihlnspkrm"), "siatdfqglh", 19, 1, 15));
5025 BOOST_TEST(testFL(S("qfbadrtjsimkolcenhpg"), "mrlshtpgjq", 19, 5, 17));
5026 BOOST_TEST(testFL(S("abseghclkjqifmtodrnp"), "adlcskgqjt", 19, 9, 16));
5027 BOOST_TEST(testFL(S("ibmsnlrjefhtdokacqpg"), "drshcjknaf", 19, 10, 16));
5028 BOOST_TEST(testFL(S("mrkfciqjebaponsthldg"), "etsaqroinghpkjdlfcbm", 19, 0, S::npos));
5029 BOOST_TEST(testFL(S("mjkticdeoqshpalrfbgn"), "sgepdnkqliambtrocfhj", 19, 1, 10));
5030 BOOST_TEST(testFL(S("rqnoclbdejgiphtfsakm"), "nlmcjaqgbsortfdihkpe", 19, 10, 19));
5031 BOOST_TEST(testFL(S("plkqbhmtfaeodjcrsing"), "racfnpmosldibqkghjet", 19, 19, 19));
5032 BOOST_TEST(testFL(S("oegalhmstjrfickpbndq"), "fjhdsctkqeiolagrnmbp", 19, 20, 19));
5033 BOOST_TEST(testFL(S("rdtgjcaohpblniekmsfq"), "", 20, 0, S::npos));
5034 BOOST_TEST(testFL(S("ofkqbnjetrmsaidphglc"), "ejanp", 20, 0, S::npos));
5035 BOOST_TEST(testFL(S("grkpahljcftesdmonqib"), "odife", 20, 1, 15));
5036 BOOST_TEST(testFL(S("jimlgbhfqkteospardcn"), "okaqd", 20, 2, 12));
5037 BOOST_TEST(testFL(S("gftenihpmslrjkqadcob"), "lcdbi", 20, 4, 19));
5038 BOOST_TEST(testFL(S("bmhldogtckrfsanijepq"), "fsqbj", 20, 5, 19));
5039 BOOST_TEST(testFL(S("nfqkrpjdesabgtlcmoih"), "bigdomnplq", 20, 0, S::npos));
5040 BOOST_TEST(testFL(S("focalnrpiqmdkstehbjg"), "apiblotgcd", 20, 1, 3));
5041 BOOST_TEST(testFL(S("rhqdspkmebiflcotnjga"), "acfhdenops", 20, 5, 19));
5042 BOOST_TEST(testFL(S("rahdtmsckfboqlpniegj"), "jopdeamcrk", 20, 9, 19));
5043 BOOST_TEST(testFL(S("fbkeiopclstmdqranjhg"), "trqncbkgmh", 20, 10, 19));
5044 BOOST_TEST(testFL(S("lifhpdgmbconstjeqark"), "tomglrkencbsfjqpihda", 20, 0, S::npos));
5045 BOOST_TEST(testFL(S("pboqganrhedjmltsicfk"), "gbkhdnpoietfcmrslajq", 20, 1, 4));
5046 BOOST_TEST(testFL(S("klchabsimetjnqgorfpd"), "rtfnmbsglkjaichoqedp", 20, 10, 17));
5047 BOOST_TEST(testFL(S("sirfgmjqhctndbklaepo"), "ohkmdpfqbsacrtjnlgei", 20, 19, 19));
5048 BOOST_TEST(testFL(S("rlbdsiceaonqjtfpghkm"), "dlbrteoisgphmkncajfq", 20, 20, 19));
5049 BOOST_TEST(testFL(S("ecgdanriptblhjfqskom"), "", 21, 0, S::npos));
5050 BOOST_TEST(testFL(S("fdmiarlpgcskbhoteqjn"), "sjrlo", 21, 0, S::npos));
5051 BOOST_TEST(testFL(S("rlbstjqopignecmfadkh"), "qjpor", 21, 1, 6));
5052 BOOST_TEST(testFL(S("grjpqmbshektdolcafni"), "odhfn", 21, 2, 13));
5053 BOOST_TEST(testFL(S("sakfcohtqnibprjmlged"), "qtfin", 21, 4, 10));
5054 BOOST_TEST(testFL(S("mjtdglasihqpocebrfkn"), "hpqfo", 21, 5, 17));
5055 BOOST_TEST(testFL(S("okaplfrntghqbmeicsdj"), "fabmertkos", 21, 0, S::npos));
5056 BOOST_TEST(testFL(S("sahngemrtcjidqbklfpo"), "brqtgkmaej", 21, 1, 14));
5057 BOOST_TEST(testFL(S("dlmsipcnekhbgoaftqjr"), "nfrdeihsgl", 21, 5, 19));
5058 BOOST_TEST(testFL(S("ahegrmqnoiklpfsdbcjt"), "hlfrosekpi", 21, 9, 14));
5059 BOOST_TEST(testFL(S("hdsjbnmlegtkqripacof"), "atgbkrjdsm", 21, 10, 16));
5060 BOOST_TEST(testFL(S("pcnedrfjihqbalkgtoms"), "blnrptjgqmaifsdkhoec", 21, 0, S::npos));
5061 BOOST_TEST(testFL(S("qjidealmtpskrbfhocng"), "ctpmdahebfqjgknloris", 21, 1, 17));
5062 BOOST_TEST(testFL(S("qeindtagmokpfhsclrbj"), "apnkeqthrmlbfodiscgj", 21, 10, 17));
5063 BOOST_TEST(testFL(S("kpfegbjhsrnodltqciam"), "jdgictpframeoqlsbknh", 21, 19, 19));
5064 BOOST_TEST(testFL(S("hnbrcplsjfgiktoedmaq"), "qprlsfojamgndekthibc", 21, 20, 19));
5065
5066
5067
5068
5069
5070
5071
5072 // find_first_not_of
5073
5074 const char* cs3 = "12456";
5075 const char* cs4 = "2356";
5076 string_view v3 = cs3;
5077 string_view v4 = cs4;
5078 static_string<5> fs3 = cs3;
5079 static_string<4> fs4 = cs4;
5080
5081 BOOST_TEST(fs1.find_first_not_of(v3) == 2);
5082 BOOST_TEST(fs1.find_first_not_of(v4) == 0);
5083 BOOST_TEST(fs1.find_first_not_of(fs3) == 2);
5084 BOOST_TEST(fs1.find_first_not_of(fs4) == 0);
5085
5086 BOOST_TEST(fs1.find_first_not_of(cs3) == 2);
5087 BOOST_TEST(fs1.find_first_not_of(cs4) == 0);
5088
5089 BOOST_TEST(fs1.find_first_not_of(cs3, 0) == 2);
5090 BOOST_TEST(fs1.find_first_not_of(cs4, 0) == 0);
5091
5092 BOOST_TEST(fs1.find_first_not_of(cs4, 0, 2) == 0);
5093
5094 BOOST_TEST(fs1.find_first_not_of(cs3, 4) == S::npos);
5095 BOOST_TEST(fs1.find_first_not_of(cs4, 4) == S::npos);
5096
5097 BOOST_TEST(fs1.find_first_not_of('1') == 1);
5098 BOOST_TEST(fs1.find_first_not_of('1', 3) == 3);
5099
5100
5101
5102
5103
5104 BOOST_TEST(testFFN(S(""), "", 0, 0, S::npos));
5105 BOOST_TEST(testFFN(S(""), "irkhs", 0, 0, S::npos));
5106 BOOST_TEST(testFFN(S(""), "kante", 0, 1, S::npos));
5107 BOOST_TEST(testFFN(S(""), "oknlr", 0, 2, S::npos));
5108 BOOST_TEST(testFFN(S(""), "pcdro", 0, 4, S::npos));
5109 BOOST_TEST(testFFN(S(""), "bnrpe", 0, 5, S::npos));
5110 BOOST_TEST(testFFN(S(""), "jtdaefblso", 0, 0, S::npos));
5111 BOOST_TEST(testFFN(S(""), "oselktgbca", 0, 1, S::npos));
5112 BOOST_TEST(testFFN(S(""), "eqgaplhckj", 0, 5, S::npos));
5113 BOOST_TEST(testFFN(S(""), "bjahtcmnlp", 0, 9, S::npos));
5114 BOOST_TEST(testFFN(S(""), "hjlcmgpket", 0, 10, S::npos));
5115 BOOST_TEST(testFFN(S(""), "htaobedqikfplcgjsmrn", 0, 0, S::npos));
5116 BOOST_TEST(testFFN(S(""), "hpqiarojkcdlsgnmfetb", 0, 1, S::npos));
5117 BOOST_TEST(testFFN(S(""), "dfkaprhjloqetcsimnbg", 0, 10, S::npos));
5118 BOOST_TEST(testFFN(S(""), "ihqrfebgadntlpmjksoc", 0, 19, S::npos));
5119 BOOST_TEST(testFFN(S(""), "ngtjfcalbseiqrphmkdo", 0, 20, S::npos));
5120 BOOST_TEST(testFFN(S(""), "", 1, 0, S::npos));
5121 BOOST_TEST(testFFN(S(""), "lbtqd", 1, 0, S::npos));
5122 BOOST_TEST(testFFN(S(""), "tboim", 1, 1, S::npos));
5123 BOOST_TEST(testFFN(S(""), "slcer", 1, 2, S::npos));
5124 BOOST_TEST(testFFN(S(""), "cbjfs", 1, 4, S::npos));
5125 BOOST_TEST(testFFN(S(""), "aqibs", 1, 5, S::npos));
5126 BOOST_TEST(testFFN(S(""), "gtfblmqinc", 1, 0, S::npos));
5127 BOOST_TEST(testFFN(S(""), "mkqpbtdalg", 1, 1, S::npos));
5128 BOOST_TEST(testFFN(S(""), "kphatlimcd", 1, 5, S::npos));
5129 BOOST_TEST(testFFN(S(""), "pblasqogic", 1, 9, S::npos));
5130 BOOST_TEST(testFFN(S(""), "arosdhcfme", 1, 10, S::npos));
5131 BOOST_TEST(testFFN(S(""), "blkhjeogicatqfnpdmsr", 1, 0, S::npos));
5132 BOOST_TEST(testFFN(S(""), "bmhineprjcoadgstflqk", 1, 1, S::npos));
5133 BOOST_TEST(testFFN(S(""), "djkqcmetslnghpbarfoi", 1, 10, S::npos));
5134 BOOST_TEST(testFFN(S(""), "lgokshjtpbemarcdqnfi", 1, 19, S::npos));
5135 BOOST_TEST(testFFN(S(""), "bqjhtkfepimcnsgrlado", 1, 20, S::npos));
5136 BOOST_TEST(testFFN(S("eaint"), "", 0, 0, 0));
5137 BOOST_TEST(testFFN(S("binja"), "gfsrt", 0, 0, 0));
5138 BOOST_TEST(testFFN(S("latkm"), "pfsoc", 0, 1, 0));
5139 BOOST_TEST(testFFN(S("lecfr"), "tpflm", 0, 2, 0));
5140 BOOST_TEST(testFFN(S("eqkst"), "sgkec", 0, 4, 1));
5141 BOOST_TEST(testFFN(S("cdafr"), "romds", 0, 5, 0));
5142 BOOST_TEST(testFFN(S("prbhe"), "qhjistlgmr", 0, 0, 0));
5143 BOOST_TEST(testFFN(S("lbisk"), "pedfirsglo", 0, 1, 0));
5144 BOOST_TEST(testFFN(S("hrlpd"), "aqcoslgrmk", 0, 5, 0));
5145 BOOST_TEST(testFFN(S("ehmja"), "dabckmepqj", 0, 9, 1));
5146 BOOST_TEST(testFFN(S("mhqgd"), "pqscrjthli", 0, 10, 0));
5147 BOOST_TEST(testFFN(S("tgklq"), "kfphdcsjqmobliagtren", 0, 0, 0));
5148 BOOST_TEST(testFFN(S("bocjs"), "rokpefncljibsdhqtagm", 0, 1, 0));
5149 BOOST_TEST(testFFN(S("grbsd"), "afionmkphlebtcjqsgrd", 0, 10, 0));
5150 BOOST_TEST(testFFN(S("ofjqr"), "aenmqplidhkofrjbctsg", 0, 19, S::npos));
5151 BOOST_TEST(testFFN(S("btlfi"), "osjmbtcadhiklegrpqnf", 0, 20, S::npos));
5152 BOOST_TEST(testFFN(S("clrgb"), "", 1, 0, 1));
5153 BOOST_TEST(testFFN(S("tjmek"), "osmia", 1, 0, 1));
5154 BOOST_TEST(testFFN(S("bgstp"), "ckonl", 1, 1, 1));
5155 BOOST_TEST(testFFN(S("hstrk"), "ilcaj", 1, 2, 1));
5156 BOOST_TEST(testFFN(S("kmspj"), "lasiq", 1, 4, 1));
5157 BOOST_TEST(testFFN(S("tjboh"), "kfqmr", 1, 5, 1));
5158 BOOST_TEST(testFFN(S("ilbcj"), "klnitfaobg", 1, 0, 1));
5159 BOOST_TEST(testFFN(S("jkngf"), "gjhmdlqikp", 1, 1, 1));
5160 BOOST_TEST(testFFN(S("gfcql"), "skbgtahqej", 1, 5, 1));
5161 BOOST_TEST(testFFN(S("dqtlg"), "bjsdgtlpkf", 1, 9, 1));
5162 BOOST_TEST(testFFN(S("bthpg"), "bjgfmnlkio", 1, 10, 1));
5163 BOOST_TEST(testFFN(S("dgsnq"), "lbhepotfsjdqigcnamkr", 1, 0, 1));
5164 BOOST_TEST(testFFN(S("rmfhp"), "tebangckmpsrqdlfojhi", 1, 1, 1));
5165 BOOST_TEST(testFFN(S("jfdam"), "joflqbdkhtegimscpanr", 1, 10, 3));
5166 BOOST_TEST(testFFN(S("edapb"), "adpmcohetfbsrjinlqkg", 1, 19, S::npos));
5167 BOOST_TEST(testFFN(S("brfsm"), "iacldqjpfnogbsrhmetk", 1, 20, S::npos));
5168 BOOST_TEST(testFFN(S("ndrhl"), "", 2, 0, 2));
5169 BOOST_TEST(testFFN(S("mrecp"), "otkgb", 2, 0, 2));
5170 BOOST_TEST(testFFN(S("qlasf"), "cqsjl", 2, 1, 2));
5171 BOOST_TEST(testFFN(S("smaqd"), "dpifl", 2, 2, 2));
5172 BOOST_TEST(testFFN(S("hjeni"), "oapht", 2, 4, 2));
5173 BOOST_TEST(testFFN(S("ocmfj"), "cifts", 2, 5, 2));
5174 BOOST_TEST(testFFN(S("hmftq"), "nmsckbgalo", 2, 0, 2));
5175 BOOST_TEST(testFFN(S("fklad"), "tpksqhamle", 2, 1, 2));
5176 BOOST_TEST(testFFN(S("dirnm"), "tpdrchmkji", 2, 5, 3));
5177 BOOST_TEST(testFFN(S("hrgdc"), "ijagfkblst", 2, 9, 3));
5178 BOOST_TEST(testFFN(S("ifakg"), "kpocsignjb", 2, 10, 2));
5179 BOOST_TEST(testFFN(S("ebrgd"), "pecqtkjsnbdrialgmohf", 2, 0, 2));
5180 BOOST_TEST(testFFN(S("rcjml"), "aiortphfcmkjebgsndql", 2, 1, 2));
5181 BOOST_TEST(testFFN(S("peqmt"), "sdbkeamglhipojqftrcn", 2, 10, 2));
5182 BOOST_TEST(testFFN(S("frehn"), "ljqncehgmfktroapidbs", 2, 19, S::npos));
5183 BOOST_TEST(testFFN(S("tqolf"), "rtcfodilamkbenjghqps", 2, 20, S::npos));
5184 BOOST_TEST(testFFN(S("cjgao"), "", 4, 0, 4));
5185 BOOST_TEST(testFFN(S("kjplq"), "mabns", 4, 0, 4));
5186 BOOST_TEST(testFFN(S("herni"), "bdnrp", 4, 1, 4));
5187 BOOST_TEST(testFFN(S("tadrb"), "scidp", 4, 2, 4));
5188 BOOST_TEST(testFFN(S("pkfeo"), "agbjl", 4, 4, 4));
5189 BOOST_TEST(testFFN(S("hoser"), "jfmpr", 4, 5, S::npos));
5190 BOOST_TEST(testFFN(S("kgrsp"), "rbpefghsmj", 4, 0, 4));
5191 BOOST_TEST(testFFN(S("pgejb"), "apsfntdoqc", 4, 1, 4));
5192 BOOST_TEST(testFFN(S("thlnq"), "ndkjeisgcl", 4, 5, 4));
5193 BOOST_TEST(testFFN(S("nbmit"), "rnfpqatdeo", 4, 9, S::npos));
5194 BOOST_TEST(testFFN(S("jgmib"), "bntjlqrfik", 4, 10, S::npos));
5195 BOOST_TEST(testFFN(S("ncrfj"), "kcrtmpolnaqejghsfdbi", 4, 0, 4));
5196 BOOST_TEST(testFFN(S("ncsik"), "lobheanpkmqidsrtcfgj", 4, 1, 4));
5197 BOOST_TEST(testFFN(S("sgbfh"), "athdkljcnreqbgpmisof", 4, 10, S::npos));
5198 BOOST_TEST(testFFN(S("dktbn"), "qkdmjialrscpbhefgont", 4, 19, S::npos));
5199 BOOST_TEST(testFFN(S("fthqm"), "dmasojntqleribkgfchp", 4, 20, S::npos));
5200 BOOST_TEST(testFFN(S("klopi"), "", 5, 0, S::npos));
5201 BOOST_TEST(testFFN(S("dajhn"), "psthd", 5, 0, S::npos));
5202 BOOST_TEST(testFFN(S("jbgno"), "rpmjd", 5, 1, S::npos));
5203 BOOST_TEST(testFFN(S("hkjae"), "dfsmk", 5, 2, S::npos));
5204 BOOST_TEST(testFFN(S("gbhqo"), "skqne", 5, 4, S::npos));
5205 BOOST_TEST(testFFN(S("ktdor"), "kipnf", 5, 5, S::npos));
5206 BOOST_TEST(testFFN(S("ldprn"), "hmrnqdgifl", 5, 0, S::npos));
5207 BOOST_TEST(testFFN(S("egmjk"), "fsmjcdairn", 5, 1, S::npos));
5208 BOOST_TEST(testFFN(S("armql"), "pcdgltbrfj", 5, 5, S::npos));
5209 BOOST_TEST(testFFN(S("cdhjo"), "aekfctpirg", 5, 9, S::npos));
5210 BOOST_TEST(testFFN(S("jcons"), "ledihrsgpf", 5, 10, S::npos));
5211 BOOST_TEST(testFFN(S("cbrkp"), "mqcklahsbtirgopefndj", 5, 0, S::npos));
5212 BOOST_TEST(testFFN(S("fhgna"), "kmlthaoqgecrnpdbjfis", 5, 1, S::npos));
5213 BOOST_TEST(testFFN(S("ejfcd"), "sfhbamcdptojlkrenqgi", 5, 10, S::npos));
5214 BOOST_TEST(testFFN(S("kqjhe"), "pbniofmcedrkhlstgaqj", 5, 19, S::npos));
5215 BOOST_TEST(testFFN(S("pbdjl"), "mongjratcskbhqiepfdl", 5, 20, S::npos));
5216 BOOST_TEST(testFFN(S("gajqn"), "", 6, 0, S::npos));
5217 BOOST_TEST(testFFN(S("stedk"), "hrnat", 6, 0, S::npos));
5218 BOOST_TEST(testFFN(S("tjkaf"), "gsqdt", 6, 1, S::npos));
5219 BOOST_TEST(testFFN(S("dthpe"), "bspkd", 6, 2, S::npos));
5220 BOOST_TEST(testFFN(S("klhde"), "ohcmb", 6, 4, S::npos));
5221 BOOST_TEST(testFFN(S("bhlki"), "heatr", 6, 5, S::npos));
5222 BOOST_TEST(testFFN(S("lqmoh"), "pmblckedfn", 6, 0, S::npos));
5223 BOOST_TEST(testFFN(S("mtqin"), "aceqmsrbik", 6, 1, S::npos));
5224 BOOST_TEST(testFFN(S("dpqbr"), "lmbtdehjrn", 6, 5, S::npos));
5225 BOOST_TEST(testFFN(S("kdhmo"), "teqmcrlgib", 6, 9, S::npos));
5226 BOOST_TEST(testFFN(S("jblqp"), "njolbmspac", 6, 10, S::npos));
5227 BOOST_TEST(testFFN(S("qmjgl"), "pofnhidklamecrbqjgst", 6, 0, S::npos));
5228 BOOST_TEST(testFFN(S("rothp"), "jbhckmtgrqnosafedpli", 6, 1, S::npos));
5229 BOOST_TEST(testFFN(S("ghknq"), "dobntpmqklicsahgjerf", 6, 10, S::npos));
5230 BOOST_TEST(testFFN(S("eopfi"), "tpdshainjkbfoemlrgcq", 6, 19, S::npos));
5231 BOOST_TEST(testFFN(S("dsnmg"), "oldpfgeakrnitscbjmqh", 6, 20, S::npos));
5232 BOOST_TEST(testFFN(S("jnkrfhotgl"), "", 0, 0, 0));
5233 BOOST_TEST(testFFN(S("dltjfngbko"), "rqegt", 0, 0, 0));
5234 BOOST_TEST(testFFN(S("bmjlpkiqde"), "dashm", 0, 1, 0));
5235 BOOST_TEST(testFFN(S("skrflobnqm"), "jqirk", 0, 2, 0));
5236 BOOST_TEST(testFFN(S("jkpldtshrm"), "rckeg", 0, 4, 0));
5237 BOOST_TEST(testFFN(S("ghasdbnjqo"), "jscie", 0, 5, 0));
5238 BOOST_TEST(testFFN(S("igrkhpbqjt"), "efsphndliq", 0, 0, 0));
5239 BOOST_TEST(testFFN(S("ikthdgcamf"), "gdicosleja", 0, 1, 0));
5240 BOOST_TEST(testFFN(S("pcofgeniam"), "qcpjibosfl", 0, 5, 2));
5241 BOOST_TEST(testFFN(S("rlfjgesqhc"), "lrhmefnjcq", 0, 9, 4));
5242 BOOST_TEST(testFFN(S("itphbqsker"), "dtablcrseo", 0, 10, 0));
5243 BOOST_TEST(testFFN(S("skjafcirqm"), "apckjsftedbhgomrnilq", 0, 0, 0));
5244 BOOST_TEST(testFFN(S("tcqomarsfd"), "pcbrgflehjtiadnsokqm", 0, 1, 0));
5245 BOOST_TEST(testFFN(S("rocfeldqpk"), "nsiadegjklhobrmtqcpf", 0, 10, 0));
5246 BOOST_TEST(testFFN(S("cfpegndlkt"), "cpmajdqnolikhgsbretf", 0, 19, 1));
5247 BOOST_TEST(testFFN(S("fqbtnkeasj"), "jcflkntmgiqrphdosaeb", 0, 20, S::npos));
5248 BOOST_TEST(testFFN(S("shbcqnmoar"), "", 1, 0, 1));
5249 BOOST_TEST(testFFN(S("bdoshlmfin"), "ontrs", 1, 0, 1));
5250 BOOST_TEST(testFFN(S("khfrebnsgq"), "pfkna", 1, 1, 1));
5251 BOOST_TEST(testFFN(S("getcrsaoji"), "ekosa", 1, 2, 2));
5252 BOOST_TEST(testFFN(S("fjiknedcpq"), "anqhk", 1, 4, 1));
5253 BOOST_TEST(testFFN(S("tkejgnafrm"), "jekca", 1, 5, 4));
5254 BOOST_TEST(testFFN(S("jnakolqrde"), "ikemsjgacf", 1, 0, 1));
5255 BOOST_TEST(testFFN(S("lcjptsmgbe"), "arolgsjkhm", 1, 1, 1));
5256 BOOST_TEST(testFFN(S("itfsmcjorl"), "oftkbldhre", 1, 5, 3));
5257 BOOST_TEST(testFFN(S("omchkfrjea"), "gbkqdoeftl", 1, 9, 1));
5258 BOOST_TEST(testFFN(S("cigfqkated"), "sqcflrgtim", 1, 10, 5));
5259 BOOST_TEST(testFFN(S("tscenjikml"), "fmhbkislrjdpanogqcet", 1, 0, 1));
5260 BOOST_TEST(testFFN(S("qcpaemsinf"), "rnioadktqlgpbcjsmhef", 1, 1, 1));
5261 BOOST_TEST(testFFN(S("gltkojeipd"), "oakgtnldpsefihqmjcbr", 1, 10, 5));
5262 BOOST_TEST(testFFN(S("qistfrgnmp"), "gbnaelosidmcjqktfhpr", 1, 19, 5));
5263 BOOST_TEST(testFFN(S("bdnpfcqaem"), "akbripjhlosndcmqgfet", 1, 20, S::npos));
5264 BOOST_TEST(testFFN(S("ectnhskflp"), "", 5, 0, 5));
5265 BOOST_TEST(testFFN(S("fgtianblpq"), "pijag", 5, 0, 5));
5266 BOOST_TEST(testFFN(S("mfeqklirnh"), "jrckd", 5, 1, 5));
5267 BOOST_TEST(testFFN(S("astedncjhk"), "qcloh", 5, 2, 5));
5268 BOOST_TEST(testFFN(S("fhlqgcajbr"), "thlmp", 5, 4, 5));
5269 BOOST_TEST(testFFN(S("epfhocmdng"), "qidmo", 5, 5, 5));
5270 BOOST_TEST(testFFN(S("apcnsibger"), "lnegpsjqrd", 5, 0, 5));
5271 BOOST_TEST(testFFN(S("aqkocrbign"), "rjqdablmfs", 5, 1, 6));
5272 BOOST_TEST(testFFN(S("ijsmdtqgce"), "enkgpbsjaq", 5, 5, 5));
5273 BOOST_TEST(testFFN(S("clobgsrken"), "kdsgoaijfh", 5, 9, 6));
5274 BOOST_TEST(testFFN(S("jbhcfposld"), "trfqgmckbe", 5, 10, 5));
5275 BOOST_TEST(testFFN(S("oqnpblhide"), "igetsracjfkdnpoblhqm", 5, 0, 5));
5276 BOOST_TEST(testFFN(S("lroeasctif"), "nqctfaogirshlekbdjpm", 5, 1, 5));
5277 BOOST_TEST(testFFN(S("bpjlgmiedh"), "csehfgomljdqinbartkp", 5, 10, 6));
5278 BOOST_TEST(testFFN(S("pamkeoidrj"), "qahoegcmplkfsjbdnitr", 5, 19, 8));
5279 BOOST_TEST(testFFN(S("espogqbthk"), "dpteiajrqmsognhlfbkc", 5, 20, S::npos));
5280 BOOST_TEST(testFFN(S("shoiedtcjb"), "", 9, 0, 9));
5281 BOOST_TEST(testFFN(S("ebcinjgads"), "tqbnh", 9, 0, 9));
5282 BOOST_TEST(testFFN(S("dqmregkcfl"), "akmle", 9, 1, 9));
5283 BOOST_TEST(testFFN(S("ngcrieqajf"), "iqfkm", 9, 2, 9));
5284 BOOST_TEST(testFFN(S("qosmilgnjb"), "tqjsr", 9, 4, 9));
5285 BOOST_TEST(testFFN(S("ikabsjtdfl"), "jplqg", 9, 5, S::npos));
5286 BOOST_TEST(testFFN(S("ersmicafdh"), "oilnrbcgtj", 9, 0, 9));
5287 BOOST_TEST(testFFN(S("fdnplotmgh"), "morkglpesn", 9, 1, 9));
5288 BOOST_TEST(testFFN(S("fdbicojerm"), "dmicerngat", 9, 5, S::npos));
5289 BOOST_TEST(testFFN(S("mbtafndjcq"), "radgeskbtc", 9, 9, 9));
5290 BOOST_TEST(testFFN(S("mlenkpfdtc"), "ljikprsmqo", 9, 10, 9));
5291 BOOST_TEST(testFFN(S("ahlcifdqgs"), "trqihkcgsjamfdbolnpe", 9, 0, 9));
5292 BOOST_TEST(testFFN(S("bgjemaltks"), "lqmthbsrekajgnofcipd", 9, 1, 9));
5293 BOOST_TEST(testFFN(S("pdhslbqrfc"), "jtalmedribkgqsopcnfh", 9, 10, 9));
5294 BOOST_TEST(testFFN(S("dirhtsnjkc"), "spqfoiclmtagejbndkrh", 9, 19, S::npos));
5295 BOOST_TEST(testFFN(S("dlroktbcja"), "nmotklspigjrdhcfaebq", 9, 20, S::npos));
5296 BOOST_TEST(testFFN(S("ncjpmaekbs"), "", 10, 0, S::npos));
5297 BOOST_TEST(testFFN(S("hlbosgmrak"), "hpmsd", 10, 0, S::npos));
5298 BOOST_TEST(testFFN(S("pqfhsgilen"), "qnpor", 10, 1, S::npos));
5299 BOOST_TEST(testFFN(S("gqtjsbdckh"), "otdma", 10, 2, S::npos));
5300 BOOST_TEST(testFFN(S("cfkqpjlegi"), "efhjg", 10, 4, S::npos));
5301 BOOST_TEST(testFFN(S("beanrfodgj"), "odpte", 10, 5, S::npos));
5302 BOOST_TEST(testFFN(S("adtkqpbjfi"), "bctdgfmolr", 10, 0, S::npos));
5303 BOOST_TEST(testFFN(S("iomkfthagj"), "oaklidrbqg", 10, 1, S::npos));
5304 BOOST_TEST(testFFN(S("sdpcilonqj"), "dnjfsagktr", 10, 5, S::npos));
5305 BOOST_TEST(testFFN(S("gtfbdkqeml"), "nejaktmiqg", 10, 9, S::npos));
5306 BOOST_TEST(testFFN(S("bmeqgcdorj"), "pjqonlebsf", 10, 10, S::npos));
5307 BOOST_TEST(testFFN(S("etqlcanmob"), "dshmnbtolcjepgaikfqr", 10, 0, S::npos));
5308 BOOST_TEST(testFFN(S("roqmkbdtia"), "iogfhpabtjkqlrnemcds", 10, 1, S::npos));
5309 BOOST_TEST(testFFN(S("kadsithljf"), "ngridfabjsecpqltkmoh", 10, 10, S::npos));
5310 BOOST_TEST(testFFN(S("sgtkpbfdmh"), "athmknplcgofrqejsdib", 10, 19, S::npos));
5311 BOOST_TEST(testFFN(S("qgmetnabkl"), "ldobhmqcafnjtkeisgrp", 10, 20, S::npos));
5312 BOOST_TEST(testFFN(S("cqjohampgd"), "", 11, 0, S::npos));
5313 BOOST_TEST(testFFN(S("hobitmpsan"), "aocjb", 11, 0, S::npos));
5314 BOOST_TEST(testFFN(S("tjehkpsalm"), "jbrnk", 11, 1, S::npos));
5315 BOOST_TEST(testFFN(S("ngfbojitcl"), "tqedg", 11, 2, S::npos));
5316 BOOST_TEST(testFFN(S("rcfkdbhgjo"), "nqskp", 11, 4, S::npos));
5317 BOOST_TEST(testFFN(S("qghptonrea"), "eaqkl", 11, 5, S::npos));
5318 BOOST_TEST(testFFN(S("hnprfgqjdl"), "reaoicljqm", 11, 0, S::npos));
5319 BOOST_TEST(testFFN(S("hlmgabenti"), "lsftgajqpm", 11, 1, S::npos));
5320 BOOST_TEST(testFFN(S("ofcjanmrbs"), "rlpfogmits", 11, 5, S::npos));
5321 BOOST_TEST(testFFN(S("jqedtkornm"), "shkncmiaqj", 11, 9, S::npos));
5322 BOOST_TEST(testFFN(S("rfedlasjmg"), "fpnatrhqgs", 11, 10, S::npos));
5323 BOOST_TEST(testFFN(S("talpqjsgkm"), "sjclemqhnpdbgikarfot", 11, 0, S::npos));
5324 BOOST_TEST(testFFN(S("lrkcbtqpie"), "otcmedjikgsfnqbrhpla", 11, 1, S::npos));
5325 BOOST_TEST(testFFN(S("cipogdskjf"), "bonsaefdqiprkhlgtjcm", 11, 10, S::npos));
5326 BOOST_TEST(testFFN(S("nqedcojahi"), "egpscmahijlfnkrodqtb", 11, 19, S::npos));
5327 BOOST_TEST(testFFN(S("hefnrkmctj"), "kmqbfepjthgilscrndoa", 11, 20, S::npos));
5328 BOOST_TEST(testFFN(S("atqirnmekfjolhpdsgcb"), "", 0, 0, 0));
5329 BOOST_TEST(testFFN(S("echfkmlpribjnqsaogtd"), "prboq", 0, 0, 0));
5330 BOOST_TEST(testFFN(S("qnhiftdgcleajbpkrosm"), "fjcqh", 0, 1, 0));
5331 BOOST_TEST(testFFN(S("chamfknorbedjitgslpq"), "fmosa", 0, 2, 0));
5332 BOOST_TEST(testFFN(S("njhqpibfmtlkaecdrgso"), "qdbok", 0, 4, 0));
5333 BOOST_TEST(testFFN(S("ebnghfsqkprmdcljoiat"), "amslg", 0, 5, 0));
5334 BOOST_TEST(testFFN(S("letjomsgihfrpqbkancd"), "smpltjneqb", 0, 0, 0));
5335 BOOST_TEST(testFFN(S("nblgoipcrqeaktshjdmf"), "flitskrnge", 0, 1, 0));
5336 BOOST_TEST(testFFN(S("cehkbngtjoiflqapsmrd"), "pgqihmlbef", 0, 5, 0));
5337 BOOST_TEST(testFFN(S("mignapfoklbhcqjetdrs"), "cfpdqjtgsb", 0, 9, 0));
5338 BOOST_TEST(testFFN(S("ceatbhlsqjgpnokfrmdi"), "htpsiaflom", 0, 10, 0));
5339 BOOST_TEST(testFFN(S("ocihkjgrdelpfnmastqb"), "kpjfiaceghsrdtlbnomq", 0, 0, 0));
5340 BOOST_TEST(testFFN(S("noelgschdtbrjfmiqkap"), "qhtbomidljgafneksprc", 0, 1, 0));
5341 BOOST_TEST(testFFN(S("dkclqfombepritjnghas"), "nhtjobkcefldimpsaqgr", 0, 10, 0));
5342 BOOST_TEST(testFFN(S("miklnresdgbhqcojftap"), "prabcjfqnoeskilmtgdh", 0, 19, 11));
5343 BOOST_TEST(testFFN(S("htbcigojaqmdkfrnlsep"), "dtrgmchilkasqoebfpjn", 0, 20, S::npos));
5344 BOOST_TEST(testFFN(S("febhmqtjanokscdirpgl"), "", 1, 0, 1));
5345 BOOST_TEST(testFFN(S("loakbsqjpcrdhftniegm"), "sqome", 1, 0, 1));
5346 BOOST_TEST(testFFN(S("reagphsqflbitdcjmkno"), "smfte", 1, 1, 1));
5347 BOOST_TEST(testFFN(S("jitlfrqemsdhkopncabg"), "ciboh", 1, 2, 2));
5348 BOOST_TEST(testFFN(S("mhtaepscdnrjqgbkifol"), "haois", 1, 4, 2));
5349 BOOST_TEST(testFFN(S("tocesrfmnglpbjihqadk"), "abfki", 1, 5, 1));
5350 BOOST_TEST(testFFN(S("lpfmctjrhdagneskbqoi"), "frdkocntmq", 1, 0, 1));
5351 BOOST_TEST(testFFN(S("lsmqaepkdhncirbtjfgo"), "oasbpedlnr", 1, 1, 1));
5352 BOOST_TEST(testFFN(S("epoiqmtldrabnkjhcfsg"), "kltqmhgand", 1, 5, 1));
5353 BOOST_TEST(testFFN(S("emgasrilpknqojhtbdcf"), "gdtfjchpmr", 1, 9, 3));
5354 BOOST_TEST(testFFN(S("hnfiagdpcklrjetqbsom"), "ponmcqblet", 1, 10, 2));
5355 BOOST_TEST(testFFN(S("nsdfebgajhmtricpoklq"), "sgphqdnofeiklatbcmjr", 1, 0, 1));
5356 BOOST_TEST(testFFN(S("atjgfsdlpobmeiqhncrk"), "ljqprsmigtfoneadckbh", 1, 1, 1));
5357 BOOST_TEST(testFFN(S("sitodfgnrejlahcbmqkp"), "ligeojhafnkmrcsqtbdp", 1, 10, 2));
5358 BOOST_TEST(testFFN(S("fraghmbiceknltjpqosd"), "lsimqfnjarbopedkhcgt", 1, 19, 13));
5359 BOOST_TEST(testFFN(S("pmafenlhqtdbkirjsogc"), "abedmfjlghniorcqptks", 1, 20, S::npos));
5360 BOOST_TEST(testFFN(S("pihgmoeqtnakrjslcbfd"), "", 10, 0, 10));
5361 BOOST_TEST(testFFN(S("gjdkeprctqblnhiafsom"), "hqtoa", 10, 0, 10));
5362 BOOST_TEST(testFFN(S("mkpnblfdsahrcqijteog"), "cahif", 10, 1, 10));
5363 BOOST_TEST(testFFN(S("gckarqnelodfjhmbptis"), "kehis", 10, 2, 10));
5364 BOOST_TEST(testFFN(S("gqpskidtbclomahnrjfe"), "kdlmh", 10, 4, 11));
5365 BOOST_TEST(testFFN(S("pkldjsqrfgitbhmaecno"), "paeql", 10, 5, 10));
5366 BOOST_TEST(testFFN(S("aftsijrbeklnmcdqhgop"), "aghoqiefnb", 10, 0, 10));
5367 BOOST_TEST(testFFN(S("mtlgdrhafjkbiepqnsoc"), "jrbqaikpdo", 10, 1, 10));
5368 BOOST_TEST(testFFN(S("pqgirnaefthokdmbsclj"), "smjonaeqcl", 10, 5, 10));
5369 BOOST_TEST(testFFN(S("kpdbgjmtherlsfcqoina"), "eqbdrkcfah", 10, 9, 11));
5370 BOOST_TEST(testFFN(S("jrlbothiknqmdgcfasep"), "kapmsienhf", 10, 10, 10));
5371 BOOST_TEST(testFFN(S("mjogldqferckabinptsh"), "jpqotrlenfcsbhkaimdg", 10, 0, 10));
5372 BOOST_TEST(testFFN(S("apoklnefbhmgqcdrisjt"), "jlbmhnfgtcqprikeados", 10, 1, 10));
5373 BOOST_TEST(testFFN(S("ifeopcnrjbhkdgatmqls"), "stgbhfmdaljnpqoicker", 10, 10, 11));
5374 BOOST_TEST(testFFN(S("ckqhaiesmjdnrgolbtpf"), "oihcetflbjagdsrkmqpn", 10, 19, 11));
5375 BOOST_TEST(testFFN(S("bnlgapfimcoterskqdjh"), "adtclebmnpjsrqfkigoh", 10, 20, S::npos));
5376 BOOST_TEST(testFFN(S("kgdlrobpmjcthqsafeni"), "", 19, 0, 19));
5377 BOOST_TEST(testFFN(S("dfkechomjapgnslbtqir"), "beafg", 19, 0, 19));
5378 BOOST_TEST(testFFN(S("rloadknfbqtgmhcsipje"), "iclat", 19, 1, 19));
5379 BOOST_TEST(testFFN(S("mgjhkolrnadqbpetcifs"), "rkhnf", 19, 2, 19));
5380 BOOST_TEST(testFFN(S("cmlfakiojdrgtbsphqen"), "clshq", 19, 4, 19));
5381 BOOST_TEST(testFFN(S("kghbfipeomsntdalrqjc"), "dtcoj", 19, 5, S::npos));
5382 BOOST_TEST(testFFN(S("eldiqckrnmtasbghjfpo"), "rqosnjmfth", 19, 0, 19));
5383 BOOST_TEST(testFFN(S("abqjcfedgotihlnspkrm"), "siatdfqglh", 19, 1, 19));
5384 BOOST_TEST(testFFN(S("qfbadrtjsimkolcenhpg"), "mrlshtpgjq", 19, 5, 19));
5385 BOOST_TEST(testFFN(S("abseghclkjqifmtodrnp"), "adlcskgqjt", 19, 9, 19));
5386 BOOST_TEST(testFFN(S("ibmsnlrjefhtdokacqpg"), "drshcjknaf", 19, 10, 19));
5387 BOOST_TEST(testFFN(S("mrkfciqjebaponsthldg"), "etsaqroinghpkjdlfcbm", 19, 0, 19));
5388 BOOST_TEST(testFFN(S("mjkticdeoqshpalrfbgn"), "sgepdnkqliambtrocfhj", 19, 1, 19));
5389 BOOST_TEST(testFFN(S("rqnoclbdejgiphtfsakm"), "nlmcjaqgbsortfdihkpe", 19, 10, S::npos));
5390 BOOST_TEST(testFFN(S("plkqbhmtfaeodjcrsing"), "racfnpmosldibqkghjet", 19, 19, S::npos));
5391 BOOST_TEST(testFFN(S("oegalhmstjrfickpbndq"), "fjhdsctkqeiolagrnmbp", 19, 20, S::npos));
5392 BOOST_TEST(testFFN(S("rdtgjcaohpblniekmsfq"), "", 20, 0, S::npos));
5393 BOOST_TEST(testFFN(S("ofkqbnjetrmsaidphglc"), "ejanp", 20, 0, S::npos));
5394 BOOST_TEST(testFFN(S("grkpahljcftesdmonqib"), "odife", 20, 1, S::npos));
5395 BOOST_TEST(testFFN(S("jimlgbhfqkteospardcn"), "okaqd", 20, 2, S::npos));
5396 BOOST_TEST(testFFN(S("gftenihpmslrjkqadcob"), "lcdbi", 20, 4, S::npos));
5397 BOOST_TEST(testFFN(S("bmhldogtckrfsanijepq"), "fsqbj", 20, 5, S::npos));
5398 BOOST_TEST(testFFN(S("nfqkrpjdesabgtlcmoih"), "bigdomnplq", 20, 0, S::npos));
5399 BOOST_TEST(testFFN(S("focalnrpiqmdkstehbjg"), "apiblotgcd", 20, 1, S::npos));
5400 BOOST_TEST(testFFN(S("rhqdspkmebiflcotnjga"), "acfhdenops", 20, 5, S::npos));
5401 BOOST_TEST(testFFN(S("rahdtmsckfboqlpniegj"), "jopdeamcrk", 20, 9, S::npos));
5402 BOOST_TEST(testFFN(S("fbkeiopclstmdqranjhg"), "trqncbkgmh", 20, 10, S::npos));
5403 BOOST_TEST(testFFN(S("lifhpdgmbconstjeqark"), "tomglrkencbsfjqpihda", 20, 0, S::npos));
5404 BOOST_TEST(testFFN(S("pboqganrhedjmltsicfk"), "gbkhdnpoietfcmrslajq", 20, 1, S::npos));
5405 BOOST_TEST(testFFN(S("klchabsimetjnqgorfpd"), "rtfnmbsglkjaichoqedp", 20, 10, S::npos));
5406 BOOST_TEST(testFFN(S("sirfgmjqhctndbklaepo"), "ohkmdpfqbsacrtjnlgei", 20, 19, S::npos));
5407 BOOST_TEST(testFFN(S("rlbdsiceaonqjtfpghkm"), "dlbrteoisgphmkncajfq", 20, 20, S::npos));
5408 BOOST_TEST(testFFN(S("ecgdanriptblhjfqskom"), "", 21, 0, S::npos));
5409 BOOST_TEST(testFFN(S("fdmiarlpgcskbhoteqjn"), "sjrlo", 21, 0, S::npos));
5410 BOOST_TEST(testFFN(S("rlbstjqopignecmfadkh"), "qjpor", 21, 1, S::npos));
5411 BOOST_TEST(testFFN(S("grjpqmbshektdolcafni"), "odhfn", 21, 2, S::npos));
5412 BOOST_TEST(testFFN(S("sakfcohtqnibprjmlged"), "qtfin", 21, 4, S::npos));
5413 BOOST_TEST(testFFN(S("mjtdglasihqpocebrfkn"), "hpqfo", 21, 5, S::npos));
5414 BOOST_TEST(testFFN(S("okaplfrntghqbmeicsdj"), "fabmertkos", 21, 0, S::npos));
5415 BOOST_TEST(testFFN(S("sahngemrtcjidqbklfpo"), "brqtgkmaej", 21, 1, S::npos));
5416 BOOST_TEST(testFFN(S("dlmsipcnekhbgoaftqjr"), "nfrdeihsgl", 21, 5, S::npos));
5417 BOOST_TEST(testFFN(S("ahegrmqnoiklpfsdbcjt"), "hlfrosekpi", 21, 9, S::npos));
5418 BOOST_TEST(testFFN(S("hdsjbnmlegtkqripacof"), "atgbkrjdsm", 21, 10, S::npos));
5419 BOOST_TEST(testFFN(S("pcnedrfjihqbalkgtoms"), "blnrptjgqmaifsdkhoec", 21, 0, S::npos));
5420 BOOST_TEST(testFFN(S("qjidealmtpskrbfhocng"), "ctpmdahebfqjgknloris", 21, 1, S::npos));
5421 BOOST_TEST(testFFN(S("qeindtagmokpfhsclrbj"), "apnkeqthrmlbfodiscgj", 21, 10, S::npos));
5422 BOOST_TEST(testFFN(S("kpfegbjhsrnodltqciam"), "jdgictpframeoqlsbknh", 21, 19, S::npos));
5423 BOOST_TEST(testFFN(S("hnbrcplsjfgiktoedmaq"), "qprlsfojamgndekthibc", 21, 20, S::npos));
5424
5425 // find_last_not_of
5426
5427 BOOST_TEST(fs1.find_last_not_of(v3) == 2);
5428 BOOST_TEST(fs1.find_last_not_of(v4) == 3);
5429 BOOST_TEST(fs1.find_last_not_of(fs3) == 2);
5430 BOOST_TEST(fs1.find_last_not_of(fs4) == 3);
5431
5432 BOOST_TEST(fs1.find_last_not_of(cs3) == 2);
5433 BOOST_TEST(fs1.find_last_not_of(cs4) == 3);
5434
5435 BOOST_TEST(fs1.find_last_not_of(cs3, 0) == S::npos);
5436 BOOST_TEST(fs1.find_last_not_of(cs4, 0) == 0);
5437
5438 BOOST_TEST(fs1.find_last_not_of(cs4, 0, 2) == 0);
5439
5440 BOOST_TEST(fs1.find_last_not_of(cs3, 4) == 2);
5441 BOOST_TEST(fs1.find_last_not_of(cs4, 4) == 3);
5442
5443 BOOST_TEST(fs1.find_last_not_of('1') == 4);
5444 BOOST_TEST(fs1.find_last_not_of('1', 3) == 3);
5445
5446
5447 BOOST_TEST(testFLN(S(""), "", 0, 0, S::npos));
5448 BOOST_TEST(testFLN(S(""), "irkhs", 0, 0, S::npos));
5449 BOOST_TEST(testFLN(S(""), "kante", 0, 1, S::npos));
5450 BOOST_TEST(testFLN(S(""), "oknlr", 0, 2, S::npos));
5451 BOOST_TEST(testFLN(S(""), "pcdro", 0, 4, S::npos));
5452 BOOST_TEST(testFLN(S(""), "bnrpe", 0, 5, S::npos));
5453 BOOST_TEST(testFLN(S(""), "jtdaefblso", 0, 0, S::npos));
5454 BOOST_TEST(testFLN(S(""), "oselktgbca", 0, 1, S::npos));
5455 BOOST_TEST(testFLN(S(""), "eqgaplhckj", 0, 5, S::npos));
5456 BOOST_TEST(testFLN(S(""), "bjahtcmnlp", 0, 9, S::npos));
5457 BOOST_TEST(testFLN(S(""), "hjlcmgpket", 0, 10, S::npos));
5458 BOOST_TEST(testFLN(S(""), "htaobedqikfplcgjsmrn", 0, 0, S::npos));
5459 BOOST_TEST(testFLN(S(""), "hpqiarojkcdlsgnmfetb", 0, 1, S::npos));
5460 BOOST_TEST(testFLN(S(""), "dfkaprhjloqetcsimnbg", 0, 10, S::npos));
5461 BOOST_TEST(testFLN(S(""), "ihqrfebgadntlpmjksoc", 0, 19, S::npos));
5462 BOOST_TEST(testFLN(S(""), "ngtjfcalbseiqrphmkdo", 0, 20, S::npos));
5463 BOOST_TEST(testFLN(S(""), "", 1, 0, S::npos));
5464 BOOST_TEST(testFLN(S(""), "lbtqd", 1, 0, S::npos));
5465 BOOST_TEST(testFLN(S(""), "tboim", 1, 1, S::npos));
5466 BOOST_TEST(testFLN(S(""), "slcer", 1, 2, S::npos));
5467 BOOST_TEST(testFLN(S(""), "cbjfs", 1, 4, S::npos));
5468 BOOST_TEST(testFLN(S(""), "aqibs", 1, 5, S::npos));
5469 BOOST_TEST(testFLN(S(""), "gtfblmqinc", 1, 0, S::npos));
5470 BOOST_TEST(testFLN(S(""), "mkqpbtdalg", 1, 1, S::npos));
5471 BOOST_TEST(testFLN(S(""), "kphatlimcd", 1, 5, S::npos));
5472 BOOST_TEST(testFLN(S(""), "pblasqogic", 1, 9, S::npos));
5473 BOOST_TEST(testFLN(S(""), "arosdhcfme", 1, 10, S::npos));
5474 BOOST_TEST(testFLN(S(""), "blkhjeogicatqfnpdmsr", 1, 0, S::npos));
5475 BOOST_TEST(testFLN(S(""), "bmhineprjcoadgstflqk", 1, 1, S::npos));
5476 BOOST_TEST(testFLN(S(""), "djkqcmetslnghpbarfoi", 1, 10, S::npos));
5477 BOOST_TEST(testFLN(S(""), "lgokshjtpbemarcdqnfi", 1, 19, S::npos));
5478 BOOST_TEST(testFLN(S(""), "bqjhtkfepimcnsgrlado", 1, 20, S::npos));
5479 BOOST_TEST(testFLN(S("eaint"), "", 0, 0, 0));
5480 BOOST_TEST(testFLN(S("binja"), "gfsrt", 0, 0, 0));
5481 BOOST_TEST(testFLN(S("latkm"), "pfsoc", 0, 1, 0));
5482 BOOST_TEST(testFLN(S("lecfr"), "tpflm", 0, 2, 0));
5483 BOOST_TEST(testFLN(S("eqkst"), "sgkec", 0, 4, S::npos));
5484 BOOST_TEST(testFLN(S("cdafr"), "romds", 0, 5, 0));
5485 BOOST_TEST(testFLN(S("prbhe"), "qhjistlgmr", 0, 0, 0));
5486 BOOST_TEST(testFLN(S("lbisk"), "pedfirsglo", 0, 1, 0));
5487 BOOST_TEST(testFLN(S("hrlpd"), "aqcoslgrmk", 0, 5, 0));
5488 BOOST_TEST(testFLN(S("ehmja"), "dabckmepqj", 0, 9, S::npos));
5489 BOOST_TEST(testFLN(S("mhqgd"), "pqscrjthli", 0, 10, 0));
5490 BOOST_TEST(testFLN(S("tgklq"), "kfphdcsjqmobliagtren", 0, 0, 0));
5491 BOOST_TEST(testFLN(S("bocjs"), "rokpefncljibsdhqtagm", 0, 1, 0));
5492 BOOST_TEST(testFLN(S("grbsd"), "afionmkphlebtcjqsgrd", 0, 10, 0));
5493 BOOST_TEST(testFLN(S("ofjqr"), "aenmqplidhkofrjbctsg", 0, 19, S::npos));
5494 BOOST_TEST(testFLN(S("btlfi"), "osjmbtcadhiklegrpqnf", 0, 20, S::npos));
5495 BOOST_TEST(testFLN(S("clrgb"), "", 1, 0, 1));
5496 BOOST_TEST(testFLN(S("tjmek"), "osmia", 1, 0, 1));
5497 BOOST_TEST(testFLN(S("bgstp"), "ckonl", 1, 1, 1));
5498 BOOST_TEST(testFLN(S("hstrk"), "ilcaj", 1, 2, 1));
5499 BOOST_TEST(testFLN(S("kmspj"), "lasiq", 1, 4, 1));
5500 BOOST_TEST(testFLN(S("tjboh"), "kfqmr", 1, 5, 1));
5501 BOOST_TEST(testFLN(S("ilbcj"), "klnitfaobg", 1, 0, 1));
5502 BOOST_TEST(testFLN(S("jkngf"), "gjhmdlqikp", 1, 1, 1));
5503 BOOST_TEST(testFLN(S("gfcql"), "skbgtahqej", 1, 5, 1));
5504 BOOST_TEST(testFLN(S("dqtlg"), "bjsdgtlpkf", 1, 9, 1));
5505 BOOST_TEST(testFLN(S("bthpg"), "bjgfmnlkio", 1, 10, 1));
5506 BOOST_TEST(testFLN(S("dgsnq"), "lbhepotfsjdqigcnamkr", 1, 0, 1));
5507 BOOST_TEST(testFLN(S("rmfhp"), "tebangckmpsrqdlfojhi", 1, 1, 1));
5508 BOOST_TEST(testFLN(S("jfdam"), "joflqbdkhtegimscpanr", 1, 10, S::npos));
5509 BOOST_TEST(testFLN(S("edapb"), "adpmcohetfbsrjinlqkg", 1, 19, S::npos));
5510 BOOST_TEST(testFLN(S("brfsm"), "iacldqjpfnogbsrhmetk", 1, 20, S::npos));
5511 BOOST_TEST(testFLN(S("ndrhl"), "", 2, 0, 2));
5512 BOOST_TEST(testFLN(S("mrecp"), "otkgb", 2, 0, 2));
5513 BOOST_TEST(testFLN(S("qlasf"), "cqsjl", 2, 1, 2));
5514 BOOST_TEST(testFLN(S("smaqd"), "dpifl", 2, 2, 2));
5515 BOOST_TEST(testFLN(S("hjeni"), "oapht", 2, 4, 2));
5516 BOOST_TEST(testFLN(S("ocmfj"), "cifts", 2, 5, 2));
5517 BOOST_TEST(testFLN(S("hmftq"), "nmsckbgalo", 2, 0, 2));
5518 BOOST_TEST(testFLN(S("fklad"), "tpksqhamle", 2, 1, 2));
5519 BOOST_TEST(testFLN(S("dirnm"), "tpdrchmkji", 2, 5, 1));
5520 BOOST_TEST(testFLN(S("hrgdc"), "ijagfkblst", 2, 9, 1));
5521 BOOST_TEST(testFLN(S("ifakg"), "kpocsignjb", 2, 10, 2));
5522 BOOST_TEST(testFLN(S("ebrgd"), "pecqtkjsnbdrialgmohf", 2, 0, 2));
5523 BOOST_TEST(testFLN(S("rcjml"), "aiortphfcmkjebgsndql", 2, 1, 2));
5524 BOOST_TEST(testFLN(S("peqmt"), "sdbkeamglhipojqftrcn", 2, 10, 2));
5525 BOOST_TEST(testFLN(S("frehn"), "ljqncehgmfktroapidbs", 2, 19, S::npos));
5526 BOOST_TEST(testFLN(S("tqolf"), "rtcfodilamkbenjghqps", 2, 20, S::npos));
5527 BOOST_TEST(testFLN(S("cjgao"), "", 4, 0, 4));
5528 BOOST_TEST(testFLN(S("kjplq"), "mabns", 4, 0, 4));
5529 BOOST_TEST(testFLN(S("herni"), "bdnrp", 4, 1, 4));
5530 BOOST_TEST(testFLN(S("tadrb"), "scidp", 4, 2, 4));
5531 BOOST_TEST(testFLN(S("pkfeo"), "agbjl", 4, 4, 4));
5532 BOOST_TEST(testFLN(S("hoser"), "jfmpr", 4, 5, 3));
5533 BOOST_TEST(testFLN(S("kgrsp"), "rbpefghsmj", 4, 0, 4));
5534 BOOST_TEST(testFLN(S("pgejb"), "apsfntdoqc", 4, 1, 4));
5535 BOOST_TEST(testFLN(S("thlnq"), "ndkjeisgcl", 4, 5, 4));
5536 BOOST_TEST(testFLN(S("nbmit"), "rnfpqatdeo", 4, 9, 3));
5537 BOOST_TEST(testFLN(S("jgmib"), "bntjlqrfik", 4, 10, 2));
5538 BOOST_TEST(testFLN(S("ncrfj"), "kcrtmpolnaqejghsfdbi", 4, 0, 4));
5539 BOOST_TEST(testFLN(S("ncsik"), "lobheanpkmqidsrtcfgj", 4, 1, 4));
5540 BOOST_TEST(testFLN(S("sgbfh"), "athdkljcnreqbgpmisof", 4, 10, 3));
5541 BOOST_TEST(testFLN(S("dktbn"), "qkdmjialrscpbhefgont", 4, 19, 2));
5542 BOOST_TEST(testFLN(S("fthqm"), "dmasojntqleribkgfchp", 4, 20, S::npos));
5543 BOOST_TEST(testFLN(S("klopi"), "", 5, 0, 4));
5544 BOOST_TEST(testFLN(S("dajhn"), "psthd", 5, 0, 4));
5545 BOOST_TEST(testFLN(S("jbgno"), "rpmjd", 5, 1, 4));
5546 BOOST_TEST(testFLN(S("hkjae"), "dfsmk", 5, 2, 4));
5547 BOOST_TEST(testFLN(S("gbhqo"), "skqne", 5, 4, 4));
5548 BOOST_TEST(testFLN(S("ktdor"), "kipnf", 5, 5, 4));
5549 BOOST_TEST(testFLN(S("ldprn"), "hmrnqdgifl", 5, 0, 4));
5550 BOOST_TEST(testFLN(S("egmjk"), "fsmjcdairn", 5, 1, 4));
5551 BOOST_TEST(testFLN(S("armql"), "pcdgltbrfj", 5, 5, 3));
5552 BOOST_TEST(testFLN(S("cdhjo"), "aekfctpirg", 5, 9, 4));
5553 BOOST_TEST(testFLN(S("jcons"), "ledihrsgpf", 5, 10, 3));
5554 BOOST_TEST(testFLN(S("cbrkp"), "mqcklahsbtirgopefndj", 5, 0, 4));
5555 BOOST_TEST(testFLN(S("fhgna"), "kmlthaoqgecrnpdbjfis", 5, 1, 4));
5556 BOOST_TEST(testFLN(S("ejfcd"), "sfhbamcdptojlkrenqgi", 5, 10, 1));
5557 BOOST_TEST(testFLN(S("kqjhe"), "pbniofmcedrkhlstgaqj", 5, 19, 2));
5558 BOOST_TEST(testFLN(S("pbdjl"), "mongjratcskbhqiepfdl", 5, 20, S::npos));
5559 BOOST_TEST(testFLN(S("gajqn"), "", 6, 0, 4));
5560 BOOST_TEST(testFLN(S("stedk"), "hrnat", 6, 0, 4));
5561 BOOST_TEST(testFLN(S("tjkaf"), "gsqdt", 6, 1, 4));
5562 BOOST_TEST(testFLN(S("dthpe"), "bspkd", 6, 2, 4));
5563 BOOST_TEST(testFLN(S("klhde"), "ohcmb", 6, 4, 4));
5564 BOOST_TEST(testFLN(S("bhlki"), "heatr", 6, 5, 4));
5565 BOOST_TEST(testFLN(S("lqmoh"), "pmblckedfn", 6, 0, 4));
5566 BOOST_TEST(testFLN(S("mtqin"), "aceqmsrbik", 6, 1, 4));
5567 BOOST_TEST(testFLN(S("dpqbr"), "lmbtdehjrn", 6, 5, 4));
5568 BOOST_TEST(testFLN(S("kdhmo"), "teqmcrlgib", 6, 9, 4));
5569 BOOST_TEST(testFLN(S("jblqp"), "njolbmspac", 6, 10, 3));
5570 BOOST_TEST(testFLN(S("qmjgl"), "pofnhidklamecrbqjgst", 6, 0, 4));
5571 BOOST_TEST(testFLN(S("rothp"), "jbhckmtgrqnosafedpli", 6, 1, 4));
5572 BOOST_TEST(testFLN(S("ghknq"), "dobntpmqklicsahgjerf", 6, 10, 1));
5573 BOOST_TEST(testFLN(S("eopfi"), "tpdshainjkbfoemlrgcq", 6, 19, S::npos));
5574 BOOST_TEST(testFLN(S("dsnmg"), "oldpfgeakrnitscbjmqh", 6, 20, S::npos));
5575 BOOST_TEST(testFLN(S("jnkrfhotgl"), "", 0, 0, 0));
5576 BOOST_TEST(testFLN(S("dltjfngbko"), "rqegt", 0, 0, 0));
5577 BOOST_TEST(testFLN(S("bmjlpkiqde"), "dashm", 0, 1, 0));
5578 BOOST_TEST(testFLN(S("skrflobnqm"), "jqirk", 0, 2, 0));
5579 BOOST_TEST(testFLN(S("jkpldtshrm"), "rckeg", 0, 4, 0));
5580 BOOST_TEST(testFLN(S("ghasdbnjqo"), "jscie", 0, 5, 0));
5581 BOOST_TEST(testFLN(S("igrkhpbqjt"), "efsphndliq", 0, 0, 0));
5582 BOOST_TEST(testFLN(S("ikthdgcamf"), "gdicosleja", 0, 1, 0));
5583 BOOST_TEST(testFLN(S("pcofgeniam"), "qcpjibosfl", 0, 5, S::npos));
5584 BOOST_TEST(testFLN(S("rlfjgesqhc"), "lrhmefnjcq", 0, 9, S::npos));
5585 BOOST_TEST(testFLN(S("itphbqsker"), "dtablcrseo", 0, 10, 0));
5586 BOOST_TEST(testFLN(S("skjafcirqm"), "apckjsftedbhgomrnilq", 0, 0, 0));
5587 BOOST_TEST(testFLN(S("tcqomarsfd"), "pcbrgflehjtiadnsokqm", 0, 1, 0));
5588 BOOST_TEST(testFLN(S("rocfeldqpk"), "nsiadegjklhobrmtqcpf", 0, 10, 0));
5589 BOOST_TEST(testFLN(S("cfpegndlkt"), "cpmajdqnolikhgsbretf", 0, 19, S::npos));
5590 BOOST_TEST(testFLN(S("fqbtnkeasj"), "jcflkntmgiqrphdosaeb", 0, 20, S::npos));
5591 BOOST_TEST(testFLN(S("shbcqnmoar"), "", 1, 0, 1));
5592 BOOST_TEST(testFLN(S("bdoshlmfin"), "ontrs", 1, 0, 1));
5593 BOOST_TEST(testFLN(S("khfrebnsgq"), "pfkna", 1, 1, 1));
5594 BOOST_TEST(testFLN(S("getcrsaoji"), "ekosa", 1, 2, 0));
5595 BOOST_TEST(testFLN(S("fjiknedcpq"), "anqhk", 1, 4, 1));
5596 BOOST_TEST(testFLN(S("tkejgnafrm"), "jekca", 1, 5, 0));
5597 BOOST_TEST(testFLN(S("jnakolqrde"), "ikemsjgacf", 1, 0, 1));
5598 BOOST_TEST(testFLN(S("lcjptsmgbe"), "arolgsjkhm", 1, 1, 1));
5599 BOOST_TEST(testFLN(S("itfsmcjorl"), "oftkbldhre", 1, 5, 0));
5600 BOOST_TEST(testFLN(S("omchkfrjea"), "gbkqdoeftl", 1, 9, 1));
5601 BOOST_TEST(testFLN(S("cigfqkated"), "sqcflrgtim", 1, 10, S::npos));
5602 BOOST_TEST(testFLN(S("tscenjikml"), "fmhbkislrjdpanogqcet", 1, 0, 1));
5603 BOOST_TEST(testFLN(S("qcpaemsinf"), "rnioadktqlgpbcjsmhef", 1, 1, 1));
5604 BOOST_TEST(testFLN(S("gltkojeipd"), "oakgtnldpsefihqmjcbr", 1, 10, S::npos));
5605 BOOST_TEST(testFLN(S("qistfrgnmp"), "gbnaelosidmcjqktfhpr", 1, 19, S::npos));
5606 BOOST_TEST(testFLN(S("bdnpfcqaem"), "akbripjhlosndcmqgfet", 1, 20, S::npos));
5607 BOOST_TEST(testFLN(S("ectnhskflp"), "", 5, 0, 5));
5608 BOOST_TEST(testFLN(S("fgtianblpq"), "pijag", 5, 0, 5));
5609 BOOST_TEST(testFLN(S("mfeqklirnh"), "jrckd", 5, 1, 5));
5610 BOOST_TEST(testFLN(S("astedncjhk"), "qcloh", 5, 2, 5));
5611 BOOST_TEST(testFLN(S("fhlqgcajbr"), "thlmp", 5, 4, 5));
5612 BOOST_TEST(testFLN(S("epfhocmdng"), "qidmo", 5, 5, 5));
5613 BOOST_TEST(testFLN(S("apcnsibger"), "lnegpsjqrd", 5, 0, 5));
5614 BOOST_TEST(testFLN(S("aqkocrbign"), "rjqdablmfs", 5, 1, 4));
5615 BOOST_TEST(testFLN(S("ijsmdtqgce"), "enkgpbsjaq", 5, 5, 5));
5616 BOOST_TEST(testFLN(S("clobgsrken"), "kdsgoaijfh", 5, 9, 3));
5617 BOOST_TEST(testFLN(S("jbhcfposld"), "trfqgmckbe", 5, 10, 5));
5618 BOOST_TEST(testFLN(S("oqnpblhide"), "igetsracjfkdnpoblhqm", 5, 0, 5));
5619 BOOST_TEST(testFLN(S("lroeasctif"), "nqctfaogirshlekbdjpm", 5, 1, 5));
5620 BOOST_TEST(testFLN(S("bpjlgmiedh"), "csehfgomljdqinbartkp", 5, 10, 1));
5621 BOOST_TEST(testFLN(S("pamkeoidrj"), "qahoegcmplkfsjbdnitr", 5, 19, S::npos));
5622 BOOST_TEST(testFLN(S("espogqbthk"), "dpteiajrqmsognhlfbkc", 5, 20, S::npos));
5623 BOOST_TEST(testFLN(S("shoiedtcjb"), "", 9, 0, 9));
5624 BOOST_TEST(testFLN(S("ebcinjgads"), "tqbnh", 9, 0, 9));
5625 BOOST_TEST(testFLN(S("dqmregkcfl"), "akmle", 9, 1, 9));
5626 BOOST_TEST(testFLN(S("ngcrieqajf"), "iqfkm", 9, 2, 9));
5627 BOOST_TEST(testFLN(S("qosmilgnjb"), "tqjsr", 9, 4, 9));
5628 BOOST_TEST(testFLN(S("ikabsjtdfl"), "jplqg", 9, 5, 8));
5629 BOOST_TEST(testFLN(S("ersmicafdh"), "oilnrbcgtj", 9, 0, 9));
5630 BOOST_TEST(testFLN(S("fdnplotmgh"), "morkglpesn", 9, 1, 9));
5631 BOOST_TEST(testFLN(S("fdbicojerm"), "dmicerngat", 9, 5, 8));
5632 BOOST_TEST(testFLN(S("mbtafndjcq"), "radgeskbtc", 9, 9, 9));
5633 BOOST_TEST(testFLN(S("mlenkpfdtc"), "ljikprsmqo", 9, 10, 9));
5634 BOOST_TEST(testFLN(S("ahlcifdqgs"), "trqihkcgsjamfdbolnpe", 9, 0, 9));
5635 BOOST_TEST(testFLN(S("bgjemaltks"), "lqmthbsrekajgnofcipd", 9, 1, 9));
5636 BOOST_TEST(testFLN(S("pdhslbqrfc"), "jtalmedribkgqsopcnfh", 9, 10, 9));
5637 BOOST_TEST(testFLN(S("dirhtsnjkc"), "spqfoiclmtagejbndkrh", 9, 19, 3));
5638 BOOST_TEST(testFLN(S("dlroktbcja"), "nmotklspigjrdhcfaebq", 9, 20, S::npos));
5639 BOOST_TEST(testFLN(S("ncjpmaekbs"), "", 10, 0, 9));
5640 BOOST_TEST(testFLN(S("hlbosgmrak"), "hpmsd", 10, 0, 9));
5641 BOOST_TEST(testFLN(S("pqfhsgilen"), "qnpor", 10, 1, 9));
5642 BOOST_TEST(testFLN(S("gqtjsbdckh"), "otdma", 10, 2, 9));
5643 BOOST_TEST(testFLN(S("cfkqpjlegi"), "efhjg", 10, 4, 9));
5644 BOOST_TEST(testFLN(S("beanrfodgj"), "odpte", 10, 5, 9));
5645 BOOST_TEST(testFLN(S("adtkqpbjfi"), "bctdgfmolr", 10, 0, 9));
5646 BOOST_TEST(testFLN(S("iomkfthagj"), "oaklidrbqg", 10, 1, 9));
5647 BOOST_TEST(testFLN(S("sdpcilonqj"), "dnjfsagktr", 10, 5, 8));
5648 BOOST_TEST(testFLN(S("gtfbdkqeml"), "nejaktmiqg", 10, 9, 9));
5649 BOOST_TEST(testFLN(S("bmeqgcdorj"), "pjqonlebsf", 10, 10, 8));
5650 BOOST_TEST(testFLN(S("etqlcanmob"), "dshmnbtolcjepgaikfqr", 10, 0, 9));
5651 BOOST_TEST(testFLN(S("roqmkbdtia"), "iogfhpabtjkqlrnemcds", 10, 1, 9));
5652 BOOST_TEST(testFLN(S("kadsithljf"), "ngridfabjsecpqltkmoh", 10, 10, 7));
5653 BOOST_TEST(testFLN(S("sgtkpbfdmh"), "athmknplcgofrqejsdib", 10, 19, 5));
5654 BOOST_TEST(testFLN(S("qgmetnabkl"), "ldobhmqcafnjtkeisgrp", 10, 20, S::npos));
5655 BOOST_TEST(testFLN(S("cqjohampgd"), "", 11, 0, 9));
5656 BOOST_TEST(testFLN(S("hobitmpsan"), "aocjb", 11, 0, 9));
5657 BOOST_TEST(testFLN(S("tjehkpsalm"), "jbrnk", 11, 1, 9));
5658 BOOST_TEST(testFLN(S("ngfbojitcl"), "tqedg", 11, 2, 9));
5659 BOOST_TEST(testFLN(S("rcfkdbhgjo"), "nqskp", 11, 4, 9));
5660 BOOST_TEST(testFLN(S("qghptonrea"), "eaqkl", 11, 5, 7));
5661 BOOST_TEST(testFLN(S("hnprfgqjdl"), "reaoicljqm", 11, 0, 9));
5662 BOOST_TEST(testFLN(S("hlmgabenti"), "lsftgajqpm", 11, 1, 9));
5663 BOOST_TEST(testFLN(S("ofcjanmrbs"), "rlpfogmits", 11, 5, 9));
5664 BOOST_TEST(testFLN(S("jqedtkornm"), "shkncmiaqj", 11, 9, 7));
5665 BOOST_TEST(testFLN(S("rfedlasjmg"), "fpnatrhqgs", 11, 10, 8));
5666 BOOST_TEST(testFLN(S("talpqjsgkm"), "sjclemqhnpdbgikarfot", 11, 0, 9));
5667 BOOST_TEST(testFLN(S("lrkcbtqpie"), "otcmedjikgsfnqbrhpla", 11, 1, 9));
5668 BOOST_TEST(testFLN(S("cipogdskjf"), "bonsaefdqiprkhlgtjcm", 11, 10, 8));
5669 BOOST_TEST(testFLN(S("nqedcojahi"), "egpscmahijlfnkrodqtb", 11, 19, S::npos));
5670 BOOST_TEST(testFLN(S("hefnrkmctj"), "kmqbfepjthgilscrndoa", 11, 20, S::npos));
5671 BOOST_TEST(testFLN(S("atqirnmekfjolhpdsgcb"), "", 0, 0, 0));
5672 BOOST_TEST(testFLN(S("echfkmlpribjnqsaogtd"), "prboq", 0, 0, 0));
5673 BOOST_TEST(testFLN(S("qnhiftdgcleajbpkrosm"), "fjcqh", 0, 1, 0));
5674 BOOST_TEST(testFLN(S("chamfknorbedjitgslpq"), "fmosa", 0, 2, 0));
5675 BOOST_TEST(testFLN(S("njhqpibfmtlkaecdrgso"), "qdbok", 0, 4, 0));
5676 BOOST_TEST(testFLN(S("ebnghfsqkprmdcljoiat"), "amslg", 0, 5, 0));
5677 BOOST_TEST(testFLN(S("letjomsgihfrpqbkancd"), "smpltjneqb", 0, 0, 0));
5678 BOOST_TEST(testFLN(S("nblgoipcrqeaktshjdmf"), "flitskrnge", 0, 1, 0));
5679 BOOST_TEST(testFLN(S("cehkbngtjoiflqapsmrd"), "pgqihmlbef", 0, 5, 0));
5680 BOOST_TEST(testFLN(S("mignapfoklbhcqjetdrs"), "cfpdqjtgsb", 0, 9, 0));
5681 BOOST_TEST(testFLN(S("ceatbhlsqjgpnokfrmdi"), "htpsiaflom", 0, 10, 0));
5682 BOOST_TEST(testFLN(S("ocihkjgrdelpfnmastqb"), "kpjfiaceghsrdtlbnomq", 0, 0, 0));
5683 BOOST_TEST(testFLN(S("noelgschdtbrjfmiqkap"), "qhtbomidljgafneksprc", 0, 1, 0));
5684 BOOST_TEST(testFLN(S("dkclqfombepritjnghas"), "nhtjobkcefldimpsaqgr", 0, 10, 0));
5685 BOOST_TEST(testFLN(S("miklnresdgbhqcojftap"), "prabcjfqnoeskilmtgdh", 0, 19, S::npos));
5686 BOOST_TEST(testFLN(S("htbcigojaqmdkfrnlsep"), "dtrgmchilkasqoebfpjn", 0, 20, S::npos));
5687 BOOST_TEST(testFLN(S("febhmqtjanokscdirpgl"), "", 1, 0, 1));
5688 BOOST_TEST(testFLN(S("loakbsqjpcrdhftniegm"), "sqome", 1, 0, 1));
5689 BOOST_TEST(testFLN(S("reagphsqflbitdcjmkno"), "smfte", 1, 1, 1));
5690 BOOST_TEST(testFLN(S("jitlfrqemsdhkopncabg"), "ciboh", 1, 2, 0));
5691 BOOST_TEST(testFLN(S("mhtaepscdnrjqgbkifol"), "haois", 1, 4, 0));
5692 BOOST_TEST(testFLN(S("tocesrfmnglpbjihqadk"), "abfki", 1, 5, 1));
5693 BOOST_TEST(testFLN(S("lpfmctjrhdagneskbqoi"), "frdkocntmq", 1, 0, 1));
5694 BOOST_TEST(testFLN(S("lsmqaepkdhncirbtjfgo"), "oasbpedlnr", 1, 1, 1));
5695 BOOST_TEST(testFLN(S("epoiqmtldrabnkjhcfsg"), "kltqmhgand", 1, 5, 1));
5696 BOOST_TEST(testFLN(S("emgasrilpknqojhtbdcf"), "gdtfjchpmr", 1, 9, 0));
5697 BOOST_TEST(testFLN(S("hnfiagdpcklrjetqbsom"), "ponmcqblet", 1, 10, 0));
5698 BOOST_TEST(testFLN(S("nsdfebgajhmtricpoklq"), "sgphqdnofeiklatbcmjr", 1, 0, 1));
5699 BOOST_TEST(testFLN(S("atjgfsdlpobmeiqhncrk"), "ljqprsmigtfoneadckbh", 1, 1, 1));
5700 BOOST_TEST(testFLN(S("sitodfgnrejlahcbmqkp"), "ligeojhafnkmrcsqtbdp", 1, 10, 0));
5701 BOOST_TEST(testFLN(S("fraghmbiceknltjpqosd"), "lsimqfnjarbopedkhcgt", 1, 19, S::npos));
5702 BOOST_TEST(testFLN(S("pmafenlhqtdbkirjsogc"), "abedmfjlghniorcqptks", 1, 20, S::npos));
5703 BOOST_TEST(testFLN(S("pihgmoeqtnakrjslcbfd"), "", 10, 0, 10));
5704 BOOST_TEST(testFLN(S("gjdkeprctqblnhiafsom"), "hqtoa", 10, 0, 10));
5705 BOOST_TEST(testFLN(S("mkpnblfdsahrcqijteog"), "cahif", 10, 1, 10));
5706 BOOST_TEST(testFLN(S("gckarqnelodfjhmbptis"), "kehis", 10, 2, 10));
5707 BOOST_TEST(testFLN(S("gqpskidtbclomahnrjfe"), "kdlmh", 10, 4, 9));
5708 BOOST_TEST(testFLN(S("pkldjsqrfgitbhmaecno"), "paeql", 10, 5, 10));
5709 BOOST_TEST(testFLN(S("aftsijrbeklnmcdqhgop"), "aghoqiefnb", 10, 0, 10));
5710 BOOST_TEST(testFLN(S("mtlgdrhafjkbiepqnsoc"), "jrbqaikpdo", 10, 1, 10));
5711 BOOST_TEST(testFLN(S("pqgirnaefthokdmbsclj"), "smjonaeqcl", 10, 5, 10));
5712 BOOST_TEST(testFLN(S("kpdbgjmtherlsfcqoina"), "eqbdrkcfah", 10, 9, 8));
5713 BOOST_TEST(testFLN(S("jrlbothiknqmdgcfasep"), "kapmsienhf", 10, 10, 10));
5714 BOOST_TEST(testFLN(S("mjogldqferckabinptsh"), "jpqotrlenfcsbhkaimdg", 10, 0, 10));
5715 BOOST_TEST(testFLN(S("apoklnefbhmgqcdrisjt"), "jlbmhnfgtcqprikeados", 10, 1, 10));
5716 BOOST_TEST(testFLN(S("ifeopcnrjbhkdgatmqls"), "stgbhfmdaljnpqoicker", 10, 10, 8));
5717 BOOST_TEST(testFLN(S("ckqhaiesmjdnrgolbtpf"), "oihcetflbjagdsrkmqpn", 10, 19, S::npos));
5718 BOOST_TEST(testFLN(S("bnlgapfimcoterskqdjh"), "adtclebmnpjsrqfkigoh", 10, 20, S::npos));
5719 BOOST_TEST(testFLN(S("kgdlrobpmjcthqsafeni"), "", 19, 0, 19));
5720 BOOST_TEST(testFLN(S("dfkechomjapgnslbtqir"), "beafg", 19, 0, 19));
5721 BOOST_TEST(testFLN(S("rloadknfbqtgmhcsipje"), "iclat", 19, 1, 19));
5722 BOOST_TEST(testFLN(S("mgjhkolrnadqbpetcifs"), "rkhnf", 19, 2, 19));
5723 BOOST_TEST(testFLN(S("cmlfakiojdrgtbsphqen"), "clshq", 19, 4, 19));
5724 BOOST_TEST(testFLN(S("kghbfipeomsntdalrqjc"), "dtcoj", 19, 5, 17));
5725 BOOST_TEST(testFLN(S("eldiqckrnmtasbghjfpo"), "rqosnjmfth", 19, 0, 19));
5726 BOOST_TEST(testFLN(S("abqjcfedgotihlnspkrm"), "siatdfqglh", 19, 1, 19));
5727 BOOST_TEST(testFLN(S("qfbadrtjsimkolcenhpg"), "mrlshtpgjq", 19, 5, 19));
5728 BOOST_TEST(testFLN(S("abseghclkjqifmtodrnp"), "adlcskgqjt", 19, 9, 19));
5729 BOOST_TEST(testFLN(S("ibmsnlrjefhtdokacqpg"), "drshcjknaf", 19, 10, 19));
5730 BOOST_TEST(testFLN(S("mrkfciqjebaponsthldg"), "etsaqroinghpkjdlfcbm", 19, 0, 19));
5731 BOOST_TEST(testFLN(S("mjkticdeoqshpalrfbgn"), "sgepdnkqliambtrocfhj", 19, 1, 19));
5732 BOOST_TEST(testFLN(S("rqnoclbdejgiphtfsakm"), "nlmcjaqgbsortfdihkpe", 19, 10, 18));
5733 BOOST_TEST(testFLN(S("plkqbhmtfaeodjcrsing"), "racfnpmosldibqkghjet", 19, 19, 7));
5734 BOOST_TEST(testFLN(S("oegalhmstjrfickpbndq"), "fjhdsctkqeiolagrnmbp", 19, 20, S::npos));
5735 BOOST_TEST(testFLN(S("rdtgjcaohpblniekmsfq"), "", 20, 0, 19));
5736 BOOST_TEST(testFLN(S("ofkqbnjetrmsaidphglc"), "ejanp", 20, 0, 19));
5737 BOOST_TEST(testFLN(S("grkpahljcftesdmonqib"), "odife", 20, 1, 19));
5738 BOOST_TEST(testFLN(S("jimlgbhfqkteospardcn"), "okaqd", 20, 2, 19));
5739 BOOST_TEST(testFLN(S("gftenihpmslrjkqadcob"), "lcdbi", 20, 4, 18));
5740 BOOST_TEST(testFLN(S("bmhldogtckrfsanijepq"), "fsqbj", 20, 5, 18));
5741 BOOST_TEST(testFLN(S("nfqkrpjdesabgtlcmoih"), "bigdomnplq", 20, 0, 19));
5742 BOOST_TEST(testFLN(S("focalnrpiqmdkstehbjg"), "apiblotgcd", 20, 1, 19));
5743 BOOST_TEST(testFLN(S("rhqdspkmebiflcotnjga"), "acfhdenops", 20, 5, 18));
5744 BOOST_TEST(testFLN(S("rahdtmsckfboqlpniegj"), "jopdeamcrk", 20, 9, 18));
5745 BOOST_TEST(testFLN(S("fbkeiopclstmdqranjhg"), "trqncbkgmh", 20, 10, 17));
5746 BOOST_TEST(testFLN(S("lifhpdgmbconstjeqark"), "tomglrkencbsfjqpihda", 20, 0, 19));
5747 BOOST_TEST(testFLN(S("pboqganrhedjmltsicfk"), "gbkhdnpoietfcmrslajq", 20, 1, 19));
5748 BOOST_TEST(testFLN(S("klchabsimetjnqgorfpd"), "rtfnmbsglkjaichoqedp", 20, 10, 19));
5749 BOOST_TEST(testFLN(S("sirfgmjqhctndbklaepo"), "ohkmdpfqbsacrtjnlgei", 20, 19, 1));
5750 BOOST_TEST(testFLN(S("rlbdsiceaonqjtfpghkm"), "dlbrteoisgphmkncajfq", 20, 20, S::npos));
5751 BOOST_TEST(testFLN(S("ecgdanriptblhjfqskom"), "", 21, 0, 19));
5752 BOOST_TEST(testFLN(S("fdmiarlpgcskbhoteqjn"), "sjrlo", 21, 0, 19));
5753 BOOST_TEST(testFLN(S("rlbstjqopignecmfadkh"), "qjpor", 21, 1, 19));
5754 BOOST_TEST(testFLN(S("grjpqmbshektdolcafni"), "odhfn", 21, 2, 19));
5755 BOOST_TEST(testFLN(S("sakfcohtqnibprjmlged"), "qtfin", 21, 4, 19));
5756 BOOST_TEST(testFLN(S("mjtdglasihqpocebrfkn"), "hpqfo", 21, 5, 19));
5757 BOOST_TEST(testFLN(S("okaplfrntghqbmeicsdj"), "fabmertkos", 21, 0, 19));
5758 BOOST_TEST(testFLN(S("sahngemrtcjidqbklfpo"), "brqtgkmaej", 21, 1, 19));
5759 BOOST_TEST(testFLN(S("dlmsipcnekhbgoaftqjr"), "nfrdeihsgl", 21, 5, 18));
5760 BOOST_TEST(testFLN(S("ahegrmqnoiklpfsdbcjt"), "hlfrosekpi", 21, 9, 19));
5761 BOOST_TEST(testFLN(S("hdsjbnmlegtkqripacof"), "atgbkrjdsm", 21, 10, 19));
5762 BOOST_TEST(testFLN(S("pcnedrfjihqbalkgtoms"), "blnrptjgqmaifsdkhoec", 21, 0, 19));
5763 BOOST_TEST(testFLN(S("qjidealmtpskrbfhocng"), "ctpmdahebfqjgknloris", 21, 1, 19));
5764 BOOST_TEST(testFLN(S("qeindtagmokpfhsclrbj"), "apnkeqthrmlbfodiscgj", 21, 10, 19));
5765 BOOST_TEST(testFLN(S("kpfegbjhsrnodltqciam"), "jdgictpframeoqlsbknh", 21, 19, 7));
5766 BOOST_TEST(testFLN(S("hnbrcplsjfgiktoedmaq"), "qprlsfojamgndekthibc", 21, 20, S::npos));
5767}
5768
5769#include <iostream>
5770
5771// done
5772void
5773testReplace()
5774{
5775 // replace(size_type pos1, size_type n1, const charT* s, size_type n2);
5776 {
5777 static_string<20> fs1 = "helloworld";
5778 BOOST_TEST(fs1.replace(5, 2, fs1.data() + 1, 8) == "helloelloworlrld");
5779 }
5780 {
5781 static_string<20> fs1 = "helloworld";
5782 BOOST_TEST(fs1.replace(3, 2, fs1.data() + 2, 2) == "helllworld");
5783 }
5784 {
5785 static_string<20> fs2 = "0123456789";
5786 BOOST_TEST(fs2.replace(5, 2, fs2.data(), 2) == "0123401789");
5787 }
5788 {
5789 static_string<20> fs2 = "0123456789";
5790 BOOST_TEST(fs2.replace(1, 3, fs2.data() + 1, 5) == "012345456789");
5791 }
5792 {
5793 static_string<20> fs2 = "0123456789";
5794 BOOST_TEST(fs2.replace(0, 5, fs2.data(), 5) == "0123456789");
5795 }
5796 {
5797 static_string<20> fs2 = "0123456789";
5798 BOOST_TEST(fs2.replace(0, 5, fs2.data() + 5, 5) == "5678956789");
5799 }
5800 {
5801 static_string<20> fs2 = "0123456789";
5802 BOOST_TEST(fs2.replace(5, 2, fs2.data() + 3, 5) == "0123434567789");
5803 }
5804 {
5805 static_string<20> fs2 = "0123456789";
5806 BOOST_TEST(fs2.replace(5, 2, fs2.data() + 7, 3) == "01234789789");
5807 }
5808 {
5809 static_string<20> fs2 = "0123456789";
5810 BOOST_TEST(fs2.replace(3, 5, fs2.data() + 4, 2) == "0124589");
5811 }
5812 {
5813 static_string<20> fs2 = "0123456789";
5814 BOOST_TEST(fs2.replace(3, 5, fs2.data() + 1, 3) == "01212389");
5815 }
5816 {
5817 static_string<20> fs2 = "0123456789";
5818 BOOST_TEST(fs2.replace(0, 10, fs2.data(), 10) == "0123456789");
5819 }
5820 {
5821 static_string<20> fs2 = "0123456789";
5822 BOOST_TEST(fs2.replace(0, 10, fs2.data(), 5) == "01234");
5823 }
5824 {
5825 static_string<20> fs1 = "helloworld";
5826 BOOST_TEST(fs1.replace(4, 3, fs1.data() + 1, 3) == "hellellrld");
5827 }
5828 {
5829 static_string<20> fs1 = "helloworld";
5830 BOOST_TEST_EQ(fs1.replace(0, 1, fs1.data() + 4, 4), static_string<20>("oworelloworld"));
5831 }
5832 // replace(size_type pos1, size_type n1, const basic_string& str);
5833 {
5834 static_string<20> fs1 = "helloworld";
5835 BOOST_TEST(fs1.replace(0, fs1.size(), fs1) == "helloworld");
5836 }
5837 // replace(size_type pos1, size_type n1, const basic_string& str); unchecked
5838 {
5839 static_string<20> fs1 = "helloworld";
5840 static_string<15> fs2 = "helloworld";
5841 BOOST_TEST(fs1.replace(0, fs1.size(), fs2) == "helloworld");
5842 }
5843 // replace(size_type pos1, size_type n1, const basic_string& str, size_type pos2, size_type n2 = npos);
5844 {
5845 static_string<20> fs1 = "helloworld";
5846 BOOST_TEST(fs1.replace(0, fs1.size(), fs1, 0, fs1.size()) == "helloworld");
5847 }
5848 // replace(size_type pos1, size_type n1, const basic_string& str, size_type pos2, size_type n2 = npos); unchecked
5849 {
5850 static_string<20> fs1 = "helloworld";
5851 static_string<15> fs2 = "helloworld";
5852 BOOST_TEST(fs1.replace(0, fs1.size(), fs2, 0, fs2.size()) == "helloworld");
5853 }
5854 // replace(size_type pos1, size_type n1, const T& t);
5855 {
5856 static_string<20> fs1 = "helloworld";
5857 BOOST_TEST(fs1.replace(0, fs1.size(), string_view(fs1)) == "helloworld");
5858 }
5859 // replace(size_type pos1, size_type n1, const T& t, size_type pos2, size_type n2 = npos);
5860 {
5861 static_string<20> fs1 = "helloworld";
5862 BOOST_TEST(fs1.replace(0, fs1.size(), string_view(fs1), 0, fs1.size()) == "helloworld");
5863 }
5864 // replace(size_type pos, size_type n, const charT * s);
5865 {
5866 static_string<20> fs1 = "helloworld";
5867 BOOST_TEST(fs1.replace(0, fs1.size(), fs1.data()) == "helloworld");
5868 }
5869 // replace(size_type pos1, size_type n1, size_type n2, charT c);]
5870 {
5871 static_string<20> fs1 = "helloworld";
5872 BOOST_TEST(fs1.replace(0, fs1.size(), fs1.size(), 'a') == "aaaaaaaaaa");
5873 }
5874 // replace(const_iterator i1, const_iterator i2, const basic_string& str);
5875 {
5876 static_string<20> fs1 = "helloworld";
5877 BOOST_TEST(fs1.replace(fs1.begin(), fs1.end(), fs1) == "helloworld");
5878 }
5879 // replace(const_iterator i1, const_iterator i2, const basic_string& str); unchecked
5880 {
5881 static_string<20> fs1 = "helloworld";
5882 static_string<15> fs2 = "helloworld";
5883 BOOST_TEST(fs1.replace(fs1.begin(), fs1.end(), fs2) == "helloworld");
5884 }
5885 // replace(const_iterator i1, const_iterator i2, const T& t);
5886 {
5887 static_string<20> fs1 = "helloworld";
5888 BOOST_TEST(fs1.replace(fs1.begin(), fs1.end(), string_view(fs1)) == "helloworld");
5889 }
5890 // replace(const_iterator i1, const_iterator i2, const charT* s, size_type n);
5891 {
5892 static_string<20> fs1 = "helloworld";
5893 BOOST_TEST(fs1.replace(fs1.begin(), fs1.end(), fs1.data(), fs1.size()) == "helloworld");
5894 }
5895 // replace(const_iterator i1, const_iterator i2, const charT* s);
5896 {
5897 static_string<20> fs1 = "helloworld";
5898 BOOST_TEST(fs1.replace(fs1.begin(), fs1.end(), fs1.data()) == "helloworld");
5899 }
5900 // replace(const_iterator i1, const_iterator i2, size_type n, charT c);
5901 {
5902 static_string<20> fs1 = "helloworld";
5903 BOOST_TEST(fs1.replace(fs1.begin(), fs1.end(), fs1.size(), 'a') == "aaaaaaaaaa");
5904 }
5905 // replace(const_iterator i1, const_iterator i2, InputIterator j1, InputIterator j2);
5906 {
5907 static_string<20> fs1 = "helloworld";
5908 BOOST_TEST(fs1.replace(fs1.begin(), fs1.begin() + 5, fs1.begin(), fs1.end()) == "helloworldworld");
5909 }
5910 // replace(const_iterator i1, const_iterator i2, initializer_list<charT> il);
5911 {
5912 static_string<20> fs1 = "helloworld";
5913 BOOST_TEST(fs1.replace(fs1.begin(), fs1.end(), {'h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd'}) == "helloworld");
5914 }
5915 // replace(const_iterator, const_iterator, InputIterator, InputIterator)
5916 {
5917 std::stringstream a("defghi");
5918 static_string<30> b = "abcabcdefjklmnop";
5919 BOOST_TEST(b.replace(b.begin() + 3, b.begin() + 9,
5920 std::istream_iterator<char>(a),
5921 std::istream_iterator<char>()) ==
5922 "abcdefghijklmnop");
5923 }
5924
5925 using S = static_string<400>;
5926 S s_short = "123/";
5927 S s_long = "Lorem ipsum dolor sit amet, consectetur/";
5928
5929 BOOST_TEST(s_short.replace(s_short.begin(), s_short.begin(), s_short.begin(), s_short.end()) == "123/123/");
5930 BOOST_TEST(s_short.replace(s_short.begin(), s_short.begin(), s_short.begin(), s_short.end()) == "123/123/123/123/");
5931 BOOST_TEST(s_short.replace(s_short.begin(), s_short.begin(), s_short.begin(), s_short.end()) == "123/123/123/123/123/123/123/123/");
5932 BOOST_TEST(s_long.replace(s_long.begin(), s_long.begin(), s_long.begin(), s_long.end()) == "Lorem ipsum dolor sit amet, consectetur/Lorem ipsum dolor sit amet, consectetur/");
5933
5934 BOOST_TEST(testR(S(""), 0, 0, "", S("")));
5935 BOOST_TEST(testR(S(""), 0, 0, "12345", S("12345")));
5936 BOOST_TEST(testR(S(""), 0, 0, "1234567890", S("1234567890")));
5937 BOOST_TEST(testR(S(""), 0, 0, "12345678901234567890", S("12345678901234567890")));
5938 BOOST_TEST(testR(S("abcde"), 0, 0, "", S("abcde")));
5939 BOOST_TEST(testR(S("abcde"), 0, 0, "12345", S("12345abcde")));
5940 BOOST_TEST(testR(S("abcde"), 0, 0, "1234567890", S("1234567890abcde")));
5941 BOOST_TEST(testR(S("abcde"), 0, 0, "12345678901234567890", S("12345678901234567890abcde")));
5942 BOOST_TEST(testR(S("abcde"), 0, 1, "", S("bcde")));
5943 BOOST_TEST(testR(S("abcde"), 0, 1, "12345", S("12345bcde")));
5944 BOOST_TEST(testR(S("abcde"), 0, 1, "1234567890", S("1234567890bcde")));
5945 BOOST_TEST(testR(S("abcde"), 0, 1, "12345678901234567890", S("12345678901234567890bcde")));
5946 BOOST_TEST(testR(S("abcde"), 0, 2, "", S("cde")));
5947 BOOST_TEST(testR(S("abcde"), 0, 2, "12345", S("12345cde")));
5948 BOOST_TEST(testR(S("abcde"), 0, 2, "1234567890", S("1234567890cde")));
5949 BOOST_TEST(testR(S("abcde"), 0, 2, "12345678901234567890", S("12345678901234567890cde")));
5950 BOOST_TEST(testR(S("abcde"), 0, 4, "", S("e")));
5951 BOOST_TEST(testR(S("abcde"), 0, 4, "12345", S("12345e")));
5952 BOOST_TEST(testR(S("abcde"), 0, 4, "1234567890", S("1234567890e")));
5953 BOOST_TEST(testR(S("abcde"), 0, 4, "12345678901234567890", S("12345678901234567890e")));
5954 BOOST_TEST(testR(S("abcde"), 0, 5, "", S("")));
5955 BOOST_TEST(testR(S("abcde"), 0, 5, "12345", S("12345")));
5956 BOOST_TEST(testR(S("abcde"), 0, 5, "1234567890", S("1234567890")));
5957 BOOST_TEST(testR(S("abcde"), 0, 5, "12345678901234567890", S("12345678901234567890")));
5958 BOOST_TEST(testR(S("abcde"), 1, 0, "", S("abcde")));
5959 BOOST_TEST(testR(S("abcde"), 1, 0, "12345", S("a12345bcde")));
5960 BOOST_TEST(testR(S("abcde"), 1, 0, "1234567890", S("a1234567890bcde")));
5961 BOOST_TEST(testR(S("abcde"), 1, 0, "12345678901234567890", S("a12345678901234567890bcde")));
5962 BOOST_TEST(testR(S("abcde"), 1, 1, "", S("acde")));
5963 BOOST_TEST(testR(S("abcde"), 1, 1, "12345", S("a12345cde")));
5964 BOOST_TEST(testR(S("abcde"), 1, 1, "1234567890", S("a1234567890cde")));
5965 BOOST_TEST(testR(S("abcde"), 1, 1, "12345678901234567890", S("a12345678901234567890cde")));
5966 BOOST_TEST(testR(S("abcde"), 1, 2, "", S("ade")));
5967 BOOST_TEST(testR(S("abcde"), 1, 2, "12345", S("a12345de")));
5968 BOOST_TEST(testR(S("abcde"), 1, 2, "1234567890", S("a1234567890de")));
5969 BOOST_TEST(testR(S("abcde"), 1, 2, "12345678901234567890", S("a12345678901234567890de")));
5970 BOOST_TEST(testR(S("abcde"), 1, 3, "", S("ae")));
5971 BOOST_TEST(testR(S("abcde"), 1, 3, "12345", S("a12345e")));
5972 BOOST_TEST(testR(S("abcde"), 1, 3, "1234567890", S("a1234567890e")));
5973 BOOST_TEST(testR(S("abcde"), 1, 3, "12345678901234567890", S("a12345678901234567890e")));
5974 BOOST_TEST(testR(S("abcde"), 1, 4, "", S("a")));
5975 BOOST_TEST(testR(S("abcde"), 1, 4, "12345", S("a12345")));
5976 BOOST_TEST(testR(S("abcde"), 1, 4, "1234567890", S("a1234567890")));
5977 BOOST_TEST(testR(S("abcde"), 1, 4, "12345678901234567890", S("a12345678901234567890")));
5978 BOOST_TEST(testR(S("abcde"), 2, 0, "", S("abcde")));
5979 BOOST_TEST(testR(S("abcde"), 2, 0, "12345", S("ab12345cde")));
5980 BOOST_TEST(testR(S("abcde"), 2, 0, "1234567890", S("ab1234567890cde")));
5981 BOOST_TEST(testR(S("abcde"), 2, 0, "12345678901234567890", S("ab12345678901234567890cde")));
5982 BOOST_TEST(testR(S("abcde"), 2, 1, "", S("abde")));
5983 BOOST_TEST(testR(S("abcde"), 2, 1, "12345", S("ab12345de")));
5984 BOOST_TEST(testR(S("abcde"), 2, 1, "1234567890", S("ab1234567890de")));
5985 BOOST_TEST(testR(S("abcde"), 2, 1, "12345678901234567890", S("ab12345678901234567890de")));
5986 BOOST_TEST(testR(S("abcde"), 2, 2, "", S("abe")));
5987 BOOST_TEST(testR(S("abcde"), 2, 2, "12345", S("ab12345e")));
5988 BOOST_TEST(testR(S("abcde"), 2, 2, "1234567890", S("ab1234567890e")));
5989 BOOST_TEST(testR(S("abcde"), 2, 2, "12345678901234567890", S("ab12345678901234567890e")));
5990 BOOST_TEST(testR(S("abcde"), 2, 3, "", S("ab")));
5991 BOOST_TEST(testR(S("abcde"), 2, 3, "12345", S("ab12345")));
5992 BOOST_TEST(testR(S("abcde"), 2, 3, "1234567890", S("ab1234567890")));
5993 BOOST_TEST(testR(S("abcde"), 2, 3, "12345678901234567890", S("ab12345678901234567890")));
5994 BOOST_TEST(testR(S("abcde"), 4, 0, "", S("abcde")));
5995 BOOST_TEST(testR(S("abcde"), 4, 0, "12345", S("abcd12345e")));
5996 BOOST_TEST(testR(S("abcde"), 4, 0, "1234567890", S("abcd1234567890e")));
5997 BOOST_TEST(testR(S("abcde"), 4, 0, "12345678901234567890", S("abcd12345678901234567890e")));
5998 BOOST_TEST(testR(S("abcde"), 4, 1, "", S("abcd")));
5999 BOOST_TEST(testR(S("abcde"), 4, 1, "12345", S("abcd12345")));
6000 BOOST_TEST(testR(S("abcde"), 4, 1, "1234567890", S("abcd1234567890")));
6001 BOOST_TEST(testR(S("abcde"), 4, 1, "12345678901234567890", S("abcd12345678901234567890")));
6002 BOOST_TEST(testR(S("abcde"), 5, 0, "", S("abcde")));
6003 BOOST_TEST(testR(S("abcde"), 5, 0, "12345", S("abcde12345")));
6004 BOOST_TEST(testR(S("abcde"), 5, 0, "1234567890", S("abcde1234567890")));
6005 BOOST_TEST(testR(S("abcde"), 5, 0, "12345678901234567890", S("abcde12345678901234567890")));
6006 BOOST_TEST(testR(S("abcdefghij"), 0, 0, "", S("abcdefghij")));
6007 BOOST_TEST(testR(S("abcdefghij"), 0, 0, "12345", S("12345abcdefghij")));
6008 BOOST_TEST(testR(S("abcdefghij"), 0, 0, "1234567890", S("1234567890abcdefghij")));
6009 BOOST_TEST(testR(S("abcdefghij"), 0, 0, "12345678901234567890", S("12345678901234567890abcdefghij")));
6010 BOOST_TEST(testR(S("abcdefghij"), 0, 1, "", S("bcdefghij")));
6011 BOOST_TEST(testR(S("abcdefghij"), 0, 1, "12345", S("12345bcdefghij")));
6012 BOOST_TEST(testR(S("abcdefghij"), 0, 1, "1234567890", S("1234567890bcdefghij")));
6013 BOOST_TEST(testR(S("abcdefghij"), 0, 1, "12345678901234567890", S("12345678901234567890bcdefghij")));
6014 BOOST_TEST(testR(S("abcdefghij"), 0, 5, "", S("fghij")));
6015 BOOST_TEST(testR(S("abcdefghij"), 0, 5, "12345", S("12345fghij")));
6016 BOOST_TEST(testR(S("abcdefghij"), 0, 5, "1234567890", S("1234567890fghij")));
6017 BOOST_TEST(testR(S("abcdefghij"), 0, 5, "12345678901234567890", S("12345678901234567890fghij")));
6018 BOOST_TEST(testR(S("abcdefghij"), 0, 9, "", S("j")));
6019 BOOST_TEST(testR(S("abcdefghij"), 0, 9, "12345", S("12345j")));
6020 BOOST_TEST(testR(S("abcdefghij"), 0, 9, "1234567890", S("1234567890j")));
6021 BOOST_TEST(testR(S("abcdefghij"), 0, 9, "12345678901234567890", S("12345678901234567890j")));
6022 BOOST_TEST(testR(S("abcdefghij"), 0, 10, "", S("")));
6023 BOOST_TEST(testR(S("abcdefghij"), 0, 10, "12345", S("12345")));
6024 BOOST_TEST(testR(S("abcdefghij"), 0, 10, "1234567890", S("1234567890")));
6025 BOOST_TEST(testR(S("abcdefghij"), 0, 10, "12345678901234567890", S("12345678901234567890")));
6026 BOOST_TEST(testR(S("abcdefghij"), 1, 0, "", S("abcdefghij")));
6027 BOOST_TEST(testR(S("abcdefghij"), 1, 0, "12345", S("a12345bcdefghij")));
6028 BOOST_TEST(testR(S("abcdefghij"), 1, 0, "1234567890", S("a1234567890bcdefghij")));
6029 BOOST_TEST(testR(S("abcdefghij"), 1, 0, "12345678901234567890", S("a12345678901234567890bcdefghij")));
6030 BOOST_TEST(testR(S("abcdefghij"), 1, 1, "", S("acdefghij")));
6031 BOOST_TEST(testR(S("abcdefghij"), 1, 1, "12345", S("a12345cdefghij")));
6032 BOOST_TEST(testR(S("abcdefghij"), 1, 1, "1234567890", S("a1234567890cdefghij")));
6033 BOOST_TEST(testR(S("abcdefghij"), 1, 1, "12345678901234567890", S("a12345678901234567890cdefghij")));
6034 BOOST_TEST(testR(S(""), 0, 0, 0, '2', S("")));
6035 BOOST_TEST(testR(S(""), 0, 0, 5, '2', S("22222")));
6036 BOOST_TEST(testR(S(""), 0, 0, 10, '2', S("2222222222")));
6037 BOOST_TEST(testR(S(""), 0, 0, 20, '2', S("22222222222222222222")));
6038 BOOST_TEST(testR(S(""), 0, 1, 0, '2', S("")));
6039 BOOST_TEST(testR(S(""), 0, 1, 5, '2', S("22222")));
6040 BOOST_TEST(testR(S(""), 0, 1, 10, '2', S("2222222222")));
6041 BOOST_TEST(testR(S(""), 0, 1, 20, '2', S("22222222222222222222")));
6042 BOOST_TEST(testR(S("abcde"), 0, 0, 0, '2', S("abcde")));
6043 BOOST_TEST(testR(S("abcde"), 0, 0, 5, '2', S("22222abcde")));
6044 BOOST_TEST(testR(S("abcde"), 0, 0, 10, '2', S("2222222222abcde")));
6045 BOOST_TEST(testR(S("abcde"), 0, 0, 20, '2', S("22222222222222222222abcde")));
6046 BOOST_TEST(testR(S("abcde"), 0, 1, 0, '2', S("bcde")));
6047 BOOST_TEST(testR(S("abcde"), 0, 1, 5, '2', S("22222bcde")));
6048 BOOST_TEST(testR(S("abcde"), 0, 1, 10, '2', S("2222222222bcde")));
6049 BOOST_TEST(testR(S("abcde"), 0, 1, 20, '2', S("22222222222222222222bcde")));
6050 BOOST_TEST(testR(S("abcde"), 0, 2, 0, '2', S("cde")));
6051 BOOST_TEST(testR(S("abcde"), 0, 2, 5, '2', S("22222cde")));
6052 BOOST_TEST(testR(S("abcde"), 0, 2, 10, '2', S("2222222222cde")));
6053 BOOST_TEST(testR(S("abcde"), 0, 2, 20, '2', S("22222222222222222222cde")));
6054 BOOST_TEST(testR(S("abcde"), 0, 4, 0, '2', S("e")));
6055 BOOST_TEST(testR(S("abcde"), 0, 4, 5, '2', S("22222e")));
6056 BOOST_TEST(testR(S("abcde"), 0, 4, 10, '2', S("2222222222e")));
6057 BOOST_TEST(testR(S("abcde"), 0, 4, 20, '2', S("22222222222222222222e")));
6058 BOOST_TEST(testR(S("abcde"), 0, 5, 0, '2', S("")));
6059 BOOST_TEST(testR(S("abcde"), 0, 5, 5, '2', S("22222")));
6060 BOOST_TEST(testR(S("abcde"), 0, 5, 10, '2', S("2222222222")));
6061 BOOST_TEST(testR(S("abcde"), 0, 5, 20, '2', S("22222222222222222222")));
6062 BOOST_TEST(testR(S("abcde"), 0, 6, 0, '2', S("")));
6063 BOOST_TEST(testR(S("abcde"), 0, 6, 5, '2', S("22222")));
6064 BOOST_TEST(testR(S("abcde"), 0, 6, 10, '2', S("2222222222")));
6065 BOOST_TEST(testR(S("abcde"), 0, 6, 20, '2', S("22222222222222222222")));
6066 BOOST_TEST(testR(S("abcde"), 1, 0, 0, '2', S("abcde")));
6067 BOOST_TEST(testR(S("abcde"), 1, 0, 5, '2', S("a22222bcde")));
6068 BOOST_TEST(testR(S("abcde"), 1, 0, 10, '2', S("a2222222222bcde")));
6069 BOOST_TEST(testR(S("abcde"), 1, 0, 20, '2', S("a22222222222222222222bcde")));
6070 BOOST_TEST(testR(S("abcde"), 1, 1, 0, '2', S("acde")));
6071 BOOST_TEST(testR(S("abcde"), 1, 1, 5, '2', S("a22222cde")));
6072 BOOST_TEST(testR(S("abcde"), 1, 1, 10, '2', S("a2222222222cde")));
6073 BOOST_TEST(testR(S("abcde"), 1, 1, 20, '2', S("a22222222222222222222cde")));
6074 BOOST_TEST(testR(S("abcde"), 1, 2, 0, '2', S("ade")));
6075 BOOST_TEST(testR(S("abcde"), 1, 2, 5, '2', S("a22222de")));
6076 BOOST_TEST(testR(S("abcde"), 1, 2, 10, '2', S("a2222222222de")));
6077 BOOST_TEST(testR(S("abcde"), 1, 2, 20, '2', S("a22222222222222222222de")));
6078 BOOST_TEST(testR(S("abcde"), 1, 3, 0, '2', S("ae")));
6079 BOOST_TEST(testR(S("abcde"), 1, 3, 5, '2', S("a22222e")));
6080 BOOST_TEST(testR(S("abcde"), 1, 3, 10, '2', S("a2222222222e")));
6081 BOOST_TEST(testR(S("abcde"), 1, 3, 20, '2', S("a22222222222222222222e")));
6082 BOOST_TEST(testR(S("abcde"), 1, 4, 0, '2', S("a")));
6083 BOOST_TEST(testR(S("abcde"), 1, 4, 5, '2', S("a22222")));
6084 BOOST_TEST(testR(S("abcde"), 1, 4, 10, '2', S("a2222222222")));
6085 BOOST_TEST(testR(S("abcde"), 1, 4, 20, '2', S("a22222222222222222222")));
6086 BOOST_TEST(testR(S("abcde"), 1, 5, 0, '2', S("a")));
6087 BOOST_TEST(testR(S("abcde"), 1, 5, 5, '2', S("a22222")));
6088 BOOST_TEST(testR(S("abcde"), 1, 5, 10, '2', S("a2222222222")));
6089 BOOST_TEST(testR(S("abcde"), 1, 5, 20, '2', S("a22222222222222222222")));
6090 BOOST_TEST(testR(S("abcde"), 2, 0, 0, '2', S("abcde")));
6091 BOOST_TEST(testR(S("abcde"), 2, 0, 5, '2', S("ab22222cde")));
6092 BOOST_TEST(testR(S("abcde"), 2, 0, 10, '2', S("ab2222222222cde")));
6093 BOOST_TEST(testR(S("abcde"), 2, 0, 20, '2', S("ab22222222222222222222cde")));
6094 BOOST_TEST(testR(S("abcde"), 2, 1, 0, '2', S("abde")));
6095 BOOST_TEST(testR(S("abcde"), 2, 1, 5, '2', S("ab22222de")));
6096 BOOST_TEST(testR(S("abcde"), 2, 1, 10, '2', S("ab2222222222de")));
6097 BOOST_TEST(testR(S("abcde"), 2, 1, 20, '2', S("ab22222222222222222222de")));
6098 BOOST_TEST(testR(S("abcde"), 2, 2, 0, '2', S("abe")));
6099 BOOST_TEST(testR(S("abcde"), 2, 2, 5, '2', S("ab22222e")));
6100 BOOST_TEST(testR(S("abcde"), 2, 2, 10, '2', S("ab2222222222e")));
6101 BOOST_TEST(testR(S("abcde"), 2, 2, 20, '2', S("ab22222222222222222222e")));
6102 BOOST_TEST(testR(S("abcde"), 2, 3, 0, '2', S("ab")));
6103 BOOST_TEST(testR(S("abcde"), 2, 3, 5, '2', S("ab22222")));
6104 BOOST_TEST(testR(S("abcde"), 2, 3, 10, '2', S("ab2222222222")));
6105 BOOST_TEST(testR(S("abcde"), 2, 3, 20, '2', S("ab22222222222222222222")));
6106 BOOST_TEST(testR(S("abcde"), 2, 4, 0, '2', S("ab")));
6107 BOOST_TEST(testR(S("abcde"), 2, 4, 5, '2', S("ab22222")));
6108 BOOST_TEST(testR(S("abcde"), 2, 4, 10, '2', S("ab2222222222")));
6109 BOOST_TEST(testR(S("abcde"), 2, 4, 20, '2', S("ab22222222222222222222")));
6110 BOOST_TEST(testR(S("abcde"), 4, 0, 0, '2', S("abcde")));
6111 BOOST_TEST(testR(S("abcde"), 4, 0, 5, '2', S("abcd22222e")));
6112 BOOST_TEST(testR(S("abcde"), 4, 0, 10, '2', S("abcd2222222222e")));
6113 BOOST_TEST(testR(S("abcde"), 4, 0, 20, '2', S("abcd22222222222222222222e")));
6114 BOOST_TEST(testR(S("abcde"), 4, 1, 0, '2', S("abcd")));
6115 BOOST_TEST(testR(S("abcde"), 4, 1, 5, '2', S("abcd22222")));
6116 BOOST_TEST(testR(S("abcde"), 4, 1, 10, '2', S("abcd2222222222")));
6117 BOOST_TEST(testR(S("abcde"), 4, 1, 20, '2', S("abcd22222222222222222222")));
6118 BOOST_TEST(testR(S("abcde"), 4, 2, 0, '2', S("abcd")));
6119
6120 BOOST_TEST(testR(S("abcde"), 4, 2, 5, '2', S("abcd22222")));
6121 BOOST_TEST(testR(S("abcde"), 4, 2, 10, '2', S("abcd2222222222")));
6122 BOOST_TEST(testR(S("abcde"), 4, 2, 20, '2', S("abcd22222222222222222222")));
6123
6124 BOOST_TEST(testR(S("abcde"), 5, 0, 0, '2', S("abcde")));
6125 BOOST_TEST(testR(S("abcde"), 5, 0, 5, '2', S("abcde22222")));
6126 BOOST_TEST(testR(S("abcde"), 5, 0, 10, '2', S("abcde2222222222")));
6127 BOOST_TEST(testR(S("abcde"), 5, 0, 20, '2', S("abcde22222222222222222222")));
6128
6129 BOOST_TEST(testR(S("abcde"), 5, 1, 0, '2', S("abcde")));
6130 BOOST_TEST(testR(S("abcde"), 5, 1, 5, '2', S("abcde22222")));
6131 BOOST_TEST(testR(S("abcde"), 5, 1, 10, '2', S("abcde2222222222")));
6132 BOOST_TEST(testR(S("abcde"), 5, 1, 20, '2', S("abcde22222222222222222222")));
6133
6134 BOOST_TEST(testR(S("abcde"), 0, 4, "12345", 4, S("1234e")));
6135 BOOST_TEST(testR(S("abcde"), 0, 4, "12345", 5, S("12345e")));
6136 BOOST_TEST(testR(S("abcde"), 0, 4, "1234567890", 0, S("e")));
6137 BOOST_TEST(testR(S("abcde"), 0, 4, "1234567890", 1, S("1e")));
6138 BOOST_TEST(testR(S("abcde"), 0, 4, "1234567890", 5, S("12345e")));
6139 BOOST_TEST(testR(S("abcde"), 0, 4, "1234567890", 9, S("123456789e")));
6140 BOOST_TEST(testR(S("abcde"), 0, 4, "1234567890", 10, S("1234567890e")));
6141 BOOST_TEST(testR(S("abcde"), 0, 4, "12345678901234567890", 0, S("e")));
6142 BOOST_TEST(testR(S("abcde"), 0, 4, "12345678901234567890", 1, S("1e")));
6143 BOOST_TEST(testR(S("abcde"), 0, 4, "12345678901234567890", 10, S("1234567890e")));
6144 BOOST_TEST(testR(S("abcde"), 0, 4, "12345678901234567890", 19, S("1234567890123456789e")));
6145 BOOST_TEST(testR(S("abcde"), 0, 4, "12345678901234567890", 20, S("12345678901234567890e")));
6146 BOOST_TEST(testR(S("abcde"), 0, 5, "", 0, S("")));
6147 BOOST_TEST(testR(S("abcde"), 0, 5, "12345", 0, S("")));
6148 BOOST_TEST(testR(S("abcde"), 0, 5, "12345", 1, S("1")));
6149 BOOST_TEST(testR(S("abcde"), 0, 5, "12345", 2, S("12")));
6150 BOOST_TEST(testR(S("abcde"), 0, 5, "12345", 4, S("1234")));
6151 BOOST_TEST(testR(S("abcde"), 0, 5, "12345", 5, S("12345")));
6152 BOOST_TEST(testR(S("abcde"), 0, 5, "1234567890", 0, S("")));
6153 BOOST_TEST(testR(S("abcde"), 0, 5, "1234567890", 1, S("1")));
6154 BOOST_TEST(testR(S("abcde"), 0, 5, "1234567890", 5, S("12345")));
6155 BOOST_TEST(testR(S("abcde"), 0, 5, "1234567890", 9, S("123456789")));
6156 BOOST_TEST(testR(S("abcde"), 0, 5, "1234567890", 10, S("1234567890")));
6157 BOOST_TEST(testR(S("abcde"), 0, 5, "12345678901234567890", 0, S("")));
6158 BOOST_TEST(testR(S("abcde"), 0, 5, "12345678901234567890", 1, S("1")));
6159 BOOST_TEST(testR(S("abcde"), 0, 5, "12345678901234567890", 10, S("1234567890")));
6160 BOOST_TEST(testR(S("abcde"), 0, 5, "12345678901234567890", 19, S("1234567890123456789")));
6161 BOOST_TEST(testR(S("abcde"), 0, 5, "12345678901234567890", 20, S("12345678901234567890")));
6162 BOOST_TEST(testR(S("abcde"), 0, 6, "", 0, S("")));
6163 BOOST_TEST(testR(S("abcde"), 0, 6, "12345", 0, S("")));
6164 BOOST_TEST(testR(S("abcde"), 0, 6, "12345", 1, S("1")));
6165 BOOST_TEST(testR(S("abcde"), 0, 6, "12345", 2, S("12")));
6166 BOOST_TEST(testR(S("abcde"), 0, 6, "12345", 4, S("1234")));
6167 BOOST_TEST(testR(S("abcde"), 0, 6, "12345", 5, S("12345")));
6168 BOOST_TEST(testR(S("abcde"), 0, 6, "1234567890", 0, S("")));
6169 BOOST_TEST(testR(S("abcde"), 0, 6, "1234567890", 1, S("1")));
6170 BOOST_TEST(testR(S("abcde"), 0, 6, "1234567890", 5, S("12345")));
6171 BOOST_TEST(testR(S("abcde"), 0, 6, "1234567890", 9, S("123456789")));
6172 BOOST_TEST(testR(S("abcde"), 0, 6, "1234567890", 10, S("1234567890")));
6173 BOOST_TEST(testR(S("abcde"), 0, 6, "12345678901234567890", 0, S("")));
6174 BOOST_TEST(testR(S("abcde"), 0, 6, "12345678901234567890", 1, S("1")));
6175 BOOST_TEST(testR(S("abcde"), 0, 6, "12345678901234567890", 10, S("1234567890")));
6176 BOOST_TEST(testR(S("abcde"), 0, 6, "12345678901234567890", 19, S("1234567890123456789")));
6177 BOOST_TEST(testR(S("abcde"), 0, 6, "12345678901234567890", 20, S("12345678901234567890")));
6178 BOOST_TEST(testR(S("abcde"), 1, 0, "", 0, S("abcde")));
6179 BOOST_TEST(testR(S("abcde"), 1, 0, "12345", 0, S("abcde")));
6180 BOOST_TEST(testR(S("abcde"), 1, 0, "12345", 1, S("a1bcde")));
6181 BOOST_TEST(testR(S("abcde"), 1, 0, "12345", 2, S("a12bcde")));
6182 BOOST_TEST(testR(S("abcde"), 1, 0, "12345", 4, S("a1234bcde")));
6183 BOOST_TEST(testR(S("abcde"), 1, 0, "12345", 5, S("a12345bcde")));
6184 BOOST_TEST(testR(S("abcde"), 1, 0, "1234567890", 0, S("abcde")));
6185 BOOST_TEST(testR(S("abcde"), 1, 0, "1234567890", 1, S("a1bcde")));
6186 BOOST_TEST(testR(S("abcde"), 1, 0, "1234567890", 5, S("a12345bcde")));
6187 BOOST_TEST(testR(S("abcde"), 1, 0, "1234567890", 9, S("a123456789bcde")));
6188 BOOST_TEST(testR(S("abcde"), 1, 0, "1234567890", 10, S("a1234567890bcde")));
6189 BOOST_TEST(testR(S("abcde"), 1, 0, "12345678901234567890", 0, S("abcde")));
6190 BOOST_TEST(testR(S("abcde"), 1, 0, "12345678901234567890", 1, S("a1bcde")));
6191 BOOST_TEST(testR(S("abcde"), 1, 0, "12345678901234567890", 10, S("a1234567890bcde")));
6192 BOOST_TEST(testR(S("abcde"), 1, 0, "12345678901234567890", 19, S("a1234567890123456789bcde")));
6193 BOOST_TEST(testR(S("abcde"), 1, 0, "12345678901234567890", 20, S("a12345678901234567890bcde")));
6194 BOOST_TEST(testR(S("abcde"), 1, 1, "", 0, S("acde")));
6195 BOOST_TEST(testR(S("abcde"), 1, 1, "12345", 0, S("acde")));
6196 BOOST_TEST(testR(S("abcde"), 1, 1, "12345", 1, S("a1cde")));
6197 BOOST_TEST(testR(S("abcde"), 1, 1, "12345", 2, S("a12cde")));
6198 BOOST_TEST(testR(S("abcde"), 1, 1, "12345", 4, S("a1234cde")));
6199 BOOST_TEST(testR(S("abcde"), 1, 1, "12345", 5, S("a12345cde")));
6200 BOOST_TEST(testR(S("abcde"), 1, 1, "1234567890", 0, S("acde")));
6201 BOOST_TEST(testR(S("abcde"), 1, 1, "1234567890", 1, S("a1cde")));
6202 BOOST_TEST(testR(S("abcde"), 1, 1, "1234567890", 5, S("a12345cde")));
6203 BOOST_TEST(testR(S("abcde"), 1, 1, "1234567890", 9, S("a123456789cde")));
6204 BOOST_TEST(testR(S("abcde"), 1, 1, "1234567890", 10, S("a1234567890cde")));
6205 BOOST_TEST(testR(S("abcde"), 1, 1, "12345678901234567890", 0, S("acde")));
6206 BOOST_TEST(testR(S("abcde"), 1, 1, "12345678901234567890", 1, S("a1cde")));
6207 BOOST_TEST(testR(S("abcde"), 1, 1, "12345678901234567890", 10, S("a1234567890cde")));
6208 BOOST_TEST(testR(S("abcde"), 1, 1, "12345678901234567890", 19, S("a1234567890123456789cde")));
6209 BOOST_TEST(testR(S("abcde"), 1, 1, "12345678901234567890", 20, S("a12345678901234567890cde")));
6210 BOOST_TEST(testR(S("abcde"), 1, 2, "", 0, S("ade")));
6211 BOOST_TEST(testR(S("abcde"), 1, 2, "12345", 0, S("ade")));
6212 BOOST_TEST(testR(S("abcde"), 1, 2, "12345", 1, S("a1de")));
6213 BOOST_TEST(testR(S("abcde"), 1, 2, "12345", 2, S("a12de")));
6214 BOOST_TEST(testR(S("abcde"), 1, 2, "12345", 4, S("a1234de")));
6215 BOOST_TEST(testR(S("abcde"), 1, 2, "12345", 5, S("a12345de")));
6216 BOOST_TEST(testR(S("abcde"), 1, 2, "1234567890", 0, S("ade")));
6217 BOOST_TEST(testR(S("abcde"), 1, 2, "1234567890", 1, S("a1de")));
6218 BOOST_TEST(testR(S("abcde"), 1, 2, "1234567890", 5, S("a12345de")));
6219 BOOST_TEST(testR(S("abcde"), 1, 2, "1234567890", 9, S("a123456789de")));
6220 BOOST_TEST(testR(S("abcde"), 1, 2, "1234567890", 10, S("a1234567890de")));
6221 BOOST_TEST(testR(S("abcde"), 1, 2, "12345678901234567890", 0, S("ade")));
6222 BOOST_TEST(testR(S("abcde"), 1, 2, "12345678901234567890", 1, S("a1de")));
6223 BOOST_TEST(testR(S("abcde"), 1, 2, "12345678901234567890", 10, S("a1234567890de")));
6224 BOOST_TEST(testR(S("abcde"), 1, 2, "12345678901234567890", 19, S("a1234567890123456789de")));
6225 BOOST_TEST(testR(S("abcde"), 1, 2, "12345678901234567890", 20, S("a12345678901234567890de")));
6226 BOOST_TEST(testR(S("abcde"), 1, 3, "", 0, S("ae")));
6227 BOOST_TEST(testR(S("abcde"), 1, 3, "12345", 0, S("ae")));
6228 BOOST_TEST(testR(S("abcde"), 1, 3, "12345", 1, S("a1e")));
6229 BOOST_TEST(testR(S("abcde"), 1, 3, "12345", 2, S("a12e")));
6230 BOOST_TEST(testR(S("abcde"), 1, 3, "12345", 4, S("a1234e")));
6231 BOOST_TEST(testR(S("abcde"), 1, 3, "12345", 5, S("a12345e")));
6232 BOOST_TEST(testR(S("abcde"), 1, 3, "1234567890", 0, S("ae")));
6233 BOOST_TEST(testR(S("abcde"), 1, 3, "1234567890", 1, S("a1e")));
6234 BOOST_TEST(testR(S("abcdefghij"), 1, 10, "1234567890", 5, S("a12345")));
6235 BOOST_TEST(testR(S("abcdefghij"), 1, 10, "1234567890", 9, S("a123456789")));
6236 BOOST_TEST(testR(S("abcdefghij"), 1, 10, "1234567890", 10, S("a1234567890")));
6237 BOOST_TEST(testR(S("abcdefghij"), 1, 10, "12345678901234567890", 0, S("a")));
6238 BOOST_TEST(testR(S("abcdefghij"), 1, 10, "12345678901234567890", 1, S("a1")));
6239 BOOST_TEST(testR(S("abcdefghij"), 1, 10, "12345678901234567890", 10, S("a1234567890")));
6240 BOOST_TEST(testR(S("abcdefghij"), 1, 10, "12345678901234567890", 19, S("a1234567890123456789")));
6241 BOOST_TEST(testR(S("abcdefghij"), 1, 10, "12345678901234567890", 20, S("a12345678901234567890")));
6242 BOOST_TEST(testR(S("abcdefghij"), 5, 0, "", 0, S("abcdefghij")));
6243 BOOST_TEST(testR(S("abcdefghij"), 5, 0, "12345", 0, S("abcdefghij")));
6244 BOOST_TEST(testR(S("abcdefghij"), 5, 0, "12345", 1, S("abcde1fghij")));
6245 BOOST_TEST(testR(S("abcdefghij"), 5, 0, "12345", 2, S("abcde12fghij")));
6246 BOOST_TEST(testR(S("abcdefghij"), 5, 0, "12345", 4, S("abcde1234fghij")));
6247 BOOST_TEST(testR(S("abcdefghij"), 5, 0, "12345", 5, S("abcde12345fghij")));
6248 BOOST_TEST(testR(S("abcdefghij"), 5, 0, "1234567890", 0, S("abcdefghij")));
6249 BOOST_TEST(testR(S("abcdefghij"), 5, 0, "1234567890", 1, S("abcde1fghij")));
6250 BOOST_TEST(testR(S("abcdefghij"), 5, 0, "1234567890", 5, S("abcde12345fghij")));
6251 BOOST_TEST(testR(S("abcdefghij"), 5, 0, "1234567890", 9, S("abcde123456789fghij")));
6252 BOOST_TEST(testR(S("abcdefghij"), 5, 0, "1234567890", 10, S("abcde1234567890fghij")));
6253 BOOST_TEST(testR(S("abcdefghij"), 5, 0, "12345678901234567890", 0, S("abcdefghij")));
6254 BOOST_TEST(testR(S("abcdefghij"), 5, 0, "12345678901234567890", 1, S("abcde1fghij")));
6255 BOOST_TEST(testR(S("abcdefghij"), 5, 0, "12345678901234567890", 10, S("abcde1234567890fghij")));
6256 BOOST_TEST(testR(S("abcdefghij"), 5, 0, "12345678901234567890", 19, S("abcde1234567890123456789fghij")));
6257 BOOST_TEST(testR(S("abcdefghij"), 5, 0, "12345678901234567890", 20, S("abcde12345678901234567890fghij")));
6258 BOOST_TEST(testR(S("abcdefghij"), 5, 1, "", 0, S("abcdeghij")));
6259 BOOST_TEST(testR(S("abcdefghij"), 5, 1, "12345", 0, S("abcdeghij")));
6260 BOOST_TEST(testR(S("abcdefghij"), 5, 1, "12345", 1, S("abcde1ghij")));
6261 BOOST_TEST(testR(S("abcdefghij"), 5, 1, "12345", 2, S("abcde12ghij")));
6262 BOOST_TEST(testR(S("abcdefghij"), 5, 1, "12345", 4, S("abcde1234ghij")));
6263 BOOST_TEST(testR(S("abcdefghij"), 5, 1, "12345", 5, S("abcde12345ghij")));
6264 BOOST_TEST(testR(S("abcdefghij"), 5, 1, "1234567890", 0, S("abcdeghij")));
6265 BOOST_TEST(testR(S("abcdefghij"), 5, 1, "1234567890", 1, S("abcde1ghij")));
6266 BOOST_TEST(testR(S("abcdefghij"), 5, 1, "1234567890", 5, S("abcde12345ghij")));
6267 BOOST_TEST(testR(S("abcdefghij"), 5, 1, "1234567890", 9, S("abcde123456789ghij")));
6268 BOOST_TEST(testR(S("abcdefghij"), 5, 1, "1234567890", 10, S("abcde1234567890ghij")));
6269 BOOST_TEST(testR(S("abcdefghij"), 5, 1, "12345678901234567890", 0, S("abcdeghij")));
6270 BOOST_TEST(testR(S("abcdefghij"), 5, 1, "12345678901234567890", 1, S("abcde1ghij")));
6271 BOOST_TEST(testR(S("abcdefghij"), 5, 1, "12345678901234567890", 10, S("abcde1234567890ghij")));
6272 BOOST_TEST(testR(S("abcdefghij"), 5, 1, "12345678901234567890", 19, S("abcde1234567890123456789ghij")));
6273 BOOST_TEST(testR(S("abcdefghij"), 5, 1, "12345678901234567890", 20, S("abcde12345678901234567890ghij")));
6274 BOOST_TEST(testR(S("abcdefghij"), 5, 2, "", 0, S("abcdehij")));
6275 BOOST_TEST(testR(S("abcdefghij"), 5, 2, "12345", 0, S("abcdehij")));
6276 BOOST_TEST(testR(S("abcdefghij"), 5, 2, "12345", 1, S("abcde1hij")));
6277 BOOST_TEST(testR(S("abcdefghij"), 5, 2, "12345", 2, S("abcde12hij")));
6278 BOOST_TEST(testR(S("abcdefghij"), 5, 2, "12345", 4, S("abcde1234hij")));
6279 BOOST_TEST(testR(S("abcdefghij"), 5, 2, "12345", 5, S("abcde12345hij")));
6280 BOOST_TEST(testR(S("abcdefghij"), 5, 2, "1234567890", 0, S("abcdehij")));
6281 BOOST_TEST(testR(S("abcdefghij"), 5, 2, "1234567890", 1, S("abcde1hij")));
6282 BOOST_TEST(testR(S("abcdefghij"), 5, 2, "1234567890", 5, S("abcde12345hij")));
6283 BOOST_TEST(testR(S("abcdefghij"), 5, 2, "1234567890", 9, S("abcde123456789hij")));
6284 BOOST_TEST(testR(S("abcdefghij"), 5, 2, "1234567890", 10, S("abcde1234567890hij")));
6285 BOOST_TEST(testR(S("abcdefghij"), 5, 2, "12345678901234567890", 0, S("abcdehij")));
6286 BOOST_TEST(testR(S("abcdefghij"), 5, 2, "12345678901234567890", 1, S("abcde1hij")));
6287 BOOST_TEST(testR(S("abcdefghij"), 5, 2, "12345678901234567890", 10, S("abcde1234567890hij")));
6288 BOOST_TEST(testR(S("abcdefghij"), 5, 2, "12345678901234567890", 19, S("abcde1234567890123456789hij")));
6289 BOOST_TEST(testR(S("abcdefghij"), 5, 2, "12345678901234567890", 20, S("abcde12345678901234567890hij")));
6290 BOOST_TEST(testR(S("abcdefghij"), 5, 4, "", 0, S("abcdej")));
6291 BOOST_TEST(testR(S("abcdefghij"), 5, 4, "12345", 0, S("abcdej")));
6292 BOOST_TEST(testR(S("abcdefghij"), 5, 4, "12345", 1, S("abcde1j")));
6293 BOOST_TEST(testR(S("abcdefghij"), 5, 4, "12345", 2, S("abcde12j")));
6294 BOOST_TEST(testR(S("abcdefghij"), 5, 4, "12345", 4, S("abcde1234j")));
6295 BOOST_TEST(testR(S("abcdefghij"), 5, 4, "12345", 5, S("abcde12345j")));
6296 BOOST_TEST(testR(S("abcdefghij"), 5, 4, "1234567890", 0, S("abcdej")));
6297 BOOST_TEST(testR(S("abcdefghij"), 5, 4, "1234567890", 1, S("abcde1j")));
6298 BOOST_TEST(testR(S("abcdefghij"), 5, 4, "1234567890", 5, S("abcde12345j")));
6299 BOOST_TEST(testR(S("abcdefghij"), 5, 4, "1234567890", 9, S("abcde123456789j")));
6300 BOOST_TEST(testR(S("abcdefghij"), 5, 4, "1234567890", 10, S("abcde1234567890j")));
6301 BOOST_TEST(testR(S("abcdefghij"), 5, 4, "12345678901234567890", 0, S("abcdej")));
6302 BOOST_TEST(testR(S("abcdefghij"), 5, 4, "12345678901234567890", 1, S("abcde1j")));
6303 BOOST_TEST(testR(S("abcdefghij"), 5, 4, "12345678901234567890", 10, S("abcde1234567890j")));
6304 BOOST_TEST(testR(S("abcdefghij"), 5, 4, "12345678901234567890", 19, S("abcde1234567890123456789j")));
6305 BOOST_TEST(testR(S("abcdefghij"), 5, 4, "12345678901234567890", 20, S("abcde12345678901234567890j")));
6306 BOOST_TEST(testR(S("abcdefghij"), 5, 5, "", 0, S("abcde")));
6307 BOOST_TEST(testR(S("abcdefghij"), 5, 5, "12345", 0, S("abcde")));
6308 BOOST_TEST(testR(S("abcdefghij"), 5, 5, "12345", 1, S("abcde1")));
6309 BOOST_TEST(testR(S("abcdefghij"), 5, 5, "12345", 2, S("abcde12")));
6310 BOOST_TEST(testR(S("abcdefghij"), 5, 5, "12345", 4, S("abcde1234")));
6311 BOOST_TEST(testR(S("abcdefghij"), 5, 5, "12345", 5, S("abcde12345")));
6312 BOOST_TEST(testR(S("abcdefghij"), 5, 5, "1234567890", 0, S("abcde")));
6313 BOOST_TEST(testR(S("abcdefghij"), 5, 5, "1234567890", 1, S("abcde1")));
6314 BOOST_TEST(testR(S("abcdefghij"), 5, 5, "1234567890", 5, S("abcde12345")));
6315 BOOST_TEST(testR(S("abcdefghij"), 5, 5, "1234567890", 9, S("abcde123456789")));
6316 BOOST_TEST(testR(S("abcdefghij"), 5, 5, "1234567890", 10, S("abcde1234567890")));
6317 BOOST_TEST(testR(S("abcdefghij"), 5, 5, "12345678901234567890", 0, S("abcde")));
6318 BOOST_TEST(testR(S("abcdefghij"), 5, 5, "12345678901234567890", 1, S("abcde1")));
6319 BOOST_TEST(testR(S("abcdefghij"), 5, 5, "12345678901234567890", 10, S("abcde1234567890")));
6320 BOOST_TEST(testR(S("abcdefghij"), 5, 5, "12345678901234567890", 19, S("abcde1234567890123456789")));
6321 BOOST_TEST(testR(S("abcdefghij"), 5, 5, "12345678901234567890", 20, S("abcde12345678901234567890")));
6322 BOOST_TEST(testR(S("abcdefghij"), 5, 6, "", 0, S("abcde")));
6323 BOOST_TEST(testR(S("abcdefghij"), 5, 6, "12345", 0, S("abcde")));
6324 BOOST_TEST(testR(S("abcdefghij"), 5, 6, "12345", 1, S("abcde1")));
6325 BOOST_TEST(testR(S("abcdefghij"), 5, 6, "12345", 2, S("abcde12")));
6326 BOOST_TEST(testR(S("abcdefghij"), 5, 6, "12345", 4, S("abcde1234")));
6327 BOOST_TEST(testR(S("abcdefghij"), 5, 6, "12345", 5, S("abcde12345")));
6328 BOOST_TEST(testR(S("abcdefghij"), 5, 6, "1234567890", 0, S("abcde")));
6329 BOOST_TEST(testR(S("abcdefghij"), 5, 6, "1234567890", 1, S("abcde1")));
6330 BOOST_TEST(testR(S("abcdefghij"), 5, 6, "1234567890", 5, S("abcde12345")));
6331 BOOST_TEST(testR(S("abcdefghij"), 5, 6, "1234567890", 9, S("abcde123456789")));
6332 BOOST_TEST(testR(S("abcdefghij"), 5, 6, "1234567890", 10, S("abcde1234567890")));
6333 BOOST_TEST(testR(S("abcdefghij"), 5, 6, "12345678901234567890", 0, S("abcde")));
6334 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 0, "", 0, S("abcdefghijklmnopqrst")));
6335 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 0, "12345", 0, S("abcdefghijklmnopqrst")));
6336 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 0, "12345", 1, S("1abcdefghijklmnopqrst")));
6337 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 0, "12345", 2, S("12abcdefghijklmnopqrst")));
6338 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 0, "12345", 4, S("1234abcdefghijklmnopqrst")));
6339 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 0, "12345", 5, S("12345abcdefghijklmnopqrst")));
6340 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 0, "1234567890", 0, S("abcdefghijklmnopqrst")));
6341 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 0, "1234567890", 1, S("1abcdefghijklmnopqrst")));
6342 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 0, "1234567890", 5, S("12345abcdefghijklmnopqrst")));
6343 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 0, "1234567890", 9, S("123456789abcdefghijklmnopqrst")));
6344 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 0, "1234567890", 10, S("1234567890abcdefghijklmnopqrst")));
6345 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 0, "12345678901234567890", 0, S("abcdefghijklmnopqrst")));
6346 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 0, "12345678901234567890", 1, S("1abcdefghijklmnopqrst")));
6347 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 0, "12345678901234567890", 10, S("1234567890abcdefghijklmnopqrst")));
6348 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 0, "12345678901234567890", 19, S("1234567890123456789abcdefghijklmnopqrst")));
6349 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 0, "12345678901234567890", 20, S("12345678901234567890abcdefghijklmnopqrst")));
6350 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 1, "", 0, S("bcdefghijklmnopqrst")));
6351 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 1, "12345", 0, S("bcdefghijklmnopqrst")));
6352 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 1, "12345", 1, S("1bcdefghijklmnopqrst")));
6353 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 1, "12345", 2, S("12bcdefghijklmnopqrst")));
6354 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 1, "12345", 4, S("1234bcdefghijklmnopqrst")));
6355 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 1, "12345", 5, S("12345bcdefghijklmnopqrst")));
6356 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 1, "1234567890", 0, S("bcdefghijklmnopqrst")));
6357 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 1, "1234567890", 1, S("1bcdefghijklmnopqrst")));
6358 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 1, "1234567890", 5, S("12345bcdefghijklmnopqrst")));
6359 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 1, "1234567890", 9, S("123456789bcdefghijklmnopqrst")));
6360 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 1, "1234567890", 10, S("1234567890bcdefghijklmnopqrst")));
6361 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 1, "12345678901234567890", 0, S("bcdefghijklmnopqrst")));
6362 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 1, "12345678901234567890", 1, S("1bcdefghijklmnopqrst")));
6363 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 1, "12345678901234567890", 10, S("1234567890bcdefghijklmnopqrst")));
6364 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 1, "12345678901234567890", 19, S("1234567890123456789bcdefghijklmnopqrst")));
6365 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 1, "12345678901234567890", 20, S("12345678901234567890bcdefghijklmnopqrst")));
6366 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 10, "", 0, S("klmnopqrst")));
6367 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 10, "12345", 0, S("klmnopqrst")));
6368 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 10, "12345", 1, S("1klmnopqrst")));
6369 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 10, "12345", 2, S("12klmnopqrst")));
6370 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 10, "12345", 4, S("1234klmnopqrst")));
6371 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 10, "12345", 5, S("12345klmnopqrst")));
6372 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 10, "1234567890", 0, S("klmnopqrst")));
6373 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 10, "1234567890", 1, S("1klmnopqrst")));
6374 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 10, "1234567890", 5, S("12345klmnopqrst")));
6375 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 10, "1234567890", 9, S("123456789klmnopqrst")));
6376 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 10, "1234567890", 10, S("1234567890klmnopqrst")));
6377 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 10, "12345678901234567890", 0, S("klmnopqrst")));
6378 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 10, "12345678901234567890", 1, S("1klmnopqrst")));
6379 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 10, "12345678901234567890", 10, S("1234567890klmnopqrst")));
6380 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 10, "12345678901234567890", 19, S("1234567890123456789klmnopqrst")));
6381 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 10, "12345678901234567890", 20, S("12345678901234567890klmnopqrst")));
6382 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 19, "", 0, S("t")));
6383 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 19, "12345", 0, S("t")));
6384 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 19, "12345", 1, S("1t")));
6385 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 19, "12345", 2, S("12t")));
6386 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 19, "12345", 4, S("1234t")));
6387 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 19, "12345", 5, S("12345t")));
6388 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 19, "1234567890", 0, S("t")));
6389 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 19, "1234567890", 1, S("1t")));
6390 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 19, "1234567890", 5, S("12345t")));
6391 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 19, "1234567890", 9, S("123456789t")));
6392 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 19, "1234567890", 10, S("1234567890t")));
6393 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 19, "12345678901234567890", 0, S("t")));
6394 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 19, "12345678901234567890", 1, S("1t")));
6395 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 19, "12345678901234567890", 10, S("1234567890t")));
6396 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 19, "12345678901234567890", 19, S("1234567890123456789t")));
6397 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 19, "12345678901234567890", 20, S("12345678901234567890t")));
6398 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 20, "", 0, S("")));
6399 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 20, "12345", 0, S("")));
6400 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 20, "12345", 1, S("1")));
6401 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 20, "12345", 2, S("12")));
6402 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 20, "12345", 4, S("1234")));
6403 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 20, "12345", 5, S("12345")));
6404 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 20, "1234567890", 0, S("")));
6405 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 20, "1234567890", 1, S("1")));
6406 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 20, "1234567890", 5, S("12345")));
6407 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 20, "1234567890", 9, S("123456789")));
6408 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 20, "1234567890", 10, S("1234567890")));
6409 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 20, "12345678901234567890", 0, S("")));
6410 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 20, "12345678901234567890", 1, S("1")));
6411 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 20, "12345678901234567890", 10, S("1234567890")));
6412 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 20, "12345678901234567890", 19, S("1234567890123456789")));
6413 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 20, "12345678901234567890", 20, S("12345678901234567890")));
6414 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 21, "", 0, S("")));
6415 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 21, "12345", 0, S("")));
6416 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 21, "12345", 1, S("1")));
6417 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 21, "12345", 2, S("12")));
6418 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 21, "12345", 4, S("1234")));
6419 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 21, "12345", 5, S("12345")));
6420 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 21, "1234567890", 0, S("")));
6421 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 21, "1234567890", 1, S("1")));
6422 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 21, "1234567890", 5, S("12345")));
6423 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 21, "1234567890", 9, S("123456789")));
6424 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 21, "1234567890", 10, S("1234567890")));
6425 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 21, "12345678901234567890", 0, S("")));
6426 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 21, "12345678901234567890", 1, S("1")));
6427 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 21, "12345678901234567890", 10, S("1234567890")));
6428 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 21, "12345678901234567890", 19, S("1234567890123456789")));
6429 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 21, "12345678901234567890", 20, S("12345678901234567890")));
6430 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 0, "", 0, S("abcdefghijklmnopqrst")));
6431 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 0, "12345", 0, S("abcdefghijklmnopqrst")));
6432 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 0, "12345", 1, S("a1bcdefghijklmnopqrst")));
6433 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 0, "12345", 2, S("a12bcdefghijklmnopqrst")));
6434 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 0, "12345", 4, S("a1234bcdefghijklmnopqrst")));
6435 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 0, "12345", 5, S("a12345bcdefghijklmnopqrst")));
6436 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 0, "1234567890", 0, S("abcdefghijklmnopqrst")));
6437 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 0, "1234567890", 1, S("a1bcdefghijklmnopqrst")));
6438 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 0, "1234567890", 5, S("a12345bcdefghijklmnopqrst")));
6439 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 0, "1234567890", 9, S("a123456789bcdefghijklmnopqrst")));
6440 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 0, "1234567890", 10, S("a1234567890bcdefghijklmnopqrst")));
6441 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 0, "12345678901234567890", 0, S("abcdefghijklmnopqrst")));
6442 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 0, "12345678901234567890", 1, S("a1bcdefghijklmnopqrst")));
6443 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 0, "12345678901234567890", 10, S("a1234567890bcdefghijklmnopqrst")));
6444 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 0, "12345678901234567890", 19, S("a1234567890123456789bcdefghijklmnopqrst")));
6445 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 0, "12345678901234567890", 20, S("a12345678901234567890bcdefghijklmnopqrst")));
6446 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 1, "", 0, S("acdefghijklmnopqrst")));
6447 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 1, "12345", 0, S("acdefghijklmnopqrst")));
6448 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 1, "12345", 1, S("a1cdefghijklmnopqrst")));
6449 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 1, "12345", 2, S("a12cdefghijklmnopqrst")));
6450 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 1, "12345", 4, S("a1234cdefghijklmnopqrst")));
6451 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 1, "12345", 5, S("a12345cdefghijklmnopqrst")));
6452 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 1, "1234567890", 0, S("acdefghijklmnopqrst")));
6453 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 1, "1234567890", 1, S("a1cdefghijklmnopqrst")));
6454 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 1, "1234567890", 5, S("a12345cdefghijklmnopqrst")));
6455 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 1, "1234567890", 9, S("a123456789cdefghijklmnopqrst")));
6456 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 1, "1234567890", 10, S("a1234567890cdefghijklmnopqrst")));
6457 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 1, "12345678901234567890", 0, S("acdefghijklmnopqrst")));
6458 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 1, "12345678901234567890", 1, S("a1cdefghijklmnopqrst")));
6459 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 1, "12345678901234567890", 10, S("a1234567890cdefghijklmnopqrst")));
6460 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 1, "12345678901234567890", 19, S("a1234567890123456789cdefghijklmnopqrst")));
6461 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 1, "12345678901234567890", 20, S("a12345678901234567890cdefghijklmnopqrst")));
6462 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 9, "", 0, S("aklmnopqrst")));
6463 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 9, "12345", 0, S("aklmnopqrst")));
6464 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 9, "12345", 1, S("a1klmnopqrst")));
6465 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 9, "12345", 2, S("a12klmnopqrst")));
6466 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 9, "12345", 4, S("a1234klmnopqrst")));
6467 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 9, "12345", 5, S("a12345klmnopqrst")));
6468 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 9, "1234567890", 0, S("aklmnopqrst")));
6469 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 9, "1234567890", 1, S("a1klmnopqrst")));
6470 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 9, "1234567890", 5, S("a12345klmnopqrst")));
6471 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 9, "1234567890", 9, S("a123456789klmnopqrst")));
6472 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 9, "1234567890", 10, S("a1234567890klmnopqrst")));
6473 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 9, "12345678901234567890", 0, S("aklmnopqrst")));
6474 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 9, "12345678901234567890", 1, S("a1klmnopqrst")));
6475 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 9, "12345678901234567890", 10, S("a1234567890klmnopqrst")));
6476 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 9, "12345678901234567890", 19, S("a1234567890123456789klmnopqrst")));
6477 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 9, "12345678901234567890", 20, S("a12345678901234567890klmnopqrst")));
6478 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 18, "", 0, S("at")));
6479 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 18, "12345", 0, S("at")));
6480 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 18, "12345", 1, S("a1t")));
6481 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 18, "12345", 2, S("a12t")));
6482 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 18, "12345", 4, S("a1234t")));
6483 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 18, "12345", 5, S("a12345t")));
6484 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 18, "1234567890", 0, S("at")));
6485 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 18, "1234567890", 1, S("a1t")));
6486 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 18, "1234567890", 5, S("a12345t")));
6487 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 18, "1234567890", 9, S("a123456789t")));
6488 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 18, "1234567890", 10, S("a1234567890t")));
6489 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 18, "12345678901234567890", 0, S("at")));
6490 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 18, "12345678901234567890", 1, S("a1t")));
6491 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 18, "12345678901234567890", 10, S("a1234567890t")));
6492 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 18, "12345678901234567890", 19, S("a1234567890123456789t")));
6493 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 18, "12345678901234567890", 20, S("a12345678901234567890t")));
6494 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 19, "", 0, S("a")));
6495 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 19, "12345", 0, S("a")));
6496 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 19, "12345", 1, S("a1")));
6497 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 19, "12345", 2, S("a12")));
6498 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 19, "12345", 4, S("a1234")));
6499 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 19, "12345", 5, S("a12345")));
6500 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 19, "1234567890", 0, S("a")));
6501 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 19, "1234567890", 1, S("a1")));
6502 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 19, "1234567890", 5, S("a12345")));
6503 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 19, "1234567890", 9, S("a123456789")));
6504 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 19, "1234567890", 10, S("a1234567890")));
6505 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 19, "12345678901234567890", 0, S("a")));
6506 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 19, "12345678901234567890", 1, S("a1")));
6507 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 19, "12345678901234567890", 10, S("a1234567890")));
6508 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 19, "12345678901234567890", 19, S("a1234567890123456789")));
6509 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 19, "12345678901234567890", 20, S("a12345678901234567890")));
6510 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 20, "", 0, S("a")));
6511 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 20, "12345", 0, S("a")));
6512 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 20, "12345", 1, S("a1")));
6513 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 20, "12345", 2, S("a12")));
6514 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 20, "12345", 4, S("a1234")));
6515 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 20, "12345", 5, S("a12345")));
6516 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 20, "1234567890", 0, S("a")));
6517 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 20, "1234567890", 1, S("a1")));
6518 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 20, "1234567890", 5, S("a12345")));
6519 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 20, "1234567890", 9, S("a123456789")));
6520 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 20, "1234567890", 10, S("a1234567890")));
6521 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 20, "12345678901234567890", 0, S("a")));
6522 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 20, "12345678901234567890", 1, S("a1")));
6523 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 20, "12345678901234567890", 10, S("a1234567890")));
6524 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 20, "12345678901234567890", 19, S("a1234567890123456789")));
6525 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 20, "12345678901234567890", 20, S("a12345678901234567890")));
6526 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 0, "", 0, S("abcdefghijklmnopqrst")));
6527 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 0, "12345", 0, S("abcdefghijklmnopqrst")));
6528 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 0, "12345", 1, S("abcdefghij1klmnopqrst")));
6529 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 0, "12345", 2, S("abcdefghij12klmnopqrst")));
6530 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 0, "12345", 4, S("abcdefghij1234klmnopqrst")));
6531 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 0, "12345", 5, S("abcdefghij12345klmnopqrst")));
6532 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 0, "1234567890", 0, S("abcdefghijklmnopqrst")));
6533 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 0, "1234567890", 1, S("abcdefghij1klmnopqrst")));
6534 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 0, "1234567890", 5, S("abcdefghij12345klmnopqrst")));
6535 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 0, "1234567890", 9, S("abcdefghij123456789klmnopqrst")));
6536 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 0, "1234567890", 10, S("abcdefghij1234567890klmnopqrst")));
6537 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 0, "12345678901234567890", 0, S("abcdefghijklmnopqrst")));
6538 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 0, "12345678901234567890", 1, S("abcdefghij1klmnopqrst")));
6539 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 0, "12345678901234567890", 10, S("abcdefghij1234567890klmnopqrst")));
6540 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 0, "12345678901234567890", 19, S("abcdefghij1234567890123456789klmnopqrst")));
6541 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 0, "12345678901234567890", 20, S("abcdefghij12345678901234567890klmnopqrst")));
6542 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 1, "", 0, S("abcdefghijlmnopqrst")));
6543 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 1, "12345", 0, S("abcdefghijlmnopqrst")));
6544 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 1, "12345", 1, S("abcdefghij1lmnopqrst")));
6545 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 1, "12345", 2, S("abcdefghij12lmnopqrst")));
6546 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 1, "12345", 4, S("abcdefghij1234lmnopqrst")));
6547 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 1, "12345", 5, S("abcdefghij12345lmnopqrst")));
6548 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 1, "1234567890", 0, S("abcdefghijlmnopqrst")));
6549 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 1, "1234567890", 1, S("abcdefghij1lmnopqrst")));
6550 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 1, "1234567890", 5, S("abcdefghij12345lmnopqrst")));
6551 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 1, "1234567890", 9, S("abcdefghij123456789lmnopqrst")));
6552 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 1, "1234567890", 10, S("abcdefghij1234567890lmnopqrst")));
6553 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 1, "12345678901234567890", 0, S("abcdefghijlmnopqrst")));
6554 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 1, "12345678901234567890", 1, S("abcdefghij1lmnopqrst")));
6555 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 1, "12345678901234567890", 10, S("abcdefghij1234567890lmnopqrst")));
6556 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 1, "12345678901234567890", 19, S("abcdefghij1234567890123456789lmnopqrst")));
6557 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 1, "12345678901234567890", 20, S("abcdefghij12345678901234567890lmnopqrst")));
6558 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 5, "", 0, S("abcdefghijpqrst")));
6559 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 5, "12345", 0, S("abcdefghijpqrst")));
6560 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 5, "12345", 1, S("abcdefghij1pqrst")));
6561 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 5, "12345", 2, S("abcdefghij12pqrst")));
6562 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 5, "12345", 4, S("abcdefghij1234pqrst")));
6563 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 5, "12345", 5, S("abcdefghij12345pqrst")));
6564 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 5, "1234567890", 0, S("abcdefghijpqrst")));
6565 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 5, "1234567890", 1, S("abcdefghij1pqrst")));
6566 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 5, "1234567890", 5, S("abcdefghij12345pqrst")));
6567 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 5, "1234567890", 9, S("abcdefghij123456789pqrst")));
6568 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 5, "1234567890", 10, S("abcdefghij1234567890pqrst")));
6569 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 5, "12345678901234567890", 0, S("abcdefghijpqrst")));
6570 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 5, "12345678901234567890", 1, S("abcdefghij1pqrst")));
6571 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 5, "12345678901234567890", 10, S("abcdefghij1234567890pqrst")));
6572 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 5, "12345678901234567890", 19, S("abcdefghij1234567890123456789pqrst")));
6573 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 5, "12345678901234567890", 20, S("abcdefghij12345678901234567890pqrst")));
6574 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 9, "", 0, S("abcdefghijt")));
6575 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 9, "12345", 0, S("abcdefghijt")));
6576 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 9, "12345", 1, S("abcdefghij1t")));
6577 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 9, "12345", 2, S("abcdefghij12t")));
6578 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 9, "12345", 4, S("abcdefghij1234t")));
6579 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 9, "12345", 5, S("abcdefghij12345t")));
6580 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 9, "1234567890", 0, S("abcdefghijt")));
6581 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 9, "1234567890", 1, S("abcdefghij1t")));
6582 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 9, "1234567890", 5, S("abcdefghij12345t")));
6583 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 9, "1234567890", 9, S("abcdefghij123456789t")));
6584 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 9, "1234567890", 10, S("abcdefghij1234567890t")));
6585 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 9, "12345678901234567890", 0, S("abcdefghijt")));
6586 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 9, "12345678901234567890", 1, S("abcdefghij1t")));
6587 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 9, "12345678901234567890", 10, S("abcdefghij1234567890t")));
6588 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 9, "12345678901234567890", 19, S("abcdefghij1234567890123456789t")));
6589 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 9, "12345678901234567890", 20, S("abcdefghij12345678901234567890t")));
6590 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 10, "", 0, S("abcdefghij")));
6591 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 10, "12345", 0, S("abcdefghij")));
6592 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 10, "12345", 1, S("abcdefghij1")));
6593 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 10, "12345", 2, S("abcdefghij12")));
6594 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 10, "12345", 4, S("abcdefghij1234")));
6595 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 10, "12345", 5, S("abcdefghij12345")));
6596 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 10, "1234567890", 0, S("abcdefghij")));
6597 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 10, "1234567890", 1, S("abcdefghij1")));
6598 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 10, "1234567890", 5, S("abcdefghij12345")));
6599 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 10, "1234567890", 9, S("abcdefghij123456789")));
6600 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 10, "1234567890", 10, S("abcdefghij1234567890")));
6601 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 10, "12345678901234567890", 0, S("abcdefghij")));
6602 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 10, "12345678901234567890", 1, S("abcdefghij1")));
6603 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 10, "12345678901234567890", 10, S("abcdefghij1234567890")));
6604 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 10, "12345678901234567890", 19, S("abcdefghij1234567890123456789")));
6605 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 10, "12345678901234567890", 20, S("abcdefghij12345678901234567890")));
6606 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 11, "", 0, S("abcdefghij")));
6607 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 11, "12345", 0, S("abcdefghij")));
6608 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 11, "12345", 1, S("abcdefghij1")));
6609 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 11, "12345", 2, S("abcdefghij12")));
6610 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 11, "12345", 4, S("abcdefghij1234")));
6611 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 11, "12345", 5, S("abcdefghij12345")));
6612 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 11, "1234567890", 0, S("abcdefghij")));
6613 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 11, "1234567890", 1, S("abcdefghij1")));
6614 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 11, "1234567890", 5, S("abcdefghij12345")));
6615 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 11, "1234567890", 9, S("abcdefghij123456789")));
6616 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 11, "1234567890", 10, S("abcdefghij1234567890")));
6617 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 11, "12345678901234567890", 0, S("abcdefghij")));
6618 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 11, "12345678901234567890", 1, S("abcdefghij1")));
6619 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 11, "12345678901234567890", 10, S("abcdefghij1234567890")));
6620 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 11, "12345678901234567890", 19, S("abcdefghij1234567890123456789")));
6621 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 11, "12345678901234567890", 20, S("abcdefghij12345678901234567890")));
6622 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 0, "", 0, S("abcdefghijklmnopqrst")));
6623 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 0, "12345", 0, S("abcdefghijklmnopqrst")));
6624 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 0, "12345", 1, S("abcdefghijklmnopqrs1t")));
6625 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 0, "12345", 2, S("abcdefghijklmnopqrs12t")));
6626 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 0, "12345", 4, S("abcdefghijklmnopqrs1234t")));
6627 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 0, "12345", 5, S("abcdefghijklmnopqrs12345t")));
6628 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 0, "1234567890", 0, S("abcdefghijklmnopqrst")));
6629 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 0, "1234567890", 1, S("abcdefghijklmnopqrs1t")));
6630 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 0, "1234567890", 5, S("abcdefghijklmnopqrs12345t")));
6631 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 0, "1234567890", 9, S("abcdefghijklmnopqrs123456789t")));
6632 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 0, "1234567890", 10, S("abcdefghijklmnopqrs1234567890t")));
6633 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 0, "12345678901234567890", 0, S("abcdefghijklmnopqrst")));
6634 BOOST_TEST(testR(S(""), 1, 0, "12345", 0, S("can't happen")));
6635 BOOST_TEST(testR(S(""), 1, 0, "12345", 1, S("can't happen")));
6636 BOOST_TEST(testR(S(""), 1, 0, "12345", 2, S("can't happen")));
6637 BOOST_TEST(testR(S(""), 1, 0, "12345", 4, S("can't happen")));
6638 BOOST_TEST(testR(S(""), 1, 0, "12345", 5, S("can't happen")));
6639 BOOST_TEST(testR(S(""), 1, 0, "1234567890", 0, S("can't happen")));
6640 BOOST_TEST(testR(S(""), 1, 0, "1234567890", 1, S("can't happen")));
6641 BOOST_TEST(testR(S(""), 1, 0, "1234567890", 5, S("can't happen")));
6642 BOOST_TEST(testR(S(""), 1, 0, "1234567890", 9, S("can't happen")));
6643 BOOST_TEST(testR(S(""), 1, 0, "1234567890", 10, S("can't happen")));
6644 BOOST_TEST(testR(S(""), 1, 0, "12345678901234567890", 0, S("can't happen")));
6645 BOOST_TEST(testR(S(""), 1, 0, "12345678901234567890", 1, S("can't happen")));
6646 BOOST_TEST(testR(S(""), 1, 0, "12345678901234567890", 10, S("can't happen")));
6647 BOOST_TEST(testR(S(""), 1, 0, "12345678901234567890", 19, S("can't happen")));
6648 BOOST_TEST(testR(S(""), 1, 0, "12345678901234567890", 20, S("can't happen")));
6649 BOOST_TEST(testR(S("abcde"), 6, 0, "", 0, S("can't happen")));
6650 BOOST_TEST(testR(S("abcde"), 6, 0, "12345", 0, S("can't happen")));
6651 BOOST_TEST(testR(S("abcde"), 6, 0, "12345", 1, S("can't happen")));
6652 BOOST_TEST(testR(S("abcde"), 6, 0, "12345", 2, S("can't happen")));
6653 BOOST_TEST(testR(S("abcde"), 6, 0, "12345", 4, S("can't happen")));
6654 BOOST_TEST(testR(S("abcde"), 6, 0, "12345", 5, S("can't happen")));
6655 BOOST_TEST(testR(S("abcde"), 6, 0, "1234567890", 0, S("can't happen")));
6656 BOOST_TEST(testR(S("abcde"), 6, 0, "1234567890", 1, S("can't happen")));
6657 BOOST_TEST(testR(S("abcde"), 6, 0, "1234567890", 5, S("can't happen")));
6658 BOOST_TEST(testR(S("abcde"), 6, 0, "1234567890", 9, S("can't happen")));
6659 BOOST_TEST(testR(S("abcde"), 6, 0, "1234567890", 10, S("can't happen")));
6660 BOOST_TEST(testR(S("abcde"), 6, 0, "12345678901234567890", 0, S("can't happen")));
6661 BOOST_TEST(testR(S("abcde"), 6, 0, "12345678901234567890", 1, S("can't happen")));
6662 BOOST_TEST(testR(S("abcde"), 6, 0, "12345678901234567890", 10, S("can't happen")));
6663 BOOST_TEST(testR(S("abcde"), 6, 0, "12345678901234567890", 19, S("can't happen")));
6664 BOOST_TEST(testR(S("abcde"), 6, 0, "12345678901234567890", 20, S("can't happen")));
6665 BOOST_TEST(testR(S("abcdefghij"), 11, 0, "", 0, S("can't happen")));
6666 BOOST_TEST(testR(S("abcdefghij"), 11, 0, "12345", 0, S("can't happen")));
6667 BOOST_TEST(testR(S("abcdefghij"), 11, 0, "12345", 1, S("can't happen")));
6668 BOOST_TEST(testR(S("abcdefghij"), 11, 0, "12345", 2, S("can't happen")));
6669 BOOST_TEST(testR(S("abcdefghij"), 11, 0, "12345", 4, S("can't happen")));
6670 BOOST_TEST(testR(S("abcdefghij"), 11, 0, "12345", 5, S("can't happen")));
6671 BOOST_TEST(testR(S("abcdefghij"), 11, 0, "1234567890", 0, S("can't happen")));
6672 BOOST_TEST(testR(S("abcdefghij"), 11, 0, "1234567890", 1, S("can't happen")));
6673 BOOST_TEST(testR(S("abcdefghij"), 11, 0, "1234567890", 5, S("can't happen")));
6674 BOOST_TEST(testR(S("abcdefghij"), 11, 0, "1234567890", 9, S("can't happen")));
6675 BOOST_TEST(testR(S("abcdefghij"), 11, 0, "1234567890", 10, S("can't happen")));
6676 BOOST_TEST(testR(S("abcdefghij"), 11, 0, "12345678901234567890", 0, S("can't happen")));
6677 BOOST_TEST(testR(S("abcdefghij"), 11, 0, "12345678901234567890", 1, S("can't happen")));
6678 BOOST_TEST(testR(S("abcdefghij"), 11, 0, "12345678901234567890", 10, S("can't happen")));
6679 BOOST_TEST(testR(S("abcdefghij"), 11, 0, "12345678901234567890", 19, S("can't happen")));
6680 BOOST_TEST(testR(S("abcdefghij"), 11, 0, "12345678901234567890", 20, S("can't happen")));
6681 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 21, 0, "", 0, S("can't happen")));
6682 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 21, 0, "12345", 0, S("can't happen")));
6683 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 21, 0, "12345", 1, S("can't happen")));
6684 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 21, 0, "12345", 2, S("can't happen")));
6685 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 21, 0, "12345", 4, S("can't happen")));
6686 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 21, 0, "12345", 5, S("can't happen")));
6687 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 21, 0, "1234567890", 0, S("can't happen")));
6688 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 21, 0, "1234567890", 1, S("can't happen")));
6689 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 21, 0, "1234567890", 5, S("can't happen")));
6690 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 21, 0, "1234567890", 9, S("can't happen")));
6691 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 21, 0, "1234567890", 10, S("can't happen")));
6692 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 21, 0, "12345678901234567890", 0, S("can't happen")));
6693 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 21, 0, "12345678901234567890", 1, S("can't happen")));
6694 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 21, 0, "12345678901234567890", 10, S("can't happen")));
6695 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 21, 0, "12345678901234567890", 19, S("can't happen")));
6696 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 21, 0, "12345678901234567890", 20, S("can't happen")));
6697 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 0, "12345678901234567890", 1, S("abcdefghijklmnopqrs1t")));
6698 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 0, "12345678901234567890", 10, S("abcdefghijklmnopqrs1234567890t")));
6699 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 0, "12345678901234567890", 19, S("abcdefghijklmnopqrs1234567890123456789t")));
6700 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 0, "12345678901234567890", 20, S("abcdefghijklmnopqrs12345678901234567890t")));
6701 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 1, "", 0, S("abcdefghijklmnopqrs")));
6702 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 1, "12345", 0, S("abcdefghijklmnopqrs")));
6703 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 1, "12345", 1, S("abcdefghijklmnopqrs1")));
6704 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 1, "12345", 2, S("abcdefghijklmnopqrs12")));
6705 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 1, "12345", 4, S("abcdefghijklmnopqrs1234")));
6706 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 1, "12345", 5, S("abcdefghijklmnopqrs12345")));
6707 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 1, "1234567890", 0, S("abcdefghijklmnopqrs")));
6708 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 1, "1234567890", 1, S("abcdefghijklmnopqrs1")));
6709 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 1, "1234567890", 5, S("abcdefghijklmnopqrs12345")));
6710 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 1, "1234567890", 9, S("abcdefghijklmnopqrs123456789")));
6711 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 1, "1234567890", 10, S("abcdefghijklmnopqrs1234567890")));
6712 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 1, "12345678901234567890", 0, S("abcdefghijklmnopqrs")));
6713 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 1, "12345678901234567890", 1, S("abcdefghijklmnopqrs1")));
6714 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 1, "12345678901234567890", 10, S("abcdefghijklmnopqrs1234567890")));
6715 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 1, "12345678901234567890", 19, S("abcdefghijklmnopqrs1234567890123456789")));
6716 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 1, "12345678901234567890", 20, S("abcdefghijklmnopqrs12345678901234567890")));
6717 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 2, "", 0, S("abcdefghijklmnopqrs")));
6718 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 2, "12345", 0, S("abcdefghijklmnopqrs")));
6719 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 2, "12345", 1, S("abcdefghijklmnopqrs1")));
6720 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 2, "12345", 2, S("abcdefghijklmnopqrs12")));
6721 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 2, "12345", 4, S("abcdefghijklmnopqrs1234")));
6722 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 2, "12345", 5, S("abcdefghijklmnopqrs12345")));
6723 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 2, "1234567890", 0, S("abcdefghijklmnopqrs")));
6724 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 2, "1234567890", 1, S("abcdefghijklmnopqrs1")));
6725 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 2, "1234567890", 5, S("abcdefghijklmnopqrs12345")));
6726 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 2, "1234567890", 9, S("abcdefghijklmnopqrs123456789")));
6727 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 2, "1234567890", 10, S("abcdefghijklmnopqrs1234567890")));
6728 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 2, "12345678901234567890", 0, S("abcdefghijklmnopqrs")));
6729 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 2, "12345678901234567890", 1, S("abcdefghijklmnopqrs1")));
6730 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 2, "12345678901234567890", 10, S("abcdefghijklmnopqrs1234567890")));
6731 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 2, "12345678901234567890", 19, S("abcdefghijklmnopqrs1234567890123456789")));
6732 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 2, "12345678901234567890", 20, S("abcdefghijklmnopqrs12345678901234567890")));
6733 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 0, "", 0, S("abcdefghijklmnopqrst")));
6734 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 0, "12345", 0, S("abcdefghijklmnopqrst")));
6735 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 0, "12345", 1, S("abcdefghijklmnopqrst1")));
6736 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 0, "12345", 2, S("abcdefghijklmnopqrst12")));
6737 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 0, "12345", 4, S("abcdefghijklmnopqrst1234")));
6738 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 0, "12345", 5, S("abcdefghijklmnopqrst12345")));
6739 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 0, "1234567890", 0, S("abcdefghijklmnopqrst")));
6740 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 0, "1234567890", 1, S("abcdefghijklmnopqrst1")));
6741 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 0, "1234567890", 5, S("abcdefghijklmnopqrst12345")));
6742 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 0, "1234567890", 9, S("abcdefghijklmnopqrst123456789")));
6743 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 0, "1234567890", 10, S("abcdefghijklmnopqrst1234567890")));
6744 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 0, "12345678901234567890", 0, S("abcdefghijklmnopqrst")));
6745 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 0, "12345678901234567890", 1, S("abcdefghijklmnopqrst1")));
6746 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 0, "12345678901234567890", 10, S("abcdefghijklmnopqrst1234567890")));
6747 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 0, "12345678901234567890", 19, S("abcdefghijklmnopqrst1234567890123456789")));
6748 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 0, "12345678901234567890", 20, S("abcdefghijklmnopqrst12345678901234567890")));
6749 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 1, "", 0, S("abcdefghijklmnopqrst")));
6750 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 1, "12345", 0, S("abcdefghijklmnopqrst")));
6751 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 1, "12345", 1, S("abcdefghijklmnopqrst1")));
6752 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 1, "12345", 2, S("abcdefghijklmnopqrst12")));
6753 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 1, "12345", 4, S("abcdefghijklmnopqrst1234")));
6754 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 1, "12345", 5, S("abcdefghijklmnopqrst12345")));
6755 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 1, "1234567890", 0, S("abcdefghijklmnopqrst")));
6756 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 1, "1234567890", 1, S("abcdefghijklmnopqrst1")));
6757 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 1, "1234567890", 5, S("abcdefghijklmnopqrst12345")));
6758 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 1, "1234567890", 9, S("abcdefghijklmnopqrst123456789")));
6759 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 1, "1234567890", 10, S("abcdefghijklmnopqrst1234567890")));
6760 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 1, "12345678901234567890", 0, S("abcdefghijklmnopqrst")));
6761 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 1, "12345678901234567890", 1, S("abcdefghijklmnopqrst1")));
6762 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 1, "12345678901234567890", 10, S("abcdefghijklmnopqrst1234567890")));
6763 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 1, "12345678901234567890", 19, S("abcdefghijklmnopqrst1234567890123456789")));
6764 BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 1, "12345678901234567890", 20, S("abcdefghijklmnopqrst12345678901234567890")));
6765
6766 using T = static_string<10>;
6767 BOOST_TEST_THROWS(T("12345").replace(0, 1, 500, 'a'), std::length_error);
6768 BOOST_TEST_THROWS(T("12345").replace(0, 1, "aaaaaaaaaaaaaa"), std::length_error);
6769
6770 // unchecked replacement throwing
6771 BOOST_TEST_THROWS(S("aaaaa").replace(10, 1, T("bbbbb")), std::out_of_range);
6772 BOOST_TEST_THROWS(T("aaaaa").replace(0, 1, S("bbbbbbbbbbbbb")), std::length_error);
6773}
6774
6775// done
6776void
6777testSubstr()
6778{
6779 using S = static_string<400>;
6780 BOOST_TEST(testS(S(""), 0, 0));
6781 BOOST_TEST(testS(S(""), 1, 0));
6782 BOOST_TEST(testS(S("pniot"), 0, 0));
6783 BOOST_TEST(testS(S("htaob"), 0, 1));
6784 BOOST_TEST(testS(S("fodgq"), 0, 2));
6785 BOOST_TEST(testS(S("hpqia"), 0, 4));
6786 BOOST_TEST(testS(S("qanej"), 0, 5));
6787 BOOST_TEST(testS(S("dfkap"), 1, 0));
6788 BOOST_TEST(testS(S("clbao"), 1, 1));
6789 BOOST_TEST(testS(S("ihqrf"), 1, 2));
6790 BOOST_TEST(testS(S("mekdn"), 1, 3));
6791 BOOST_TEST(testS(S("ngtjf"), 1, 4));
6792 BOOST_TEST(testS(S("srdfq"), 2, 0));
6793 BOOST_TEST(testS(S("qkdrs"), 2, 1));
6794 BOOST_TEST(testS(S("ikcrq"), 2, 2));
6795 BOOST_TEST(testS(S("cdaih"), 2, 3));
6796 BOOST_TEST(testS(S("dmajb"), 4, 0));
6797 BOOST_TEST(testS(S("karth"), 4, 1));
6798 BOOST_TEST(testS(S("lhcdo"), 5, 0));
6799 BOOST_TEST(testS(S("acbsj"), 6, 0));
6800 BOOST_TEST(testS(S("pbsjikaole"), 0, 0));
6801 BOOST_TEST(testS(S("pcbahntsje"), 0, 1));
6802 BOOST_TEST(testS(S("mprdjbeiak"), 0, 5));
6803 BOOST_TEST(testS(S("fhepcrntko"), 0, 9));
6804 BOOST_TEST(testS(S("eqmpaidtls"), 0, 10));
6805 BOOST_TEST(testS(S("joidhalcmq"), 1, 0));
6806 BOOST_TEST(testS(S("omigsphflj"), 1, 1));
6807 BOOST_TEST(testS(S("kocgbphfji"), 1, 4));
6808 BOOST_TEST(testS(S("onmjekafbi"), 1, 8));
6809 BOOST_TEST(testS(S("fbslrjiqkm"), 1, 9));
6810 BOOST_TEST(testS(S("oqmrjahnkg"), 5, 0));
6811 BOOST_TEST(testS(S("jeidpcmalh"), 5, 1));
6812 BOOST_TEST(testS(S("schfalibje"), 5, 2));
6813 BOOST_TEST(testS(S("crliponbqe"), 5, 4));
6814 BOOST_TEST(testS(S("igdscopqtm"), 5, 5));
6815 BOOST_TEST(testS(S("qngpdkimlc"), 9, 0));
6816 BOOST_TEST(testS(S("thdjgafrlb"), 9, 1));
6817 BOOST_TEST(testS(S("hcjitbfapl"), 10, 0));
6818 BOOST_TEST(testS(S("mgojkldsqh"), 11, 0));
6819 BOOST_TEST(testS(S("gfshlcmdjreqipbontak"), 0, 0));
6820 BOOST_TEST(testS(S("nadkhpfemgclosibtjrq"), 0, 1));
6821 BOOST_TEST(testS(S("nkodajteqplrbifhmcgs"), 0, 10));
6822 BOOST_TEST(testS(S("ofdrqmkeblthacpgijsn"), 0, 19));
6823 BOOST_TEST(testS(S("gbmetiprqdoasckjfhln"), 0, 20));
6824 BOOST_TEST(testS(S("bdfjqgatlksriohemnpc"), 1, 0));
6825 BOOST_TEST(testS(S("crnklpmegdqfiashtojb"), 1, 1));
6826 BOOST_TEST(testS(S("ejqcnahdrkfsmptilgbo"), 1, 9));
6827 BOOST_TEST(testS(S("jsbtafedocnirgpmkhql"), 1, 18));
6828 BOOST_TEST(testS(S("prqgnlbaejsmkhdctoif"), 1, 19));
6829 BOOST_TEST(testS(S("qnmodrtkebhpasifgcjl"), 10, 0));
6830 BOOST_TEST(testS(S("pejafmnokrqhtisbcdgl"), 10, 1));
6831 BOOST_TEST(testS(S("cpebqsfmnjdolhkratgi"), 10, 5));
6832 BOOST_TEST(testS(S("odnqkgijrhabfmcestlp"), 10, 9));
6833 BOOST_TEST(testS(S("lmofqdhpkibagnrcjste"), 10, 10));
6834 BOOST_TEST(testS(S("lgjqketopbfahrmnsicd"), 19, 0));
6835 BOOST_TEST(testS(S("ktsrmnqagdecfhijpobl"), 19, 1));
6836 BOOST_TEST(testS(S("lsaijeqhtrbgcdmpfkno"), 20, 0));
6837 BOOST_TEST(testS(S("dplqartnfgejichmoskb"), 21, 0));
6838 BOOST_TEST(testS(S(""), 0, 0));
6839 BOOST_TEST(testS(S(""), 1, 0));
6840 BOOST_TEST(testS(S("pniot"), 0, 0));
6841 BOOST_TEST(testS(S("htaob"), 0, 1));
6842 BOOST_TEST(testS(S("fodgq"), 0, 2));
6843 BOOST_TEST(testS(S("hpqia"), 0, 4));
6844 BOOST_TEST(testS(S("qanej"), 0, 5));
6845 BOOST_TEST(testS(S("dfkap"), 1, 0));
6846 BOOST_TEST(testS(S("clbao"), 1, 1));
6847 BOOST_TEST(testS(S("ihqrf"), 1, 2));
6848 BOOST_TEST(testS(S("mekdn"), 1, 3));
6849 BOOST_TEST(testS(S("ngtjf"), 1, 4));
6850 BOOST_TEST(testS(S("srdfq"), 2, 0));
6851 BOOST_TEST(testS(S("qkdrs"), 2, 1));
6852 BOOST_TEST(testS(S("ikcrq"), 2, 2));
6853 BOOST_TEST(testS(S("cdaih"), 2, 3));
6854 BOOST_TEST(testS(S("dmajb"), 4, 0));
6855 BOOST_TEST(testS(S("karth"), 4, 1));
6856 BOOST_TEST(testS(S("lhcdo"), 5, 0));
6857 BOOST_TEST(testS(S("acbsj"), 6, 0));
6858 BOOST_TEST(testS(S("pbsjikaole"), 0, 0));
6859 BOOST_TEST(testS(S("pcbahntsje"), 0, 1));
6860 BOOST_TEST(testS(S("mprdjbeiak"), 0, 5));
6861 BOOST_TEST(testS(S("fhepcrntko"), 0, 9));
6862 BOOST_TEST(testS(S("eqmpaidtls"), 0, 10));
6863 BOOST_TEST(testS(S("joidhalcmq"), 1, 0));
6864 BOOST_TEST(testS(S("omigsphflj"), 1, 1));
6865 BOOST_TEST(testS(S("kocgbphfji"), 1, 4));
6866 BOOST_TEST(testS(S("onmjekafbi"), 1, 8));
6867 BOOST_TEST(testS(S("fbslrjiqkm"), 1, 9));
6868 BOOST_TEST(testS(S("oqmrjahnkg"), 5, 0));
6869 BOOST_TEST(testS(S("jeidpcmalh"), 5, 1));
6870 BOOST_TEST(testS(S("schfalibje"), 5, 2));
6871 BOOST_TEST(testS(S("crliponbqe"), 5, 4));
6872 BOOST_TEST(testS(S("igdscopqtm"), 5, 5));
6873 BOOST_TEST(testS(S("qngpdkimlc"), 9, 0));
6874 BOOST_TEST(testS(S("thdjgafrlb"), 9, 1));
6875 BOOST_TEST(testS(S("hcjitbfapl"), 10, 0));
6876 BOOST_TEST(testS(S("mgojkldsqh"), 11, 0));
6877 BOOST_TEST(testS(S("gfshlcmdjreqipbontak"), 0, 0));
6878 BOOST_TEST(testS(S("nadkhpfemgclosibtjrq"), 0, 1));
6879 BOOST_TEST(testS(S("nkodajteqplrbifhmcgs"), 0, 10));
6880 BOOST_TEST(testS(S("ofdrqmkeblthacpgijsn"), 0, 19));
6881 BOOST_TEST(testS(S("gbmetiprqdoasckjfhln"), 0, 20));
6882 BOOST_TEST(testS(S("bdfjqgatlksriohemnpc"), 1, 0));
6883 BOOST_TEST(testS(S("crnklpmegdqfiashtojb"), 1, 1));
6884 BOOST_TEST(testS(S("ejqcnahdrkfsmptilgbo"), 1, 9));
6885 BOOST_TEST(testS(S("jsbtafedocnirgpmkhql"), 1, 18));
6886 BOOST_TEST(testS(S("prqgnlbaejsmkhdctoif"), 1, 19));
6887 BOOST_TEST(testS(S("qnmodrtkebhpasifgcjl"), 10, 0));
6888 BOOST_TEST(testS(S("pejafmnokrqhtisbcdgl"), 10, 1));
6889 BOOST_TEST(testS(S("cpebqsfmnjdolhkratgi"), 10, 5));
6890 BOOST_TEST(testS(S("odnqkgijrhabfmcestlp"), 10, 9));
6891 BOOST_TEST(testS(S("lmofqdhpkibagnrcjste"), 10, 10));
6892 BOOST_TEST(testS(S("lgjqketopbfahrmnsicd"), 19, 0));
6893 BOOST_TEST(testS(S("ktsrmnqagdecfhijpobl"), 19, 1));
6894 BOOST_TEST(testS(S("lsaijeqhtrbgcdmpfkno"), 20, 0));
6895 BOOST_TEST(testS(S("dplqartnfgejichmoskb"), 21, 0));
6896}
6897
6898// done
6899void
6900testSubview()
6901{
6902 using S = static_string<400>;
6903 BOOST_TEST(testSV(S(""), 0, 0));
6904 BOOST_TEST(testSV(S(""), 1, 0));
6905 BOOST_TEST(testSV(S("pniot"), 0, 0));
6906 BOOST_TEST(testSV(S("htaob"), 0, 1));
6907 BOOST_TEST(testSV(S("fodgq"), 0, 2));
6908 BOOST_TEST(testSV(S("hpqia"), 0, 4));
6909 BOOST_TEST(testSV(S("qanej"), 0, 5));
6910 BOOST_TEST(testSV(S("dfkap"), 1, 0));
6911 BOOST_TEST(testSV(S("clbao"), 1, 1));
6912 BOOST_TEST(testSV(S("ihqrf"), 1, 2));
6913 BOOST_TEST(testSV(S("mekdn"), 1, 3));
6914 BOOST_TEST(testSV(S("ngtjf"), 1, 4));
6915 BOOST_TEST(testSV(S("srdfq"), 2, 0));
6916 BOOST_TEST(testSV(S("qkdrs"), 2, 1));
6917 BOOST_TEST(testSV(S("ikcrq"), 2, 2));
6918 BOOST_TEST(testSV(S("cdaih"), 2, 3));
6919 BOOST_TEST(testSV(S("dmajb"), 4, 0));
6920 BOOST_TEST(testSV(S("karth"), 4, 1));
6921 BOOST_TEST(testSV(S("lhcdo"), 5, 0));
6922 BOOST_TEST(testSV(S("acbsj"), 6, 0));
6923 BOOST_TEST(testSV(S("pbsjikaole"), 0, 0));
6924 BOOST_TEST(testSV(S("pcbahntsje"), 0, 1));
6925 BOOST_TEST(testSV(S("mprdjbeiak"), 0, 5));
6926 BOOST_TEST(testSV(S("fhepcrntko"), 0, 9));
6927 BOOST_TEST(testSV(S("eqmpaidtls"), 0, 10));
6928 BOOST_TEST(testSV(S("joidhalcmq"), 1, 0));
6929 BOOST_TEST(testSV(S("omigsphflj"), 1, 1));
6930 BOOST_TEST(testSV(S("kocgbphfji"), 1, 4));
6931 BOOST_TEST(testSV(S("onmjekafbi"), 1, 8));
6932 BOOST_TEST(testSV(S("fbslrjiqkm"), 1, 9));
6933 BOOST_TEST(testSV(S("oqmrjahnkg"), 5, 0));
6934 BOOST_TEST(testSV(S("jeidpcmalh"), 5, 1));
6935 BOOST_TEST(testSV(S("schfalibje"), 5, 2));
6936 BOOST_TEST(testSV(S("crliponbqe"), 5, 4));
6937 BOOST_TEST(testSV(S("igdscopqtm"), 5, 5));
6938 BOOST_TEST(testSV(S("qngpdkimlc"), 9, 0));
6939 BOOST_TEST(testSV(S("thdjgafrlb"), 9, 1));
6940 BOOST_TEST(testSV(S("hcjitbfapl"), 10, 0));
6941 BOOST_TEST(testSV(S("mgojkldsqh"), 11, 0));
6942 BOOST_TEST(testSV(S("gfshlcmdjreqipbontak"), 0, 0));
6943 BOOST_TEST(testSV(S("nadkhpfemgclosibtjrq"), 0, 1));
6944 BOOST_TEST(testSV(S("nkodajteqplrbifhmcgs"), 0, 10));
6945 BOOST_TEST(testSV(S("ofdrqmkeblthacpgijsn"), 0, 19));
6946 BOOST_TEST(testSV(S("gbmetiprqdoasckjfhln"), 0, 20));
6947 BOOST_TEST(testSV(S("bdfjqgatlksriohemnpc"), 1, 0));
6948 BOOST_TEST(testSV(S("crnklpmegdqfiashtojb"), 1, 1));
6949 BOOST_TEST(testSV(S("ejqcnahdrkfsmptilgbo"), 1, 9));
6950 BOOST_TEST(testSV(S("jsbtafedocnirgpmkhql"), 1, 18));
6951 BOOST_TEST(testSV(S("prqgnlbaejsmkhdctoif"), 1, 19));
6952 BOOST_TEST(testSV(S("qnmodrtkebhpasifgcjl"), 10, 0));
6953 BOOST_TEST(testSV(S("pejafmnokrqhtisbcdgl"), 10, 1));
6954 BOOST_TEST(testSV(S("cpebqsfmnjdolhkratgi"), 10, 5));
6955 BOOST_TEST(testSV(S("odnqkgijrhabfmcestlp"), 10, 9));
6956 BOOST_TEST(testSV(S("lmofqdhpkibagnrcjste"), 10, 10));
6957 BOOST_TEST(testSV(S("lgjqketopbfahrmnsicd"), 19, 0));
6958 BOOST_TEST(testSV(S("ktsrmnqagdecfhijpobl"), 19, 1));
6959 BOOST_TEST(testSV(S("lsaijeqhtrbgcdmpfkno"), 20, 0));
6960 BOOST_TEST(testSV(S("dplqartnfgejichmoskb"), 21, 0));
6961 BOOST_TEST(testSV(S(""), 0, 0));
6962 BOOST_TEST(testSV(S(""), 1, 0));
6963 BOOST_TEST(testSV(S("pniot"), 0, 0));
6964 BOOST_TEST(testSV(S("htaob"), 0, 1));
6965 BOOST_TEST(testSV(S("fodgq"), 0, 2));
6966 BOOST_TEST(testSV(S("hpqia"), 0, 4));
6967 BOOST_TEST(testSV(S("qanej"), 0, 5));
6968 BOOST_TEST(testSV(S("dfkap"), 1, 0));
6969 BOOST_TEST(testSV(S("clbao"), 1, 1));
6970 BOOST_TEST(testSV(S("ihqrf"), 1, 2));
6971 BOOST_TEST(testSV(S("mekdn"), 1, 3));
6972 BOOST_TEST(testSV(S("ngtjf"), 1, 4));
6973 BOOST_TEST(testSV(S("srdfq"), 2, 0));
6974 BOOST_TEST(testSV(S("qkdrs"), 2, 1));
6975 BOOST_TEST(testSV(S("ikcrq"), 2, 2));
6976 BOOST_TEST(testSV(S("cdaih"), 2, 3));
6977 BOOST_TEST(testSV(S("dmajb"), 4, 0));
6978 BOOST_TEST(testSV(S("karth"), 4, 1));
6979 BOOST_TEST(testSV(S("lhcdo"), 5, 0));
6980 BOOST_TEST(testSV(S("acbsj"), 6, 0));
6981 BOOST_TEST(testSV(S("pbsjikaole"), 0, 0));
6982 BOOST_TEST(testSV(S("pcbahntsje"), 0, 1));
6983 BOOST_TEST(testSV(S("mprdjbeiak"), 0, 5));
6984 BOOST_TEST(testSV(S("fhepcrntko"), 0, 9));
6985 BOOST_TEST(testSV(S("eqmpaidtls"), 0, 10));
6986 BOOST_TEST(testSV(S("joidhalcmq"), 1, 0));
6987 BOOST_TEST(testSV(S("omigsphflj"), 1, 1));
6988 BOOST_TEST(testSV(S("kocgbphfji"), 1, 4));
6989 BOOST_TEST(testSV(S("onmjekafbi"), 1, 8));
6990 BOOST_TEST(testSV(S("fbslrjiqkm"), 1, 9));
6991 BOOST_TEST(testSV(S("oqmrjahnkg"), 5, 0));
6992 BOOST_TEST(testSV(S("jeidpcmalh"), 5, 1));
6993 BOOST_TEST(testSV(S("schfalibje"), 5, 2));
6994 BOOST_TEST(testSV(S("crliponbqe"), 5, 4));
6995 BOOST_TEST(testSV(S("igdscopqtm"), 5, 5));
6996 BOOST_TEST(testSV(S("qngpdkimlc"), 9, 0));
6997 BOOST_TEST(testSV(S("thdjgafrlb"), 9, 1));
6998 BOOST_TEST(testSV(S("hcjitbfapl"), 10, 0));
6999 BOOST_TEST(testSV(S("mgojkldsqh"), 11, 0));
7000 BOOST_TEST(testSV(S("gfshlcmdjreqipbontak"), 0, 0));
7001 BOOST_TEST(testSV(S("nadkhpfemgclosibtjrq"), 0, 1));
7002 BOOST_TEST(testSV(S("nkodajteqplrbifhmcgs"), 0, 10));
7003 BOOST_TEST(testSV(S("ofdrqmkeblthacpgijsn"), 0, 19));
7004 BOOST_TEST(testSV(S("gbmetiprqdoasckjfhln"), 0, 20));
7005 BOOST_TEST(testSV(S("bdfjqgatlksriohemnpc"), 1, 0));
7006 BOOST_TEST(testSV(S("crnklpmegdqfiashtojb"), 1, 1));
7007 BOOST_TEST(testSV(S("ejqcnahdrkfsmptilgbo"), 1, 9));
7008 BOOST_TEST(testSV(S("jsbtafedocnirgpmkhql"), 1, 18));
7009 BOOST_TEST(testSV(S("prqgnlbaejsmkhdctoif"), 1, 19));
7010 BOOST_TEST(testSV(S("qnmodrtkebhpasifgcjl"), 10, 0));
7011 BOOST_TEST(testSV(S("pejafmnokrqhtisbcdgl"), 10, 1));
7012 BOOST_TEST(testSV(S("cpebqsfmnjdolhkratgi"), 10, 5));
7013 BOOST_TEST(testSV(S("odnqkgijrhabfmcestlp"), 10, 9));
7014 BOOST_TEST(testSV(S("lmofqdhpkibagnrcjste"), 10, 10));
7015 BOOST_TEST(testSV(S("lgjqketopbfahrmnsicd"), 19, 0));
7016 BOOST_TEST(testSV(S("ktsrmnqagdecfhijpobl"), 19, 1));
7017 BOOST_TEST(testSV(S("lsaijeqhtrbgcdmpfkno"), 20, 0));
7018 BOOST_TEST(testSV(S("dplqartnfgejichmoskb"), 21, 0));
7019}
7020
7021// done
7022void
7023testStartsEnds()
7024{
7025 using S = static_string<400>;
7026 BOOST_TEST(S("1234567890").starts_with('1'));
7027 BOOST_TEST(S("1234567890").starts_with("123"));
7028 BOOST_TEST(S("1234567890").starts_with("1234567890"));
7029 BOOST_TEST(!S("1234567890").starts_with("234"));
7030 BOOST_TEST(!S("1234567890").starts_with("12345678900"));
7031 BOOST_TEST(S("1234567890").starts_with(string_view("1234567890")));
7032
7033 BOOST_TEST(S("1234567890").ends_with('0'));
7034 BOOST_TEST(S("1234567890").ends_with("890"));
7035 BOOST_TEST(S("1234567890").ends_with("1234567890"));
7036 BOOST_TEST(!S("1234567890").ends_with("234"));
7037 BOOST_TEST(!S("1234567890").ends_with("12345678900"));
7038 BOOST_TEST(S("1234567890").ends_with(string_view("1234567890")));
7039
7040 BOOST_TEST(!S().starts_with('0'));
7041 BOOST_TEST(!S().starts_with("0"));
7042 BOOST_TEST(!S().starts_with(string_view("0")));
7043 BOOST_TEST(!S().ends_with('0'));
7044 BOOST_TEST(!S().ends_with("0"));
7045 BOOST_TEST(!S().ends_with(string_view("0")));
7046}
7047
7048void
7049testHash()
7050{
7051 using U = static_string<30>;
7052 std::hash<U> hasher;
7053 BOOST_TEST(hasher(U("1")) != hasher(U("123456789")));
7054 BOOST_TEST(hasher(U("1234567890")) == hasher(U("1234567890")));
7055}
7056
7057void
7058testEmpty()
7059{
7060 static_string<0> a;
7061 BOOST_TEST(a.size() == 0);
7062 BOOST_TEST(a.data() != nullptr);
7063 BOOST_TEST(a.capacity() == 0);
7064}
7065
7066void
7067testResize()
7068{
7069 static_string<10> a = "a";
7070 a.resize(a.size() + 1);
7071 BOOST_TEST(a.size() == 2);
7072
7073 static_string<10> b = "a";
7074 b.resize(b.size() + 1, 'a');
7075 BOOST_TEST(b == "aa");
7076 BOOST_TEST(b.size() == 2);
7077}
7078
7079void
7080testStream()
7081{
7082 std::stringstream a;
7083 static_string<10> b = "abcdefghij";
7084 a << b;
7085 static_string<10> c(std::istream_iterator<char>{a}, std::istream_iterator<char>{});
7086 BOOST_TEST(a.str() == b.subview());
7087 BOOST_TEST(b == c);
7088}
7089
7090void
7091testOperatorPlus()
7092{
7093 static_string<10> s1 = "hello";
7094 static_string<10> s2 = "world";
7095
7096 // operator+(static_string, static_string)
7097 {
7098 auto res = s1 + s2;
7099 BOOST_TEST(res == "helloworld");
7100 BOOST_TEST(res.capacity() == 20);
7101 BOOST_TEST(res.size() == 10);
7102 }
7103
7104 // operator+(static_string, CharT)
7105 {
7106 auto res = s1 + '!';
7107 BOOST_TEST(res == "hello!");
7108 BOOST_TEST(res.capacity() == 11);
7109 BOOST_TEST(res.size() == 6);
7110 }
7111
7112 // operator+(CharT, static_string)
7113 {
7114 auto res = '!' + s1;
7115 BOOST_TEST(res == "!hello");
7116 BOOST_TEST(res.capacity() == 11);
7117 BOOST_TEST(res.size() == 6);
7118 }
7119
7120 // operator+(static_string, CharT(&)[N])
7121 {
7122 auto res = s1 + "world";
7123 BOOST_TEST(res == "helloworld");
7124 BOOST_TEST(res.capacity() == 16);
7125 BOOST_TEST(res.size() == 10);
7126 }
7127
7128 // operator+(CharT(&)[N], static_string)
7129 {
7130 auto res = "hello" + s2;
7131 BOOST_TEST(res == "helloworld");
7132 BOOST_TEST(res.capacity() == 16);
7133 BOOST_TEST(res.size() == 10);
7134 }
7135
7136 // operator+(static_string, CharT(&)[N]), no null
7137 {
7138 char arr[10] = {'w', 'o', 'r', 'l', 'd'};
7139 auto res = s1 + arr;
7140 BOOST_TEST(res == "helloworld");
7141 BOOST_TEST(res.capacity() == 20);
7142 BOOST_TEST(res.size() == 10);
7143 }
7144
7145 // operator+(CharT(&)[N], static_string), no null
7146 {
7147 char arr[10] = {'h', 'e', 'l', 'l', 'o'};
7148 auto res = arr + s2;
7149 BOOST_TEST(res == "helloworld");
7150 BOOST_TEST(res.capacity() == 20);
7151 BOOST_TEST(res.size() == 10);
7152 }
7153}
7154
7155int
7156runTests()
7157{
7158 constexpr auto cxper = testConstantEvaluation();
7159 static_cast<void>(cxper);
7160
7161 testConstruct();
7162
7163 testAssignment();
7164
7165 testElements();
7166
7167 testIterators();
7168
7169 testCapacity();
7170
7171 testClear();
7172 testInsert();
7173 testErase();
7174 testPushBack();
7175 testPopBack();
7176 testAppend();
7177 testPlusEquals();
7178
7179 testCompare();
7180 testSwap();
7181 testGeneral();
7182 testToStaticString();
7183 testResize();
7184
7185 testFind();
7186
7187 testReplace();
7188 testSubstr();
7189 testStartsEnds();
7190
7191 testHash();
7192 testEmpty();
7193 testStream();
7194 testOperatorPlus();
7195
7196 return report_errors();
7197}
7198} // static_string
7199} // boost
7200
7201int
7202main()
7203{
7204 return boost::static_strings::runTests();
7205}