diff --git a/test/fixed_string.cpp b/test/fixed_string.cpp index 8d70ddd..c2804ae 100644 --- a/test/fixed_string.cpp +++ b/test/fixed_string.cpp @@ -14,7 +14,7 @@ namespace boost { namespace fixed_string { - + static void testConstruct() @@ -595,11 +595,39 @@ testClear() BOOST_TEST(*s.end() == 0); } + +template +bool +testI(S s, typename S::size_type pos, const typename S::value_type* str, + typename S::size_type n, S expected) +{ + const typename S::size_type old_size = s.size(); + S s0 = s; + if (pos <= old_size) + { + s.insert(pos, str, n); + return s == expected; + } + else + { + try + { + s.insert(pos, str, n); + return s == expected; + } + catch (std::out_of_range&) + { + return true; + } + } +} + static void testInsert() { using sv = string_view; + using S = fixed_string<100>; // insert(size_type index, size_type count, CharT ch) // The overload resolution is ambiguous @@ -837,6 +865,657 @@ testInsert() (s1.insert(4, std::string("PQR"), 1, 1)), std::length_error); } + // test insert with source inside self + + { + fixed_string<30> fs1 = "0123456789"; + BOOST_TEST(fs1.insert(0, fs1.data(), 4) == "01230123456789"); + } + { + fixed_string<30> fs1 = "0123456789"; + BOOST_TEST(fs1.insert(5, fs1.data(), 4) == "01234012356789"); + } + { + fixed_string<30> fs1 = "0123456789"; + BOOST_TEST(fs1.insert(5, fs1.data(), 10) == "01234012345678956789"); + } + { + fixed_string<30> fs1 = "0123456789"; + BOOST_TEST(fs1.insert(5, fs1.data() + 6, 3) == "0123467856789"); + } + + S s_short = "123/"; + S s_long = "Lorem ipsum dolor sit amet, consectetur/"; + + BOOST_TEST(s_short.insert(0, s_short.data(), s_short.size()) == "123/123/"); + BOOST_TEST(s_short.insert(0, s_short.data(), s_short.size()) == "123/123/123/123/"); + BOOST_TEST(s_short.insert(0, s_short.data(), s_short.size()) == "123/123/123/123/123/123/123/123/"); + BOOST_TEST(s_long.insert(0, s_long.data(), s_long.size()) == "Lorem ipsum dolor sit amet, consectetur/Lorem ipsum dolor sit amet, consectetur/"); + + BOOST_TEST(testI(S(""), 0, "", 0, S(""))); + BOOST_TEST(testI(S(""), 0, "12345", 0, S(""))); + BOOST_TEST(testI(S(""), 0, "12345", 1, S("1"))); + BOOST_TEST(testI(S(""), 0, "12345", 2, S("12"))); + BOOST_TEST(testI(S(""), 0, "12345", 4, S("1234"))); + BOOST_TEST(testI(S(""), 0, "12345", 5, S("12345"))); + BOOST_TEST(testI(S(""), 0, "1234567890", 0, S(""))); + BOOST_TEST(testI(S(""), 0, "1234567890", 1, S("1"))); + BOOST_TEST(testI(S(""), 0, "1234567890", 5, S("12345"))); + BOOST_TEST(testI(S(""), 0, "1234567890", 9, S("123456789"))); + BOOST_TEST(testI(S(""), 0, "1234567890", 10, S("1234567890"))); + BOOST_TEST(testI(S(""), 0, "12345678901234567890", 0, S(""))); + BOOST_TEST(testI(S(""), 0, "12345678901234567890", 1, S("1"))); + BOOST_TEST(testI(S(""), 0, "12345678901234567890", 10, S("1234567890"))); + BOOST_TEST(testI(S(""), 0, "12345678901234567890", 19, S("1234567890123456789"))); + BOOST_TEST(testI(S(""), 0, "12345678901234567890", 20, S("12345678901234567890"))); + BOOST_TEST(testI(S(""), 1, "", 0, S("can't happen"))); + BOOST_TEST(testI(S(""), 1, "12345", 0, S("can't happen"))); + BOOST_TEST(testI(S(""), 1, "12345", 1, S("can't happen"))); + BOOST_TEST(testI(S(""), 1, "12345", 2, S("can't happen"))); + BOOST_TEST(testI(S(""), 1, "12345", 4, S("can't happen"))); + BOOST_TEST(testI(S(""), 1, "12345", 5, S("can't happen"))); + BOOST_TEST(testI(S(""), 1, "1234567890", 0, S("can't happen"))); + BOOST_TEST(testI(S(""), 1, "1234567890", 1, S("can't happen"))); + BOOST_TEST(testI(S(""), 1, "1234567890", 5, S("can't happen"))); + BOOST_TEST(testI(S(""), 1, "1234567890", 9, S("can't happen"))); + BOOST_TEST(testI(S(""), 1, "1234567890", 10, S("can't happen"))); + BOOST_TEST(testI(S(""), 1, "12345678901234567890", 0, S("can't happen"))); + BOOST_TEST(testI(S(""), 1, "12345678901234567890", 1, S("can't happen"))); + BOOST_TEST(testI(S(""), 1, "12345678901234567890", 10, S("can't happen"))); + BOOST_TEST(testI(S(""), 1, "12345678901234567890", 19, S("can't happen"))); + BOOST_TEST(testI(S(""), 1, "12345678901234567890", 20, S("can't happen"))); + BOOST_TEST(testI(S("abcde"), 0, "", 0, S("abcde"))); + BOOST_TEST(testI(S("abcde"), 0, "12345", 0, S("abcde"))); + BOOST_TEST(testI(S("abcde"), 0, "12345", 1, S("1abcde"))); + BOOST_TEST(testI(S("abcde"), 0, "12345", 2, S("12abcde"))); + BOOST_TEST(testI(S("abcde"), 0, "12345", 4, S("1234abcde"))); + BOOST_TEST(testI(S("abcde"), 0, "12345", 5, S("12345abcde"))); + BOOST_TEST(testI(S("abcde"), 0, "1234567890", 0, S("abcde"))); + BOOST_TEST(testI(S("abcde"), 0, "1234567890", 1, S("1abcde"))); + BOOST_TEST(testI(S("abcde"), 0, "1234567890", 5, S("12345abcde"))); + BOOST_TEST(testI(S("abcde"), 0, "1234567890", 9, S("123456789abcde"))); + BOOST_TEST(testI(S("abcde"), 0, "1234567890", 10, S("1234567890abcde"))); + BOOST_TEST(testI(S("abcde"), 0, "12345678901234567890", 0, S("abcde"))); + BOOST_TEST(testI(S("abcde"), 0, "12345678901234567890", 1, S("1abcde"))); + BOOST_TEST(testI(S("abcde"), 0, "12345678901234567890", 10, S("1234567890abcde"))); + BOOST_TEST(testI(S("abcde"), 0, "12345678901234567890", 19, S("1234567890123456789abcde"))); + BOOST_TEST(testI(S("abcde"), 0, "12345678901234567890", 20, S("12345678901234567890abcde"))); + BOOST_TEST(testI(S("abcde"), 1, "", 0, S("abcde"))); + BOOST_TEST(testI(S("abcde"), 1, "12345", 0, S("abcde"))); + BOOST_TEST(testI(S("abcde"), 1, "12345", 1, S("a1bcde"))); + BOOST_TEST(testI(S("abcde"), 1, "12345", 2, S("a12bcde"))); + BOOST_TEST(testI(S("abcde"), 1, "12345", 4, S("a1234bcde"))); + BOOST_TEST(testI(S("abcde"), 1, "12345", 5, S("a12345bcde"))); + BOOST_TEST(testI(S("abcde"), 1, "1234567890", 0, S("abcde"))); + BOOST_TEST(testI(S("abcde"), 1, "1234567890", 1, S("a1bcde"))); + BOOST_TEST(testI(S("abcde"), 1, "1234567890", 5, S("a12345bcde"))); + BOOST_TEST(testI(S("abcde"), 1, "1234567890", 9, S("a123456789bcde"))); + BOOST_TEST(testI(S("abcde"), 1, "1234567890", 10, S("a1234567890bcde"))); + BOOST_TEST(testI(S("abcde"), 1, "12345678901234567890", 0, S("abcde"))); + BOOST_TEST(testI(S("abcde"), 1, "12345678901234567890", 1, S("a1bcde"))); + BOOST_TEST(testI(S("abcde"), 1, "12345678901234567890", 10, S("a1234567890bcde"))); + BOOST_TEST(testI(S("abcde"), 1, "12345678901234567890", 19, S("a1234567890123456789bcde"))); + BOOST_TEST(testI(S("abcde"), 1, "12345678901234567890", 20, S("a12345678901234567890bcde"))); + BOOST_TEST(testI(S("abcde"), 2, "", 0, S("abcde"))); + BOOST_TEST(testI(S("abcde"), 2, "12345", 0, S("abcde"))); + BOOST_TEST(testI(S("abcde"), 2, "12345", 1, S("ab1cde"))); + BOOST_TEST(testI(S("abcde"), 2, "12345", 2, S("ab12cde"))); + BOOST_TEST(testI(S("abcde"), 2, "12345", 4, S("ab1234cde"))); + BOOST_TEST(testI(S("abcde"), 2, "12345", 5, S("ab12345cde"))); + BOOST_TEST(testI(S("abcde"), 2, "1234567890", 0, S("abcde"))); + BOOST_TEST(testI(S("abcde"), 2, "1234567890", 1, S("ab1cde"))); + BOOST_TEST(testI(S("abcde"), 2, "1234567890", 5, S("ab12345cde"))); + BOOST_TEST(testI(S("abcde"), 2, "1234567890", 9, S("ab123456789cde"))); + BOOST_TEST(testI(S("abcde"), 2, "1234567890", 10, S("ab1234567890cde"))); + BOOST_TEST(testI(S("abcde"), 2, "12345678901234567890", 0, S("abcde"))); + BOOST_TEST(testI(S("abcde"), 2, "12345678901234567890", 1, S("ab1cde"))); + BOOST_TEST(testI(S("abcde"), 2, "12345678901234567890", 10, S("ab1234567890cde"))); + BOOST_TEST(testI(S("abcde"), 2, "12345678901234567890", 19, S("ab1234567890123456789cde"))); + BOOST_TEST(testI(S("abcde"), 2, "12345678901234567890", 20, S("ab12345678901234567890cde"))); + BOOST_TEST(testI(S("abcde"), 4, "", 0, S("abcde"))); + BOOST_TEST(testI(S("abcde"), 4, "12345", 0, S("abcde"))); + BOOST_TEST(testI(S("abcde"), 4, "12345", 1, S("abcd1e"))); + BOOST_TEST(testI(S("abcde"), 4, "12345", 2, S("abcd12e"))); + BOOST_TEST(testI(S("abcde"), 4, "12345", 4, S("abcd1234e"))); + BOOST_TEST(testI(S("abcde"), 4, "12345", 5, S("abcd12345e"))); + BOOST_TEST(testI(S("abcde"), 4, "1234567890", 0, S("abcde"))); + BOOST_TEST(testI(S("abcde"), 4, "1234567890", 1, S("abcd1e"))); + BOOST_TEST(testI(S("abcde"), 4, "1234567890", 5, S("abcd12345e"))); + BOOST_TEST(testI(S("abcde"), 4, "1234567890", 9, S("abcd123456789e"))); + BOOST_TEST(testI(S("abcde"), 4, "1234567890", 10, S("abcd1234567890e"))); + BOOST_TEST(testI(S("abcde"), 4, "12345678901234567890", 0, S("abcde"))); + BOOST_TEST(testI(S("abcde"), 4, "12345678901234567890", 1, S("abcd1e"))); + BOOST_TEST(testI(S("abcde"), 4, "12345678901234567890", 10, S("abcd1234567890e"))); + BOOST_TEST(testI(S("abcde"), 4, "12345678901234567890", 19, S("abcd1234567890123456789e"))); + BOOST_TEST(testI(S("abcde"), 4, "12345678901234567890", 20, S("abcd12345678901234567890e"))); + BOOST_TEST(testI(S("abcde"), 5, "", 0, S("abcde"))); + BOOST_TEST(testI(S("abcde"), 5, "12345", 0, S("abcde"))); + BOOST_TEST(testI(S("abcde"), 5, "12345", 1, S("abcde1"))); + BOOST_TEST(testI(S("abcde"), 5, "12345", 2, S("abcde12"))); + BOOST_TEST(testI(S("abcde"), 5, "12345", 4, S("abcde1234"))); + BOOST_TEST(testI(S("abcde"), 5, "12345", 5, S("abcde12345"))); + BOOST_TEST(testI(S("abcde"), 5, "1234567890", 0, S("abcde"))); + BOOST_TEST(testI(S("abcde"), 5, "1234567890", 1, S("abcde1"))); + BOOST_TEST(testI(S("abcde"), 5, "1234567890", 5, S("abcde12345"))); + BOOST_TEST(testI(S("abcde"), 5, "1234567890", 9, S("abcde123456789"))); + BOOST_TEST(testI(S("abcde"), 5, "1234567890", 10, S("abcde1234567890"))); + BOOST_TEST(testI(S("abcde"), 5, "12345678901234567890", 0, S("abcde"))); + BOOST_TEST(testI(S("abcde"), 5, "12345678901234567890", 1, S("abcde1"))); + BOOST_TEST(testI(S("abcde"), 5, "12345678901234567890", 10, S("abcde1234567890"))); + BOOST_TEST(testI(S("abcde"), 5, "12345678901234567890", 19, S("abcde1234567890123456789"))); + BOOST_TEST(testI(S("abcde"), 5, "12345678901234567890", 20, S("abcde12345678901234567890"))); + BOOST_TEST(testI(S("abcde"), 6, "", 0, S("can't happen"))); + BOOST_TEST(testI(S("abcde"), 6, "12345", 0, S("can't happen"))); + BOOST_TEST(testI(S("abcde"), 6, "12345", 1, S("can't happen"))); + BOOST_TEST(testI(S("abcde"), 6, "12345", 2, S("can't happen"))); + BOOST_TEST(testI(S("abcde"), 6, "12345", 4, S("can't happen"))); + BOOST_TEST(testI(S("abcde"), 6, "12345", 5, S("can't happen"))); + BOOST_TEST(testI(S("abcde"), 6, "1234567890", 0, S("can't happen"))); + BOOST_TEST(testI(S("abcde"), 6, "1234567890", 1, S("can't happen"))); + BOOST_TEST(testI(S("abcde"), 6, "1234567890", 5, S("can't happen"))); + BOOST_TEST(testI(S("abcde"), 6, "1234567890", 9, S("can't happen"))); + BOOST_TEST(testI(S("abcde"), 6, "1234567890", 10, S("can't happen"))); + BOOST_TEST(testI(S("abcde"), 6, "12345678901234567890", 0, S("can't happen"))); + BOOST_TEST(testI(S("abcde"), 6, "12345678901234567890", 1, S("can't happen"))); + BOOST_TEST(testI(S("abcde"), 6, "12345678901234567890", 10, S("can't happen"))); + BOOST_TEST(testI(S("abcde"), 6, "12345678901234567890", 19, S("can't happen"))); + BOOST_TEST(testI(S("abcde"), 6, "12345678901234567890", 20, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghij"), 0, "", 0, S("abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 0, "12345", 0, S("abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 0, "12345", 1, S("1abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 0, "12345", 2, S("12abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 0, "12345", 4, S("1234abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 0, "12345", 5, S("12345abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 0, "1234567890", 0, S("abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 0, "1234567890", 1, S("1abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 0, "1234567890", 5, S("12345abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 0, "1234567890", 9, S("123456789abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 0, "1234567890", 10, S("1234567890abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 0, "12345678901234567890", 0, S("abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 0, "12345678901234567890", 1, S("1abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 0, "12345678901234567890", 10, S("1234567890abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 0, "12345678901234567890", 19, S("1234567890123456789abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 0, "12345678901234567890", 20, S("12345678901234567890abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 1, "", 0, S("abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 1, "12345", 0, S("abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 1, "12345", 1, S("a1bcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 1, "12345", 2, S("a12bcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 1, "12345", 4, S("a1234bcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 1, "12345", 5, S("a12345bcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 1, "1234567890", 0, S("abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 1, "1234567890", 1, S("a1bcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 1, "1234567890", 5, S("a12345bcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 1, "1234567890", 9, S("a123456789bcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 1, "1234567890", 10, S("a1234567890bcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 1, "12345678901234567890", 0, S("abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 1, "12345678901234567890", 1, S("a1bcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 1, "12345678901234567890", 10, S("a1234567890bcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 1, "12345678901234567890", 19, S("a1234567890123456789bcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 1, "12345678901234567890", 20, S("a12345678901234567890bcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 5, "", 0, S("abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 5, "12345", 0, S("abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 5, "12345", 1, S("abcde1fghij"))); + BOOST_TEST(testI(S("abcdefghij"), 5, "12345", 2, S("abcde12fghij"))); + BOOST_TEST(testI(S("abcdefghij"), 5, "12345", 4, S("abcde1234fghij"))); + BOOST_TEST(testI(S("abcdefghij"), 5, "12345", 5, S("abcde12345fghij"))); + BOOST_TEST(testI(S("abcdefghij"), 5, "1234567890", 0, S("abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 5, "1234567890", 1, S("abcde1fghij"))); + BOOST_TEST(testI(S("abcdefghij"), 5, "1234567890", 5, S("abcde12345fghij"))); + BOOST_TEST(testI(S("abcdefghij"), 5, "1234567890", 9, S("abcde123456789fghij"))); + BOOST_TEST(testI(S("abcdefghij"), 5, "1234567890", 10, S("abcde1234567890fghij"))); + BOOST_TEST(testI(S("abcdefghij"), 5, "12345678901234567890", 0, S("abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 5, "12345678901234567890", 1, S("abcde1fghij"))); + BOOST_TEST(testI(S("abcdefghij"), 5, "12345678901234567890", 10, S("abcde1234567890fghij"))); + BOOST_TEST(testI(S("abcdefghij"), 5, "12345678901234567890", 19, S("abcde1234567890123456789fghij"))); + BOOST_TEST(testI(S("abcdefghij"), 5, "12345678901234567890", 20, S("abcde12345678901234567890fghij"))); + BOOST_TEST(testI(S("abcdefghij"), 9, "", 0, S("abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 9, "12345", 0, S("abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 9, "12345", 1, S("abcdefghi1j"))); + BOOST_TEST(testI(S("abcdefghij"), 9, "12345", 2, S("abcdefghi12j"))); + BOOST_TEST(testI(S("abcdefghij"), 9, "12345", 4, S("abcdefghi1234j"))); + BOOST_TEST(testI(S("abcdefghij"), 9, "12345", 5, S("abcdefghi12345j"))); + BOOST_TEST(testI(S("abcdefghij"), 9, "1234567890", 0, S("abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 9, "1234567890", 1, S("abcdefghi1j"))); + BOOST_TEST(testI(S("abcdefghij"), 9, "1234567890", 5, S("abcdefghi12345j"))); + BOOST_TEST(testI(S("abcdefghij"), 9, "1234567890", 9, S("abcdefghi123456789j"))); + BOOST_TEST(testI(S("abcdefghij"), 9, "1234567890", 10, S("abcdefghi1234567890j"))); + BOOST_TEST(testI(S("abcdefghij"), 9, "12345678901234567890", 0, S("abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 9, "12345678901234567890", 1, S("abcdefghi1j"))); + BOOST_TEST(testI(S("abcdefghij"), 9, "12345678901234567890", 10, S("abcdefghi1234567890j"))); + BOOST_TEST(testI(S("abcdefghij"), 9, "12345678901234567890", 19, S("abcdefghi1234567890123456789j"))); + BOOST_TEST(testI(S("abcdefghij"), 9, "12345678901234567890", 20, S("abcdefghi12345678901234567890j"))); + BOOST_TEST(testI(S("abcdefghij"), 10, "", 0, S("abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 10, "12345", 0, S("abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 10, "12345", 1, S("abcdefghij1"))); + BOOST_TEST(testI(S("abcdefghij"), 10, "12345", 2, S("abcdefghij12"))); + BOOST_TEST(testI(S("abcdefghij"), 10, "12345", 4, S("abcdefghij1234"))); + BOOST_TEST(testI(S("abcdefghij"), 10, "12345", 5, S("abcdefghij12345"))); + BOOST_TEST(testI(S("abcdefghij"), 10, "1234567890", 0, S("abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 10, "1234567890", 1, S("abcdefghij1"))); + BOOST_TEST(testI(S("abcdefghij"), 10, "1234567890", 5, S("abcdefghij12345"))); + BOOST_TEST(testI(S("abcdefghij"), 10, "1234567890", 9, S("abcdefghij123456789"))); + BOOST_TEST(testI(S("abcdefghij"), 10, "1234567890", 10, S("abcdefghij1234567890"))); + BOOST_TEST(testI(S("abcdefghij"), 10, "12345678901234567890", 0, S("abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 10, "12345678901234567890", 1, S("abcdefghij1"))); + BOOST_TEST(testI(S("abcdefghij"), 10, "12345678901234567890", 10, S("abcdefghij1234567890"))); + BOOST_TEST(testI(S("abcdefghij"), 10, "12345678901234567890", 19, S("abcdefghij1234567890123456789"))); + BOOST_TEST(testI(S("abcdefghij"), 10, "12345678901234567890", 20, S("abcdefghij12345678901234567890"))); + BOOST_TEST(testI(S("abcdefghij"), 11, "", 0, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghij"), 11, "12345", 0, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghij"), 11, "12345", 1, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghij"), 11, "12345", 2, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghij"), 11, "12345", 4, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghij"), 11, "12345", 5, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghij"), 11, "1234567890", 0, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghij"), 11, "1234567890", 1, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghij"), 11, "1234567890", 5, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghij"), 11, "1234567890", 9, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghij"), 11, "1234567890", 10, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghij"), 11, "12345678901234567890", 0, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghij"), 11, "12345678901234567890", 1, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghij"), 11, "12345678901234567890", 10, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghij"), 11, "12345678901234567890", 19, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghij"), 11, "12345678901234567890", 20, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "12345", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "12345", 1, S("1abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "12345", 2, S("12abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "12345", 4, S("1234abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "12345", 5, S("12345abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "1234567890", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "1234567890", 1, S("1abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "1234567890", 5, S("12345abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "1234567890", 9, S("123456789abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "1234567890", 10, S("1234567890abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "12345678901234567890", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "12345678901234567890", 1, S("1abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "12345678901234567890", 10, S("1234567890abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "12345678901234567890", 19, S("1234567890123456789abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "12345678901234567890", 20, S("12345678901234567890abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "12345", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "12345", 1, S("a1bcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "12345", 2, S("a12bcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "12345", 4, S("a1234bcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "12345", 5, S("a12345bcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "1234567890", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "1234567890", 1, S("a1bcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "1234567890", 5, S("a12345bcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "1234567890", 9, S("a123456789bcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "1234567890", 10, S("a1234567890bcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "12345678901234567890", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "12345678901234567890", 1, S("a1bcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "12345678901234567890", 10, S("a1234567890bcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "12345678901234567890", 19, S("a1234567890123456789bcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "12345678901234567890", 20, S("a12345678901234567890bcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "12345", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "12345", 1, S("abcdefghij1klmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "12345", 2, S("abcdefghij12klmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "12345", 4, S("abcdefghij1234klmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "12345", 5, S("abcdefghij12345klmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "1234567890", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "1234567890", 1, S("abcdefghij1klmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "1234567890", 5, S("abcdefghij12345klmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "1234567890", 9, S("abcdefghij123456789klmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "1234567890", 10, S("abcdefghij1234567890klmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "12345678901234567890", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "12345678901234567890", 1, S("abcdefghij1klmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "12345678901234567890", 10, S("abcdefghij1234567890klmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "12345678901234567890", 19, S("abcdefghij1234567890123456789klmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "12345678901234567890", 20, S("abcdefghij12345678901234567890klmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "12345", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "12345", 1, S("abcdefghijklmnopqrs1t"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "12345", 2, S("abcdefghijklmnopqrs12t"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "12345", 4, S("abcdefghijklmnopqrs1234t"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "12345", 5, S("abcdefghijklmnopqrs12345t"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "1234567890", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "1234567890", 1, S("abcdefghijklmnopqrs1t"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "1234567890", 5, S("abcdefghijklmnopqrs12345t"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "1234567890", 9, S("abcdefghijklmnopqrs123456789t"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "1234567890", 10, S("abcdefghijklmnopqrs1234567890t"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "12345678901234567890", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "12345678901234567890", 1, S("abcdefghijklmnopqrs1t"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "12345678901234567890", 10, S("abcdefghijklmnopqrs1234567890t"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "12345678901234567890", 19, S("abcdefghijklmnopqrs1234567890123456789t"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "12345678901234567890", 20, S("abcdefghijklmnopqrs12345678901234567890t"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "12345", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "12345", 1, S("abcdefghijklmnopqrst1"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "12345", 2, S("abcdefghijklmnopqrst12"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "12345", 4, S("abcdefghijklmnopqrst1234"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "12345", 5, S("abcdefghijklmnopqrst12345"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "1234567890", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "1234567890", 1, S("abcdefghijklmnopqrst1"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "1234567890", 5, S("abcdefghijklmnopqrst12345"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "1234567890", 9, S("abcdefghijklmnopqrst123456789"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "1234567890", 10, S("abcdefghijklmnopqrst1234567890"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "12345678901234567890", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "12345678901234567890", 1, S("abcdefghijklmnopqrst1"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "12345678901234567890", 10, S("abcdefghijklmnopqrst1234567890"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "12345678901234567890", 19, S("abcdefghijklmnopqrst1234567890123456789"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "12345678901234567890", 20, S("abcdefghijklmnopqrst12345678901234567890"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "", 0, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "12345", 0, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "12345", 1, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "12345", 2, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "12345", 4, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "12345", 5, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "1234567890", 0, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "1234567890", 1, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "1234567890", 5, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "1234567890", 9, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "1234567890", 10, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "12345678901234567890", 0, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "12345678901234567890", 1, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "12345678901234567890", 10, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "12345678901234567890", 19, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "12345678901234567890", 20, S("can't happen"))); + BOOST_TEST(testI(S(""), 0, "", 0, S(""))); + BOOST_TEST(testI(S(""), 0, "12345", 0, S(""))); + BOOST_TEST(testI(S(""), 0, "12345", 1, S("1"))); + BOOST_TEST(testI(S(""), 0, "12345", 2, S("12"))); + BOOST_TEST(testI(S(""), 0, "12345", 4, S("1234"))); + BOOST_TEST(testI(S(""), 0, "12345", 5, S("12345"))); + BOOST_TEST(testI(S(""), 0, "1234567890", 0, S(""))); + BOOST_TEST(testI(S(""), 0, "1234567890", 1, S("1"))); + BOOST_TEST(testI(S(""), 0, "1234567890", 5, S("12345"))); + BOOST_TEST(testI(S(""), 0, "1234567890", 9, S("123456789"))); + BOOST_TEST(testI(S(""), 0, "1234567890", 10, S("1234567890"))); + BOOST_TEST(testI(S(""), 0, "12345678901234567890", 0, S(""))); + BOOST_TEST(testI(S(""), 0, "12345678901234567890", 1, S("1"))); + BOOST_TEST(testI(S(""), 0, "12345678901234567890", 10, S("1234567890"))); + BOOST_TEST(testI(S(""), 0, "12345678901234567890", 19, S("1234567890123456789"))); + BOOST_TEST(testI(S(""), 0, "12345678901234567890", 20, S("12345678901234567890"))); + BOOST_TEST(testI(S(""), 1, "", 0, S("can't happen"))); + BOOST_TEST(testI(S(""), 1, "12345", 0, S("can't happen"))); + BOOST_TEST(testI(S(""), 1, "12345", 1, S("can't happen"))); + BOOST_TEST(testI(S(""), 1, "12345", 2, S("can't happen"))); + BOOST_TEST(testI(S(""), 1, "12345", 4, S("can't happen"))); + BOOST_TEST(testI(S(""), 1, "12345", 5, S("can't happen"))); + BOOST_TEST(testI(S(""), 1, "1234567890", 0, S("can't happen"))); + BOOST_TEST(testI(S(""), 1, "1234567890", 1, S("can't happen"))); + BOOST_TEST(testI(S(""), 1, "1234567890", 5, S("can't happen"))); + BOOST_TEST(testI(S(""), 1, "1234567890", 9, S("can't happen"))); + BOOST_TEST(testI(S(""), 1, "1234567890", 10, S("can't happen"))); + BOOST_TEST(testI(S(""), 1, "12345678901234567890", 0, S("can't happen"))); + BOOST_TEST(testI(S(""), 1, "12345678901234567890", 1, S("can't happen"))); + BOOST_TEST(testI(S(""), 1, "12345678901234567890", 10, S("can't happen"))); + BOOST_TEST(testI(S(""), 1, "12345678901234567890", 19, S("can't happen"))); + BOOST_TEST(testI(S(""), 1, "12345678901234567890", 20, S("can't happen"))); + BOOST_TEST(testI(S("abcde"), 0, "", 0, S("abcde"))); + BOOST_TEST(testI(S("abcde"), 0, "12345", 0, S("abcde"))); + BOOST_TEST(testI(S("abcde"), 0, "12345", 1, S("1abcde"))); + BOOST_TEST(testI(S("abcde"), 0, "12345", 2, S("12abcde"))); + BOOST_TEST(testI(S("abcde"), 0, "12345", 4, S("1234abcde"))); + BOOST_TEST(testI(S("abcde"), 0, "12345", 5, S("12345abcde"))); + BOOST_TEST(testI(S("abcde"), 0, "1234567890", 0, S("abcde"))); + BOOST_TEST(testI(S("abcde"), 0, "1234567890", 1, S("1abcde"))); + BOOST_TEST(testI(S("abcde"), 0, "1234567890", 5, S("12345abcde"))); + BOOST_TEST(testI(S("abcde"), 0, "1234567890", 9, S("123456789abcde"))); + BOOST_TEST(testI(S("abcde"), 0, "1234567890", 10, S("1234567890abcde"))); + BOOST_TEST(testI(S("abcde"), 0, "12345678901234567890", 0, S("abcde"))); + BOOST_TEST(testI(S("abcde"), 0, "12345678901234567890", 1, S("1abcde"))); + BOOST_TEST(testI(S("abcde"), 0, "12345678901234567890", 10, S("1234567890abcde"))); + BOOST_TEST(testI(S("abcde"), 0, "12345678901234567890", 19, S("1234567890123456789abcde"))); + BOOST_TEST(testI(S("abcde"), 0, "12345678901234567890", 20, S("12345678901234567890abcde"))); + BOOST_TEST(testI(S("abcde"), 1, "", 0, S("abcde"))); + BOOST_TEST(testI(S("abcde"), 1, "12345", 0, S("abcde"))); + BOOST_TEST(testI(S("abcde"), 1, "12345", 1, S("a1bcde"))); + BOOST_TEST(testI(S("abcde"), 1, "12345", 2, S("a12bcde"))); + BOOST_TEST(testI(S("abcde"), 1, "12345", 4, S("a1234bcde"))); + BOOST_TEST(testI(S("abcde"), 1, "12345", 5, S("a12345bcde"))); + BOOST_TEST(testI(S("abcde"), 1, "1234567890", 0, S("abcde"))); + BOOST_TEST(testI(S("abcde"), 1, "1234567890", 1, S("a1bcde"))); + BOOST_TEST(testI(S("abcde"), 1, "1234567890", 5, S("a12345bcde"))); + BOOST_TEST(testI(S("abcde"), 1, "1234567890", 9, S("a123456789bcde"))); + BOOST_TEST(testI(S("abcde"), 1, "1234567890", 10, S("a1234567890bcde"))); + BOOST_TEST(testI(S("abcde"), 1, "12345678901234567890", 0, S("abcde"))); + BOOST_TEST(testI(S("abcde"), 1, "12345678901234567890", 1, S("a1bcde"))); + BOOST_TEST(testI(S("abcde"), 1, "12345678901234567890", 10, S("a1234567890bcde"))); + BOOST_TEST(testI(S("abcde"), 1, "12345678901234567890", 19, S("a1234567890123456789bcde"))); + BOOST_TEST(testI(S("abcde"), 1, "12345678901234567890", 20, S("a12345678901234567890bcde"))); + BOOST_TEST(testI(S("abcde"), 2, "", 0, S("abcde"))); + BOOST_TEST(testI(S("abcde"), 2, "12345", 0, S("abcde"))); + BOOST_TEST(testI(S("abcde"), 2, "12345", 1, S("ab1cde"))); + BOOST_TEST(testI(S("abcde"), 2, "12345", 2, S("ab12cde"))); + BOOST_TEST(testI(S("abcde"), 2, "12345", 4, S("ab1234cde"))); + BOOST_TEST(testI(S("abcde"), 2, "12345", 5, S("ab12345cde"))); + BOOST_TEST(testI(S("abcde"), 2, "1234567890", 0, S("abcde"))); + BOOST_TEST(testI(S("abcde"), 2, "1234567890", 1, S("ab1cde"))); + BOOST_TEST(testI(S("abcde"), 2, "1234567890", 5, S("ab12345cde"))); + BOOST_TEST(testI(S("abcde"), 2, "1234567890", 9, S("ab123456789cde"))); + BOOST_TEST(testI(S("abcde"), 2, "1234567890", 10, S("ab1234567890cde"))); + BOOST_TEST(testI(S("abcde"), 2, "12345678901234567890", 0, S("abcde"))); + BOOST_TEST(testI(S("abcde"), 2, "12345678901234567890", 1, S("ab1cde"))); + BOOST_TEST(testI(S("abcde"), 2, "12345678901234567890", 10, S("ab1234567890cde"))); + BOOST_TEST(testI(S("abcde"), 2, "12345678901234567890", 19, S("ab1234567890123456789cde"))); + BOOST_TEST(testI(S("abcde"), 2, "12345678901234567890", 20, S("ab12345678901234567890cde"))); + BOOST_TEST(testI(S("abcde"), 4, "", 0, S("abcde"))); + BOOST_TEST(testI(S("abcde"), 4, "12345", 0, S("abcde"))); + BOOST_TEST(testI(S("abcde"), 4, "12345", 1, S("abcd1e"))); + BOOST_TEST(testI(S("abcde"), 4, "12345", 2, S("abcd12e"))); + BOOST_TEST(testI(S("abcde"), 4, "12345", 4, S("abcd1234e"))); + BOOST_TEST(testI(S("abcde"), 4, "12345", 5, S("abcd12345e"))); + BOOST_TEST(testI(S("abcde"), 4, "1234567890", 0, S("abcde"))); + BOOST_TEST(testI(S("abcde"), 4, "1234567890", 1, S("abcd1e"))); + BOOST_TEST(testI(S("abcde"), 4, "1234567890", 5, S("abcd12345e"))); + BOOST_TEST(testI(S("abcde"), 4, "1234567890", 9, S("abcd123456789e"))); + BOOST_TEST(testI(S("abcde"), 4, "1234567890", 10, S("abcd1234567890e"))); + BOOST_TEST(testI(S("abcde"), 4, "12345678901234567890", 0, S("abcde"))); + BOOST_TEST(testI(S("abcde"), 4, "12345678901234567890", 1, S("abcd1e"))); + BOOST_TEST(testI(S("abcde"), 4, "12345678901234567890", 10, S("abcd1234567890e"))); + BOOST_TEST(testI(S("abcde"), 4, "12345678901234567890", 19, S("abcd1234567890123456789e"))); + BOOST_TEST(testI(S("abcde"), 4, "12345678901234567890", 20, S("abcd12345678901234567890e"))); + BOOST_TEST(testI(S("abcde"), 5, "", 0, S("abcde"))); + BOOST_TEST(testI(S("abcde"), 5, "12345", 0, S("abcde"))); + BOOST_TEST(testI(S("abcde"), 5, "12345", 1, S("abcde1"))); + BOOST_TEST(testI(S("abcde"), 5, "12345", 2, S("abcde12"))); + BOOST_TEST(testI(S("abcde"), 5, "12345", 4, S("abcde1234"))); + BOOST_TEST(testI(S("abcde"), 5, "12345", 5, S("abcde12345"))); + BOOST_TEST(testI(S("abcde"), 5, "1234567890", 0, S("abcde"))); + BOOST_TEST(testI(S("abcde"), 5, "1234567890", 1, S("abcde1"))); + BOOST_TEST(testI(S("abcde"), 5, "1234567890", 5, S("abcde12345"))); + BOOST_TEST(testI(S("abcde"), 5, "1234567890", 9, S("abcde123456789"))); + BOOST_TEST(testI(S("abcde"), 5, "1234567890", 10, S("abcde1234567890"))); + BOOST_TEST(testI(S("abcde"), 5, "12345678901234567890", 0, S("abcde"))); + BOOST_TEST(testI(S("abcde"), 5, "12345678901234567890", 1, S("abcde1"))); + BOOST_TEST(testI(S("abcde"), 5, "12345678901234567890", 10, S("abcde1234567890"))); + BOOST_TEST(testI(S("abcde"), 5, "12345678901234567890", 19, S("abcde1234567890123456789"))); + BOOST_TEST(testI(S("abcde"), 5, "12345678901234567890", 20, S("abcde12345678901234567890"))); + BOOST_TEST(testI(S("abcde"), 6, "", 0, S("can't happen"))); + BOOST_TEST(testI(S("abcde"), 6, "12345", 0, S("can't happen"))); + BOOST_TEST(testI(S("abcde"), 6, "12345", 1, S("can't happen"))); + BOOST_TEST(testI(S("abcde"), 6, "12345", 2, S("can't happen"))); + BOOST_TEST(testI(S("abcde"), 6, "12345", 4, S("can't happen"))); + BOOST_TEST(testI(S("abcde"), 6, "12345", 5, S("can't happen"))); + BOOST_TEST(testI(S("abcde"), 6, "1234567890", 0, S("can't happen"))); + BOOST_TEST(testI(S("abcde"), 6, "1234567890", 1, S("can't happen"))); + BOOST_TEST(testI(S("abcde"), 6, "1234567890", 5, S("can't happen"))); + BOOST_TEST(testI(S("abcde"), 6, "1234567890", 9, S("can't happen"))); + BOOST_TEST(testI(S("abcde"), 6, "1234567890", 10, S("can't happen"))); + BOOST_TEST(testI(S("abcde"), 6, "12345678901234567890", 0, S("can't happen"))); + BOOST_TEST(testI(S("abcde"), 6, "12345678901234567890", 1, S("can't happen"))); + BOOST_TEST(testI(S("abcde"), 6, "12345678901234567890", 10, S("can't happen"))); + BOOST_TEST(testI(S("abcde"), 6, "12345678901234567890", 19, S("can't happen"))); + BOOST_TEST(testI(S("abcde"), 6, "12345678901234567890", 20, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghij"), 0, "", 0, S("abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 0, "12345", 0, S("abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 0, "12345", 1, S("1abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 0, "12345", 2, S("12abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 0, "12345", 4, S("1234abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 0, "12345", 5, S("12345abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 0, "1234567890", 0, S("abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 0, "1234567890", 1, S("1abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 0, "1234567890", 5, S("12345abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 0, "1234567890", 9, S("123456789abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 0, "1234567890", 10, S("1234567890abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 0, "12345678901234567890", 0, S("abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 0, "12345678901234567890", 1, S("1abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 0, "12345678901234567890", 10, S("1234567890abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 0, "12345678901234567890", 19, S("1234567890123456789abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 0, "12345678901234567890", 20, S("12345678901234567890abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 1, "", 0, S("abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 1, "12345", 0, S("abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 1, "12345", 1, S("a1bcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 1, "12345", 2, S("a12bcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 1, "12345", 4, S("a1234bcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 1, "12345", 5, S("a12345bcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 1, "1234567890", 0, S("abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 1, "1234567890", 1, S("a1bcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 1, "1234567890", 5, S("a12345bcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 1, "1234567890", 9, S("a123456789bcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 1, "1234567890", 10, S("a1234567890bcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 1, "12345678901234567890", 0, S("abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 1, "12345678901234567890", 1, S("a1bcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 1, "12345678901234567890", 10, S("a1234567890bcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 1, "12345678901234567890", 19, S("a1234567890123456789bcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 1, "12345678901234567890", 20, S("a12345678901234567890bcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 5, "", 0, S("abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 5, "12345", 0, S("abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 5, "12345", 1, S("abcde1fghij"))); + BOOST_TEST(testI(S("abcdefghij"), 5, "12345", 2, S("abcde12fghij"))); + BOOST_TEST(testI(S("abcdefghij"), 5, "12345", 4, S("abcde1234fghij"))); + BOOST_TEST(testI(S("abcdefghij"), 5, "12345", 5, S("abcde12345fghij"))); + BOOST_TEST(testI(S("abcdefghij"), 5, "1234567890", 0, S("abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 5, "1234567890", 1, S("abcde1fghij"))); + BOOST_TEST(testI(S("abcdefghij"), 5, "1234567890", 5, S("abcde12345fghij"))); + BOOST_TEST(testI(S("abcdefghij"), 5, "1234567890", 9, S("abcde123456789fghij"))); + BOOST_TEST(testI(S("abcdefghij"), 5, "1234567890", 10, S("abcde1234567890fghij"))); + BOOST_TEST(testI(S("abcdefghij"), 5, "12345678901234567890", 0, S("abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 5, "12345678901234567890", 1, S("abcde1fghij"))); + BOOST_TEST(testI(S("abcdefghij"), 5, "12345678901234567890", 10, S("abcde1234567890fghij"))); + BOOST_TEST(testI(S("abcdefghij"), 5, "12345678901234567890", 19, S("abcde1234567890123456789fghij"))); + BOOST_TEST(testI(S("abcdefghij"), 5, "12345678901234567890", 20, S("abcde12345678901234567890fghij"))); + BOOST_TEST(testI(S("abcdefghij"), 9, "", 0, S("abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 9, "12345", 0, S("abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 9, "12345", 1, S("abcdefghi1j"))); + BOOST_TEST(testI(S("abcdefghij"), 9, "12345", 2, S("abcdefghi12j"))); + BOOST_TEST(testI(S("abcdefghij"), 9, "12345", 4, S("abcdefghi1234j"))); + BOOST_TEST(testI(S("abcdefghij"), 9, "12345", 5, S("abcdefghi12345j"))); + BOOST_TEST(testI(S("abcdefghij"), 9, "1234567890", 0, S("abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 9, "1234567890", 1, S("abcdefghi1j"))); + BOOST_TEST(testI(S("abcdefghij"), 9, "1234567890", 5, S("abcdefghi12345j"))); + BOOST_TEST(testI(S("abcdefghij"), 9, "1234567890", 9, S("abcdefghi123456789j"))); + BOOST_TEST(testI(S("abcdefghij"), 9, "1234567890", 10, S("abcdefghi1234567890j"))); + BOOST_TEST(testI(S("abcdefghij"), 9, "12345678901234567890", 0, S("abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 9, "12345678901234567890", 1, S("abcdefghi1j"))); + BOOST_TEST(testI(S("abcdefghij"), 9, "12345678901234567890", 10, S("abcdefghi1234567890j"))); + BOOST_TEST(testI(S("abcdefghij"), 9, "12345678901234567890", 19, S("abcdefghi1234567890123456789j"))); + BOOST_TEST(testI(S("abcdefghij"), 9, "12345678901234567890", 20, S("abcdefghi12345678901234567890j"))); + BOOST_TEST(testI(S("abcdefghij"), 10, "", 0, S("abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 10, "12345", 0, S("abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 10, "12345", 1, S("abcdefghij1"))); + BOOST_TEST(testI(S("abcdefghij"), 10, "12345", 2, S("abcdefghij12"))); + BOOST_TEST(testI(S("abcdefghij"), 10, "12345", 4, S("abcdefghij1234"))); + BOOST_TEST(testI(S("abcdefghij"), 10, "12345", 5, S("abcdefghij12345"))); + BOOST_TEST(testI(S("abcdefghij"), 10, "1234567890", 0, S("abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 10, "1234567890", 1, S("abcdefghij1"))); + BOOST_TEST(testI(S("abcdefghij"), 10, "1234567890", 5, S("abcdefghij12345"))); + BOOST_TEST(testI(S("abcdefghij"), 10, "1234567890", 9, S("abcdefghij123456789"))); + BOOST_TEST(testI(S("abcdefghij"), 10, "1234567890", 10, S("abcdefghij1234567890"))); + BOOST_TEST(testI(S("abcdefghij"), 10, "12345678901234567890", 0, S("abcdefghij"))); + BOOST_TEST(testI(S("abcdefghij"), 10, "12345678901234567890", 1, S("abcdefghij1"))); + BOOST_TEST(testI(S("abcdefghij"), 10, "12345678901234567890", 10, S("abcdefghij1234567890"))); + BOOST_TEST(testI(S("abcdefghij"), 10, "12345678901234567890", 19, S("abcdefghij1234567890123456789"))); + BOOST_TEST(testI(S("abcdefghij"), 10, "12345678901234567890", 20, S("abcdefghij12345678901234567890"))); + BOOST_TEST(testI(S("abcdefghij"), 11, "", 0, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghij"), 11, "12345", 0, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghij"), 11, "12345", 1, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghij"), 11, "12345", 2, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghij"), 11, "12345", 4, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghij"), 11, "12345", 5, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghij"), 11, "1234567890", 0, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghij"), 11, "1234567890", 1, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghij"), 11, "1234567890", 5, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghij"), 11, "1234567890", 9, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghij"), 11, "1234567890", 10, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghij"), 11, "12345678901234567890", 0, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghij"), 11, "12345678901234567890", 1, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghij"), 11, "12345678901234567890", 10, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghij"), 11, "12345678901234567890", 19, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghij"), 11, "12345678901234567890", 20, S("can't happen"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "12345", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "12345", 1, S("1abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "12345", 2, S("12abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "12345", 4, S("1234abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "12345", 5, S("12345abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "1234567890", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "1234567890", 1, S("1abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "1234567890", 5, S("12345abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "1234567890", 9, S("123456789abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "1234567890", 10, S("1234567890abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "12345678901234567890", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "12345678901234567890", 1, S("1abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "12345678901234567890", 10, S("1234567890abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "12345678901234567890", 19, S("1234567890123456789abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 0, "12345678901234567890", 20, S("12345678901234567890abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "12345", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "12345", 1, S("a1bcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "12345", 2, S("a12bcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "12345", 4, S("a1234bcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "12345", 5, S("a12345bcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "1234567890", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "1234567890", 1, S("a1bcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "1234567890", 5, S("a12345bcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "1234567890", 9, S("a123456789bcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "1234567890", 10, S("a1234567890bcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "12345678901234567890", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "12345678901234567890", 1, S("a1bcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "12345678901234567890", 10, S("a1234567890bcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "12345678901234567890", 19, S("a1234567890123456789bcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 1, "12345678901234567890", 20, S("a12345678901234567890bcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "12345", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "12345", 1, S("abcdefghij1klmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "12345", 2, S("abcdefghij12klmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "12345", 4, S("abcdefghij1234klmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "12345", 5, S("abcdefghij12345klmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "1234567890", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "1234567890", 1, S("abcdefghij1klmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "1234567890", 5, S("abcdefghij12345klmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "1234567890", 9, S("abcdefghij123456789klmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "1234567890", 10, S("abcdefghij1234567890klmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "12345678901234567890", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "12345678901234567890", 1, S("abcdefghij1klmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "12345678901234567890", 10, S("abcdefghij1234567890klmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "12345678901234567890", 19, S("abcdefghij1234567890123456789klmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 10, "12345678901234567890", 20, S("abcdefghij12345678901234567890klmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "12345", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "12345", 1, S("abcdefghijklmnopqrs1t"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "12345", 2, S("abcdefghijklmnopqrs12t"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "12345", 4, S("abcdefghijklmnopqrs1234t"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "12345", 5, S("abcdefghijklmnopqrs12345t"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "1234567890", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "1234567890", 1, S("abcdefghijklmnopqrs1t"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "1234567890", 5, S("abcdefghijklmnopqrs12345t"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "1234567890", 9, S("abcdefghijklmnopqrs123456789t"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "1234567890", 10, S("abcdefghijklmnopqrs1234567890t"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "12345678901234567890", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "12345678901234567890", 1, S("abcdefghijklmnopqrs1t"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "12345678901234567890", 10, S("abcdefghijklmnopqrs1234567890t"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "12345678901234567890", 19, S("abcdefghijklmnopqrs1234567890123456789t"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 19, "12345678901234567890", 20, S("abcdefghijklmnopqrs12345678901234567890t"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "12345", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "12345", 1, S("abcdefghijklmnopqrst1"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "12345", 2, S("abcdefghijklmnopqrst12"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "12345", 4, S("abcdefghijklmnopqrst1234"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "12345", 5, S("abcdefghijklmnopqrst12345"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "1234567890", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "1234567890", 1, S("abcdefghijklmnopqrst1"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "1234567890", 5, S("abcdefghijklmnopqrst12345"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "1234567890", 9, S("abcdefghijklmnopqrst123456789"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "1234567890", 10, S("abcdefghijklmnopqrst1234567890"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "12345678901234567890", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "12345678901234567890", 1, S("abcdefghijklmnopqrst1"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "12345678901234567890", 10, S("abcdefghijklmnopqrst1234567890"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "12345678901234567890", 19, S("abcdefghijklmnopqrst1234567890123456789"))); + BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 20, "12345678901234567890", 20, S("abcdefghijklmnopqrst12345678901234567890"))); } static @@ -1473,6 +2152,8 @@ testGeneral() } } + + void testToStaticString() { @@ -1494,6 +2175,2947 @@ testToStaticString() BOOST_TEST(to_fixed_string(0xffffffff) == "4294967295"); } +template +bool +testF(const S& s, const typename S::value_type* str, typename S::size_type pos, + typename S::size_type n, typename S::size_type x) +{ + return s.find(str, pos, n) == x; +} + +template +bool +testRF(const S& s, const typename S::value_type* str, typename S::size_type pos, + typename S::size_type n, typename S::size_type x) +{ + return s.rfind(str, pos, n) == x; +} + +template +bool +testFF(const S& s, const typename S::value_type* str, typename S::size_type pos, + typename S::size_type n, typename S::size_type x) +{ + return s.find_first_of(str, pos, n) == x; +} + +template +bool +testFL(const S& s, const typename S::value_type* str, typename S::size_type pos, + typename S::size_type n, typename S::size_type x) +{ + return s.find_last_of(str, pos, n) == x; +} + +template +bool +testFFN(const S& s, const typename S::value_type* str, typename S::size_type pos, + typename S::size_type n, typename S::size_type x) +{ + return s.find_first_not_of(str, pos, n) == x; +} + +template +bool +testFLN(const S& s, const typename S::value_type* str, typename S::size_type pos, + typename S::size_type n, typename S::size_type x) +{ + return s.find_last_not_of(str, pos, n) == x; +} + +void +testFind() +{ + const char* cs1 = "12345"; + const char* cs2 = "2345"; + string_view v1 = cs1; + string_view v2 = cs2; + fixed_string<5> fs1 = cs1; + fixed_string<4> fs2 = cs2; + using S = fixed_string<400>; + + + // find + BOOST_TEST(fs1.find(v1) == 0); + BOOST_TEST(fs1.find(v2) == 1); + BOOST_TEST(fs1.find(fs1) == 0); + BOOST_TEST(fs1.find(fs2) == 1); + + BOOST_TEST(fs1.find(cs1) == 0); + BOOST_TEST(fs1.find(cs2) == 1); + + BOOST_TEST(fs1.find(cs1, 0) == 0); + BOOST_TEST(fs1.find(cs2, 0) == 1); + + BOOST_TEST(fs1.find(cs2, 0, 2) == 1); + + BOOST_TEST(fs1.find(cs1, 4) == -1); + BOOST_TEST(fs1.find(cs2, 4) == -1); + + BOOST_TEST(fs1.find('1') == 0); + BOOST_TEST(fs1.find('1', 4) == -1); + + BOOST_TEST(testF(S(""), "", 0, 0, 0)); + BOOST_TEST(testF(S(""), "abcde", 0, 0, 0)); + BOOST_TEST(testF(S(""), "abcde", 0, 1, S::npos)); + BOOST_TEST(testF(S(""), "abcde", 0, 2, S::npos)); + BOOST_TEST(testF(S(""), "abcde", 0, 4, S::npos)); + BOOST_TEST(testF(S(""), "abcde", 0, 5, S::npos)); + BOOST_TEST(testF(S(""), "abcdeabcde", 0, 0, 0)); + BOOST_TEST(testF(S(""), "abcdeabcde", 0, 1, S::npos)); + BOOST_TEST(testF(S(""), "abcdeabcde", 0, 5, S::npos)); + BOOST_TEST(testF(S(""), "abcdeabcde", 0, 9, S::npos)); + BOOST_TEST(testF(S(""), "abcdeabcde", 0, 10, S::npos)); + BOOST_TEST(testF(S(""), "abcdeabcdeabcdeabcde", 0, 0, 0)); + BOOST_TEST(testF(S(""), "abcdeabcdeabcdeabcde", 0, 1, S::npos)); + BOOST_TEST(testF(S(""), "abcdeabcdeabcdeabcde", 0, 10, S::npos)); + BOOST_TEST(testF(S(""), "abcdeabcdeabcdeabcde", 0, 19, S::npos)); + BOOST_TEST(testF(S(""), "abcdeabcdeabcdeabcde", 0, 20, S::npos)); + BOOST_TEST(testF(S(""), "", 1, 0, S::npos)); + BOOST_TEST(testF(S(""), "abcde", 1, 0, S::npos)); + BOOST_TEST(testF(S(""), "abcde", 1, 1, S::npos)); + BOOST_TEST(testF(S(""), "abcde", 1, 2, S::npos)); + BOOST_TEST(testF(S(""), "abcde", 1, 4, S::npos)); + BOOST_TEST(testF(S(""), "abcde", 1, 5, S::npos)); + BOOST_TEST(testF(S(""), "abcdeabcde", 1, 0, S::npos)); + BOOST_TEST(testF(S(""), "abcdeabcde", 1, 1, S::npos)); + BOOST_TEST(testF(S(""), "abcdeabcde", 1, 5, S::npos)); + BOOST_TEST(testF(S(""), "abcdeabcde", 1, 9, S::npos)); + BOOST_TEST(testF(S(""), "abcdeabcde", 1, 10, S::npos)); + BOOST_TEST(testF(S(""), "abcdeabcdeabcdeabcde", 1, 0, S::npos)); + BOOST_TEST(testF(S(""), "abcdeabcdeabcdeabcde", 1, 1, S::npos)); + BOOST_TEST(testF(S(""), "abcdeabcdeabcdeabcde", 1, 10, S::npos)); + BOOST_TEST(testF(S(""), "abcdeabcdeabcdeabcde", 1, 19, S::npos)); + BOOST_TEST(testF(S(""), "abcdeabcdeabcdeabcde", 1, 20, S::npos)); + BOOST_TEST(testF(S("abcde"), "", 0, 0, 0)); + BOOST_TEST(testF(S("abcde"), "abcde", 0, 0, 0)); + BOOST_TEST(testF(S("abcde"), "abcde", 0, 1, 0)); + BOOST_TEST(testF(S("abcde"), "abcde", 0, 2, 0)); + BOOST_TEST(testF(S("abcde"), "abcde", 0, 4, 0)); + BOOST_TEST(testF(S("abcde"), "abcde", 0, 5, 0)); + BOOST_TEST(testF(S("abcde"), "abcdeabcde", 0, 0, 0)); + BOOST_TEST(testF(S("abcde"), "abcdeabcde", 0, 1, 0)); + BOOST_TEST(testF(S("abcde"), "abcdeabcde", 0, 5, 0)); + BOOST_TEST(testF(S("abcde"), "abcdeabcde", 0, 9, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcde", 0, 10, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 0, 0, 0)); + BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 0, 1, 0)); + BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 0, 10, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 0, 19, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 0, 20, S::npos)); + BOOST_TEST(testF(S("abcde"), "", 1, 0, 1)); + BOOST_TEST(testF(S("abcde"), "abcde", 1, 0, 1)); + BOOST_TEST(testF(S("abcde"), "abcde", 1, 1, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcde", 1, 2, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcde", 1, 4, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcde", 1, 5, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcde", 1, 0, 1)); + BOOST_TEST(testF(S("abcde"), "abcdeabcde", 1, 1, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcde", 1, 5, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcde", 1, 9, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcde", 1, 10, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 1, 0, 1)); + BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 1, 1, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 1, 10, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 1, 19, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 1, 20, S::npos)); + BOOST_TEST(testF(S("abcde"), "", 2, 0, 2)); + BOOST_TEST(testF(S("abcde"), "abcde", 2, 0, 2)); + BOOST_TEST(testF(S("abcde"), "abcde", 2, 1, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcde", 2, 2, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcde", 2, 4, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcde", 2, 5, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcde", 2, 0, 2)); + BOOST_TEST(testF(S("abcde"), "abcdeabcde", 2, 1, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcde", 2, 5, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcde", 2, 9, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcde", 2, 10, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 2, 0, 2)); + BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 2, 1, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 2, 10, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 2, 19, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 2, 20, S::npos)); + BOOST_TEST(testF(S("abcde"), "", 4, 0, 4)); + BOOST_TEST(testF(S("abcde"), "abcde", 4, 0, 4)); + BOOST_TEST(testF(S("abcde"), "abcde", 4, 1, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcde", 4, 2, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcde", 4, 4, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcde", 4, 5, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcde", 4, 0, 4)); + BOOST_TEST(testF(S("abcde"), "abcdeabcde", 4, 1, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcde", 4, 5, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcde", 4, 9, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcde", 4, 10, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 4, 0, 4)); + BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 4, 1, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 4, 10, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 4, 19, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 4, 20, S::npos)); + BOOST_TEST(testF(S("abcde"), "", 5, 0, 5)); + BOOST_TEST(testF(S("abcde"), "abcde", 5, 0, 5)); + BOOST_TEST(testF(S("abcde"), "abcde", 5, 1, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcde", 5, 2, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcde", 5, 4, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcde", 5, 5, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcde", 5, 0, 5)); + BOOST_TEST(testF(S("abcde"), "abcdeabcde", 5, 1, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcde", 5, 5, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcde", 5, 9, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcde", 5, 10, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 5, 0, 5)); + BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 5, 1, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 5, 10, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 5, 19, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 5, 20, S::npos)); + BOOST_TEST(testF(S("abcde"), "", 6, 0, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcde", 6, 0, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcde", 6, 1, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcde", 6, 2, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcde", 6, 4, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcde", 6, 5, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcde", 6, 0, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcde", 6, 1, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcde", 6, 5, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcde", 6, 9, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcde", 6, 10, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 6, 0, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 6, 1, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 6, 10, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 6, 19, S::npos)); + BOOST_TEST(testF(S("abcde"), "abcdeabcdeabcdeabcde", 6, 20, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "", 0, 0, 0)); + BOOST_TEST(testF(S("abcdeabcde"), "abcde", 0, 0, 0)); + BOOST_TEST(testF(S("abcdeabcde"), "abcde", 0, 1, 0)); + BOOST_TEST(testF(S("abcdeabcde"), "abcde", 0, 2, 0)); + BOOST_TEST(testF(S("abcdeabcde"), "abcde", 0, 4, 0)); + BOOST_TEST(testF(S("abcdeabcde"), "abcde", 0, 5, 0)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 0, 0, 0)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 0, 1, 0)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 0, 5, 0)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 0, 9, 0)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 0, 10, 0)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 0, 0)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 1, 0)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 10, 0)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 19, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 20, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "", 1, 0, 1)); + BOOST_TEST(testF(S("abcdeabcde"), "abcde", 1, 0, 1)); + BOOST_TEST(testF(S("abcdeabcde"), "abcde", 1, 1, 5)); + BOOST_TEST(testF(S("abcdeabcde"), "abcde", 1, 2, 5)); + BOOST_TEST(testF(S("abcdeabcde"), "abcde", 1, 4, 5)); + BOOST_TEST(testF(S("abcdeabcde"), "abcde", 1, 5, 5)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 1, 0, 1)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 1, 1, 5)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 1, 5, 5)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 1, 9, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 1, 10, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 0, 1)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 1, 5)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 10, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 19, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 20, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "", 5, 0, 5)); + BOOST_TEST(testF(S("abcdeabcde"), "abcde", 5, 0, 5)); + BOOST_TEST(testF(S("abcdeabcde"), "abcde", 5, 1, 5)); + BOOST_TEST(testF(S("abcdeabcde"), "abcde", 5, 2, 5)); + BOOST_TEST(testF(S("abcdeabcde"), "abcde", 5, 4, 5)); + BOOST_TEST(testF(S("abcdeabcde"), "abcde", 5, 5, 5)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 5, 0, 5)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 5, 1, 5)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 5, 5, 5)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 5, 9, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 5, 10, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 0, 5)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 1, 5)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 10, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 19, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 20, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "", 9, 0, 9)); + BOOST_TEST(testF(S("abcdeabcde"), "abcde", 9, 0, 9)); + BOOST_TEST(testF(S("abcdeabcde"), "abcde", 9, 1, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcde", 9, 2, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcde", 9, 4, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcde", 9, 5, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 9, 0, 9)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 9, 1, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 9, 5, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 9, 9, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 9, 10, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 0, 9)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 1, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 10, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 19, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 20, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "", 10, 0, 10)); + BOOST_TEST(testF(S("abcdeabcde"), "abcde", 10, 0, 10)); + BOOST_TEST(testF(S("abcdeabcde"), "abcde", 10, 1, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcde", 10, 2, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcde", 10, 4, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcde", 10, 5, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 10, 0, 10)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 10, 1, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 10, 5, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 10, 9, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 10, 10, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 0, 10)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 1, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 10, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 19, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 20, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "", 11, 0, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcde", 11, 0, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcde", 11, 1, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcde", 11, 2, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcde", 11, 4, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcde", 11, 5, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 11, 0, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 11, 1, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 11, 5, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 11, 9, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcde", 11, 10, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 0, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 1, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 10, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 19, S::npos)); + BOOST_TEST(testF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 20, S::npos)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "", 0, 0, 0)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 0, 0, 0)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 0, 1, 0)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 0, 2, 0)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 0, 4, 0)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 0, 5, 0)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 0, 0)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 1, 0)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 5, 0)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 9, 0)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 10, 0)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 0, 0)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 1, 0)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 10, 0)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 19, 0)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 20, 0)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "", 1, 0, 1)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 1, 0, 1)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 1, 1, 5)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 1, 2, 5)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 1, 4, 5)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 1, 5, 5)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 0, 1)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 1, 5)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 5, 5)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 9, 5)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 10, 5)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 0, 1)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 1, 5)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 10, 5)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 19, S::npos)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 20, S::npos)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "", 10, 0, 10)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 10, 0, 10)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 10, 1, 10)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 10, 2, 10)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 10, 4, 10)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 10, 5, 10)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 0, 10)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 1, 10)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 5, 10)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 9, 10)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 10, 10)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 0, 10)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 1, 10)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 10, 10)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 19, S::npos)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 20, S::npos)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "", 19, 0, 19)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 19, 0, 19)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 19, 1, S::npos)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 19, 2, S::npos)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 19, 4, S::npos)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 19, 5, S::npos)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 0, 19)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 1, S::npos)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 5, S::npos)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 9, S::npos)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 10, S::npos)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 0, 19)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 1, S::npos)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 10, S::npos)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 19, S::npos)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 20, S::npos)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "", 20, 0, 20)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 20, 0, 20)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 20, 1, S::npos)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 20, 2, S::npos)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 20, 4, S::npos)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcde", 20, 5, S::npos)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 0, 20)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 1, S::npos)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 5, S::npos)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 9, S::npos)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 10, S::npos)); + BOOST_TEST(testF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 0, 20)); + + + + + + + + + + + + + + + + + + // rfind + + BOOST_TEST(fs1.rfind(v1) == 0); + BOOST_TEST(fs1.rfind(v2) == 1); + + BOOST_TEST(fs1.rfind(fs1) == 0); + BOOST_TEST(fs1.rfind(fs2) == 1); + + BOOST_TEST(fs1.rfind(cs1) == 0); + BOOST_TEST(fs1.rfind(cs2) == 1); + + BOOST_TEST(fs1.rfind(cs1, 0) == 0); + BOOST_TEST(fs1.rfind(cs2, 0) == -1); + + BOOST_TEST(fs1.rfind(cs2, 0, 2) == -1); + BOOST_TEST(fs1.rfind(cs1, 4) == 0); + + BOOST_TEST(fs1.rfind('1') == 0); + BOOST_TEST(fs1.rfind('1', 4) == 0); + + + BOOST_TEST(testRF(S(""), "", 0, 0, 0)); + BOOST_TEST(testRF(S(""), "abcde", 0, 0, 0)); + BOOST_TEST(testRF(S(""), "abcde", 0, 1, S::npos)); + BOOST_TEST(testRF(S(""), "abcde", 0, 2, S::npos)); + BOOST_TEST(testRF(S(""), "abcde", 0, 4, S::npos)); + BOOST_TEST(testRF(S(""), "abcde", 0, 5, S::npos)); + BOOST_TEST(testRF(S(""), "abcdeabcde", 0, 0, 0)); + BOOST_TEST(testRF(S(""), "abcdeabcde", 0, 1, S::npos)); + BOOST_TEST(testRF(S(""), "abcdeabcde", 0, 5, S::npos)); + BOOST_TEST(testRF(S(""), "abcdeabcde", 0, 9, S::npos)); + BOOST_TEST(testRF(S(""), "abcdeabcde", 0, 10, S::npos)); + BOOST_TEST(testRF(S(""), "abcdeabcdeabcdeabcde", 0, 0, 0)); + BOOST_TEST(testRF(S(""), "abcdeabcdeabcdeabcde", 0, 1, S::npos)); + BOOST_TEST(testRF(S(""), "abcdeabcdeabcdeabcde", 0, 10, S::npos)); + BOOST_TEST(testRF(S(""), "abcdeabcdeabcdeabcde", 0, 19, S::npos)); + BOOST_TEST(testRF(S(""), "abcdeabcdeabcdeabcde", 0, 20, S::npos)); + BOOST_TEST(testRF(S(""), "", 1, 0, 0)); + BOOST_TEST(testRF(S(""), "abcde", 1, 0, 0)); + BOOST_TEST(testRF(S(""), "abcde", 1, 1, S::npos)); + BOOST_TEST(testRF(S(""), "abcde", 1, 2, S::npos)); + BOOST_TEST(testRF(S(""), "abcde", 1, 4, S::npos)); + BOOST_TEST(testRF(S(""), "abcde", 1, 5, S::npos)); + BOOST_TEST(testRF(S(""), "abcdeabcde", 1, 0, 0)); + BOOST_TEST(testRF(S(""), "abcdeabcde", 1, 1, S::npos)); + BOOST_TEST(testRF(S(""), "abcdeabcde", 1, 5, S::npos)); + BOOST_TEST(testRF(S(""), "abcdeabcde", 1, 9, S::npos)); + BOOST_TEST(testRF(S(""), "abcdeabcde", 1, 10, S::npos)); + BOOST_TEST(testRF(S(""), "abcdeabcdeabcdeabcde", 1, 0, 0)); + BOOST_TEST(testRF(S(""), "abcdeabcdeabcdeabcde", 1, 1, S::npos)); + BOOST_TEST(testRF(S(""), "abcdeabcdeabcdeabcde", 1, 10, S::npos)); + BOOST_TEST(testRF(S(""), "abcdeabcdeabcdeabcde", 1, 19, S::npos)); + BOOST_TEST(testRF(S(""), "abcdeabcdeabcdeabcde", 1, 20, S::npos)); + BOOST_TEST(testRF(S("abcde"), "", 0, 0, 0)); + BOOST_TEST(testRF(S("abcde"), "abcde", 0, 0, 0)); + BOOST_TEST(testRF(S("abcde"), "abcde", 0, 1, 0)); + BOOST_TEST(testRF(S("abcde"), "abcde", 0, 2, 0)); + BOOST_TEST(testRF(S("abcde"), "abcde", 0, 4, 0)); + BOOST_TEST(testRF(S("abcde"), "abcde", 0, 5, 0)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 0, 0, 0)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 0, 1, 0)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 0, 5, 0)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 0, 9, S::npos)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 0, 10, S::npos)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 0, 0, 0)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 0, 1, 0)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 0, 10, S::npos)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 0, 19, S::npos)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 0, 20, S::npos)); + BOOST_TEST(testRF(S("abcde"), "", 1, 0, 1)); + BOOST_TEST(testRF(S("abcde"), "abcde", 1, 0, 1)); + BOOST_TEST(testRF(S("abcde"), "abcde", 1, 1, 0)); + BOOST_TEST(testRF(S("abcde"), "abcde", 1, 2, 0)); + BOOST_TEST(testRF(S("abcde"), "abcde", 1, 4, 0)); + BOOST_TEST(testRF(S("abcde"), "abcde", 1, 5, 0)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 1, 0, 1)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 1, 1, 0)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 1, 5, 0)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 1, 9, S::npos)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 1, 10, S::npos)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 1, 0, 1)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 1, 1, 0)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 1, 10, S::npos)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 1, 19, S::npos)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 1, 20, S::npos)); + BOOST_TEST(testRF(S("abcde"), "", 2, 0, 2)); + BOOST_TEST(testRF(S("abcde"), "abcde", 2, 0, 2)); + BOOST_TEST(testRF(S("abcde"), "abcde", 2, 1, 0)); + BOOST_TEST(testRF(S("abcde"), "abcde", 2, 2, 0)); + BOOST_TEST(testRF(S("abcde"), "abcde", 2, 4, 0)); + BOOST_TEST(testRF(S("abcde"), "abcde", 2, 5, 0)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 2, 0, 2)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 2, 1, 0)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 2, 5, 0)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 2, 9, S::npos)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 2, 10, S::npos)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 2, 0, 2)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 2, 1, 0)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 2, 10, S::npos)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 2, 19, S::npos)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 2, 20, S::npos)); + BOOST_TEST(testRF(S("abcde"), "", 4, 0, 4)); + BOOST_TEST(testRF(S("abcde"), "abcde", 4, 0, 4)); + BOOST_TEST(testRF(S("abcde"), "abcde", 4, 1, 0)); + BOOST_TEST(testRF(S("abcde"), "abcde", 4, 2, 0)); + BOOST_TEST(testRF(S("abcde"), "abcde", 4, 4, 0)); + BOOST_TEST(testRF(S("abcde"), "abcde", 4, 5, 0)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 4, 0, 4)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 4, 1, 0)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 4, 5, 0)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 4, 9, S::npos)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 4, 10, S::npos)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 4, 0, 4)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 4, 1, 0)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 4, 10, S::npos)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 4, 19, S::npos)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 4, 20, S::npos)); + BOOST_TEST(testRF(S("abcde"), "", 5, 0, 5)); + BOOST_TEST(testRF(S("abcde"), "abcde", 5, 0, 5)); + BOOST_TEST(testRF(S("abcde"), "abcde", 5, 1, 0)); + BOOST_TEST(testRF(S("abcde"), "abcde", 5, 2, 0)); + BOOST_TEST(testRF(S("abcde"), "abcde", 5, 4, 0)); + BOOST_TEST(testRF(S("abcde"), "abcde", 5, 5, 0)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 5, 0, 5)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 5, 1, 0)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 5, 5, 0)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 5, 9, S::npos)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 5, 10, S::npos)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 5, 0, 5)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 5, 1, 0)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 5, 10, S::npos)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 5, 19, S::npos)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 5, 20, S::npos)); + BOOST_TEST(testRF(S("abcde"), "", 6, 0, 5)); + BOOST_TEST(testRF(S("abcde"), "abcde", 6, 0, 5)); + BOOST_TEST(testRF(S("abcde"), "abcde", 6, 1, 0)); + BOOST_TEST(testRF(S("abcde"), "abcde", 6, 2, 0)); + BOOST_TEST(testRF(S("abcde"), "abcde", 6, 4, 0)); + BOOST_TEST(testRF(S("abcde"), "abcde", 6, 5, 0)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 6, 0, 5)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 6, 1, 0)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 6, 5, 0)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 6, 9, S::npos)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcde", 6, 10, S::npos)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 6, 0, 5)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 6, 1, 0)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 6, 10, S::npos)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 6, 19, S::npos)); + BOOST_TEST(testRF(S("abcde"), "abcdeabcdeabcdeabcde", 6, 20, S::npos)); + BOOST_TEST(testRF(S("abcdeabcde"), "", 0, 0, 0)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 0, 0, 0)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 0, 1, 0)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 0, 2, 0)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 0, 4, 0)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 0, 5, 0)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 0, 0, 0)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 0, 1, 0)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 0, 5, 0)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 0, 9, 0)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 0, 10, 0)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 0, 0)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 1, 0)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 10, 0)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 19, S::npos)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 20, S::npos)); + BOOST_TEST(testRF(S("abcdeabcde"), "", 1, 0, 1)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 1, 0, 1)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 1, 1, 0)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 1, 2, 0)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 1, 4, 0)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 1, 5, 0)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 1, 0, 1)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 1, 1, 0)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 1, 5, 0)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 1, 9, 0)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 1, 10, 0)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 0, 1)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 1, 0)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 10, 0)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 19, S::npos)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 20, S::npos)); + BOOST_TEST(testRF(S("abcdeabcde"), "", 5, 0, 5)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 5, 0, 5)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 5, 1, 5)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 5, 2, 5)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 5, 4, 5)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 5, 5, 5)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 5, 0, 5)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 5, 1, 5)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 5, 5, 5)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 5, 9, 0)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 5, 10, 0)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 0, 5)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 1, 5)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 10, 0)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 19, S::npos)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 20, S::npos)); + BOOST_TEST(testRF(S("abcdeabcde"), "", 9, 0, 9)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 9, 0, 9)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 9, 1, 5)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 9, 2, 5)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 9, 4, 5)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 9, 5, 5)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 9, 0, 9)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 9, 1, 5)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 9, 5, 5)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 9, 9, 0)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 9, 10, 0)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 0, 9)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 1, 5)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 10, 0)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 19, S::npos)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 20, S::npos)); + BOOST_TEST(testRF(S("abcdeabcde"), "", 10, 0, 10)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 10, 0, 10)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 10, 1, 5)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 10, 2, 5)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 10, 4, 5)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 10, 5, 5)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 10, 0, 10)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 10, 1, 5)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 10, 5, 5)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 10, 9, 0)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 10, 10, 0)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 0, 10)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 1, 5)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 10, 0)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 19, S::npos)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 20, S::npos)); + BOOST_TEST(testRF(S("abcdeabcde"), "", 11, 0, 10)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 11, 0, 10)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 11, 1, 5)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 11, 2, 5)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 11, 4, 5)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcde", 11, 5, 5)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 11, 0, 10)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 11, 1, 5)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 11, 5, 5)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 11, 9, 0)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcde", 11, 10, 0)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 0, 10)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 1, 5)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 10, 0)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 19, S::npos)); + BOOST_TEST(testRF(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 20, S::npos)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "", 0, 0, 0)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 0, 0, 0)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 0, 1, 0)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 0, 2, 0)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 0, 4, 0)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 0, 5, 0)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 0, 0)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 1, 0)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 5, 0)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 9, 0)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 10, 0)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 0, 0)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 1, 0)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 10, 0)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 19, 0)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 20, 0)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "", 1, 0, 1)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 1, 0, 1)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 1, 1, 0)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 1, 2, 0)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 1, 4, 0)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 1, 5, 0)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 0, 1)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 1, 0)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 5, 0)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 9, 0)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 10, 0)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 0, 1)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 1, 0)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 10, 0)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 19, 0)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 20, 0)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "", 10, 0, 10)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 10, 0, 10)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 10, 1, 10)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 10, 2, 10)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 10, 4, 10)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 10, 5, 10)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 0, 10)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 1, 10)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 5, 10)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 9, 10)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 10, 10)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 0, 10)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 1, 10)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 10, 10)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 19, 0)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 20, 0)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "", 19, 0, 19)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 19, 0, 19)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 19, 1, 15)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 19, 2, 15)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 19, 4, 15)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 19, 5, 15)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 0, 19)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 1, 15)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 5, 15)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 9, 10)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 10, 10)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 0, 19)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 1, 15)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 10, 10)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 19, 0)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 20, 0)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "", 20, 0, 20)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 20, 0, 20)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 20, 1, 15)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 20, 2, 15)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 20, 4, 15)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcde", 20, 5, 15)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 0, 20)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 1, 15)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 5, 15)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 9, 10)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 10, 10)); + BOOST_TEST(testRF(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 0, 20)); + + + + + + + + + + + // find_first_of + + BOOST_TEST(fs1.find_first_of(v1) == 0); + BOOST_TEST(fs1.find_first_of(v2) == 1); + BOOST_TEST(fs1.find_first_of(fs1) == 0); + BOOST_TEST(fs1.find_first_of(fs2) == 1); + + BOOST_TEST(fs1.find_first_of(cs1) == 0); + BOOST_TEST(fs1.find_first_of(cs2) == 1); + + BOOST_TEST(fs1.find_first_of(cs1, 0) == 0); + BOOST_TEST(fs1.find_first_of(cs2, 0) == 1); + + BOOST_TEST(fs1.find_first_of(cs2, 0, 2) == 1); + + BOOST_TEST(fs1.find_first_of(cs1, 4) == 4); + BOOST_TEST(fs1.find_first_of(cs2, 4) == 4); + + BOOST_TEST(fs1.find_first_of('1') == 0); + BOOST_TEST(fs1.find_first_of('1', 4) == -1); + + BOOST_TEST(testFF(S(""), "", 0, 0, S::npos)); + BOOST_TEST(testFF(S(""), "irkhs", 0, 0, S::npos)); + BOOST_TEST(testFF(S(""), "kante", 0, 1, S::npos)); + BOOST_TEST(testFF(S(""), "oknlr", 0, 2, S::npos)); + BOOST_TEST(testFF(S(""), "pcdro", 0, 4, S::npos)); + BOOST_TEST(testFF(S(""), "bnrpe", 0, 5, S::npos)); + BOOST_TEST(testFF(S(""), "jtdaefblso", 0, 0, S::npos)); + BOOST_TEST(testFF(S(""), "oselktgbca", 0, 1, S::npos)); + BOOST_TEST(testFF(S(""), "eqgaplhckj", 0, 5, S::npos)); + BOOST_TEST(testFF(S(""), "bjahtcmnlp", 0, 9, S::npos)); + BOOST_TEST(testFF(S(""), "hjlcmgpket", 0, 10, S::npos)); + BOOST_TEST(testFF(S(""), "htaobedqikfplcgjsmrn", 0, 0, S::npos)); + BOOST_TEST(testFF(S(""), "hpqiarojkcdlsgnmfetb", 0, 1, S::npos)); + BOOST_TEST(testFF(S(""), "dfkaprhjloqetcsimnbg", 0, 10, S::npos)); + BOOST_TEST(testFF(S(""), "ihqrfebgadntlpmjksoc", 0, 19, S::npos)); + BOOST_TEST(testFF(S(""), "ngtjfcalbseiqrphmkdo", 0, 20, S::npos)); + BOOST_TEST(testFF(S(""), "", 1, 0, S::npos)); + BOOST_TEST(testFF(S(""), "lbtqd", 1, 0, S::npos)); + BOOST_TEST(testFF(S(""), "tboim", 1, 1, S::npos)); + BOOST_TEST(testFF(S(""), "slcer", 1, 2, S::npos)); + BOOST_TEST(testFF(S(""), "cbjfs", 1, 4, S::npos)); + BOOST_TEST(testFF(S(""), "aqibs", 1, 5, S::npos)); + BOOST_TEST(testFF(S(""), "gtfblmqinc", 1, 0, S::npos)); + BOOST_TEST(testFF(S(""), "mkqpbtdalg", 1, 1, S::npos)); + BOOST_TEST(testFF(S(""), "kphatlimcd", 1, 5, S::npos)); + BOOST_TEST(testFF(S(""), "pblasqogic", 1, 9, S::npos)); + BOOST_TEST(testFF(S(""), "arosdhcfme", 1, 10, S::npos)); + BOOST_TEST(testFF(S(""), "blkhjeogicatqfnpdmsr", 1, 0, S::npos)); + BOOST_TEST(testFF(S(""), "bmhineprjcoadgstflqk", 1, 1, S::npos)); + BOOST_TEST(testFF(S(""), "djkqcmetslnghpbarfoi", 1, 10, S::npos)); + BOOST_TEST(testFF(S(""), "lgokshjtpbemarcdqnfi", 1, 19, S::npos)); + BOOST_TEST(testFF(S(""), "bqjhtkfepimcnsgrlado", 1, 20, S::npos)); + BOOST_TEST(testFF(S("eaint"), "", 0, 0, S::npos)); + BOOST_TEST(testFF(S("binja"), "gfsrt", 0, 0, S::npos)); + BOOST_TEST(testFF(S("latkm"), "pfsoc", 0, 1, S::npos)); + BOOST_TEST(testFF(S("lecfr"), "tpflm", 0, 2, S::npos)); + BOOST_TEST(testFF(S("eqkst"), "sgkec", 0, 4, 0)); + BOOST_TEST(testFF(S("cdafr"), "romds", 0, 5, 1)); + BOOST_TEST(testFF(S("prbhe"), "qhjistlgmr", 0, 0, S::npos)); + BOOST_TEST(testFF(S("lbisk"), "pedfirsglo", 0, 1, S::npos)); + BOOST_TEST(testFF(S("hrlpd"), "aqcoslgrmk", 0, 5, S::npos)); + BOOST_TEST(testFF(S("ehmja"), "dabckmepqj", 0, 9, 0)); + BOOST_TEST(testFF(S("mhqgd"), "pqscrjthli", 0, 10, 1)); + BOOST_TEST(testFF(S("tgklq"), "kfphdcsjqmobliagtren", 0, 0, S::npos)); + BOOST_TEST(testFF(S("bocjs"), "rokpefncljibsdhqtagm", 0, 1, S::npos)); + BOOST_TEST(testFF(S("grbsd"), "afionmkphlebtcjqsgrd", 0, 10, S::npos)); + BOOST_TEST(testFF(S("ofjqr"), "aenmqplidhkofrjbctsg", 0, 19, 0)); + BOOST_TEST(testFF(S("btlfi"), "osjmbtcadhiklegrpqnf", 0, 20, 0)); + BOOST_TEST(testFF(S("clrgb"), "", 1, 0, S::npos)); + BOOST_TEST(testFF(S("tjmek"), "osmia", 1, 0, S::npos)); + BOOST_TEST(testFF(S("bgstp"), "ckonl", 1, 1, S::npos)); + BOOST_TEST(testFF(S("hstrk"), "ilcaj", 1, 2, S::npos)); + BOOST_TEST(testFF(S("kmspj"), "lasiq", 1, 4, 2)); + BOOST_TEST(testFF(S("tjboh"), "kfqmr", 1, 5, S::npos)); + BOOST_TEST(testFF(S("ilbcj"), "klnitfaobg", 1, 0, S::npos)); + BOOST_TEST(testFF(S("jkngf"), "gjhmdlqikp", 1, 1, 3)); + BOOST_TEST(testFF(S("gfcql"), "skbgtahqej", 1, 5, S::npos)); + BOOST_TEST(testFF(S("dqtlg"), "bjsdgtlpkf", 1, 9, 2)); + BOOST_TEST(testFF(S("bthpg"), "bjgfmnlkio", 1, 10, 4)); + BOOST_TEST(testFF(S("dgsnq"), "lbhepotfsjdqigcnamkr", 1, 0, S::npos)); + BOOST_TEST(testFF(S("rmfhp"), "tebangckmpsrqdlfojhi", 1, 1, S::npos)); + BOOST_TEST(testFF(S("jfdam"), "joflqbdkhtegimscpanr", 1, 10, 1)); + BOOST_TEST(testFF(S("edapb"), "adpmcohetfbsrjinlqkg", 1, 19, 1)); + BOOST_TEST(testFF(S("brfsm"), "iacldqjpfnogbsrhmetk", 1, 20, 1)); + BOOST_TEST(testFF(S("ndrhl"), "", 2, 0, S::npos)); + BOOST_TEST(testFF(S("mrecp"), "otkgb", 2, 0, S::npos)); + BOOST_TEST(testFF(S("qlasf"), "cqsjl", 2, 1, S::npos)); + BOOST_TEST(testFF(S("smaqd"), "dpifl", 2, 2, 4)); + BOOST_TEST(testFF(S("hjeni"), "oapht", 2, 4, S::npos)); + BOOST_TEST(testFF(S("ocmfj"), "cifts", 2, 5, 3)); + BOOST_TEST(testFF(S("hmftq"), "nmsckbgalo", 2, 0, S::npos)); + BOOST_TEST(testFF(S("fklad"), "tpksqhamle", 2, 1, S::npos)); + BOOST_TEST(testFF(S("dirnm"), "tpdrchmkji", 2, 5, 2)); + BOOST_TEST(testFF(S("hrgdc"), "ijagfkblst", 2, 9, 2)); + BOOST_TEST(testFF(S("ifakg"), "kpocsignjb", 2, 10, 3)); + BOOST_TEST(testFF(S("ebrgd"), "pecqtkjsnbdrialgmohf", 2, 0, S::npos)); + BOOST_TEST(testFF(S("rcjml"), "aiortphfcmkjebgsndql", 2, 1, S::npos)); + BOOST_TEST(testFF(S("peqmt"), "sdbkeamglhipojqftrcn", 2, 10, 3)); + BOOST_TEST(testFF(S("frehn"), "ljqncehgmfktroapidbs", 2, 19, 2)); + BOOST_TEST(testFF(S("tqolf"), "rtcfodilamkbenjghqps", 2, 20, 2)); + BOOST_TEST(testFF(S("cjgao"), "", 4, 0, S::npos)); + BOOST_TEST(testFF(S("kjplq"), "mabns", 4, 0, S::npos)); + BOOST_TEST(testFF(S("herni"), "bdnrp", 4, 1, S::npos)); + BOOST_TEST(testFF(S("tadrb"), "scidp", 4, 2, S::npos)); + BOOST_TEST(testFF(S("pkfeo"), "agbjl", 4, 4, S::npos)); + BOOST_TEST(testFF(S("hoser"), "jfmpr", 4, 5, 4)); + BOOST_TEST(testFF(S("kgrsp"), "rbpefghsmj", 4, 0, S::npos)); + BOOST_TEST(testFF(S("pgejb"), "apsfntdoqc", 4, 1, S::npos)); + BOOST_TEST(testFF(S("thlnq"), "ndkjeisgcl", 4, 5, S::npos)); + BOOST_TEST(testFF(S("nbmit"), "rnfpqatdeo", 4, 9, 4)); + BOOST_TEST(testFF(S("jgmib"), "bntjlqrfik", 4, 10, 4)); + BOOST_TEST(testFF(S("ncrfj"), "kcrtmpolnaqejghsfdbi", 4, 0, S::npos)); + BOOST_TEST(testFF(S("ncsik"), "lobheanpkmqidsrtcfgj", 4, 1, S::npos)); + BOOST_TEST(testFF(S("sgbfh"), "athdkljcnreqbgpmisof", 4, 10, 4)); + BOOST_TEST(testFF(S("dktbn"), "qkdmjialrscpbhefgont", 4, 19, 4)); + BOOST_TEST(testFF(S("fthqm"), "dmasojntqleribkgfchp", 4, 20, 4)); + BOOST_TEST(testFF(S("klopi"), "", 5, 0, S::npos)); + BOOST_TEST(testFF(S("dajhn"), "psthd", 5, 0, S::npos)); + BOOST_TEST(testFF(S("jbgno"), "rpmjd", 5, 1, S::npos)); + BOOST_TEST(testFF(S("hkjae"), "dfsmk", 5, 2, S::npos)); + BOOST_TEST(testFF(S("gbhqo"), "skqne", 5, 4, S::npos)); + BOOST_TEST(testFF(S("ktdor"), "kipnf", 5, 5, S::npos)); + BOOST_TEST(testFF(S("ldprn"), "hmrnqdgifl", 5, 0, S::npos)); + BOOST_TEST(testFF(S("egmjk"), "fsmjcdairn", 5, 1, S::npos)); + BOOST_TEST(testFF(S("armql"), "pcdgltbrfj", 5, 5, S::npos)); + BOOST_TEST(testFF(S("cdhjo"), "aekfctpirg", 5, 9, S::npos)); + BOOST_TEST(testFF(S("jcons"), "ledihrsgpf", 5, 10, S::npos)); + BOOST_TEST(testFF(S("cbrkp"), "mqcklahsbtirgopefndj", 5, 0, S::npos)); + BOOST_TEST(testFF(S("fhgna"), "kmlthaoqgecrnpdbjfis", 5, 1, S::npos)); + BOOST_TEST(testFF(S("ejfcd"), "sfhbamcdptojlkrenqgi", 5, 10, S::npos)); + BOOST_TEST(testFF(S("kqjhe"), "pbniofmcedrkhlstgaqj", 5, 19, S::npos)); + BOOST_TEST(testFF(S("pbdjl"), "mongjratcskbhqiepfdl", 5, 20, S::npos)); + BOOST_TEST(testFF(S("gajqn"), "", 6, 0, S::npos)); + BOOST_TEST(testFF(S("stedk"), "hrnat", 6, 0, S::npos)); + BOOST_TEST(testFF(S("tjkaf"), "gsqdt", 6, 1, S::npos)); + BOOST_TEST(testFF(S("dthpe"), "bspkd", 6, 2, S::npos)); + BOOST_TEST(testFF(S("klhde"), "ohcmb", 6, 4, S::npos)); + BOOST_TEST(testFF(S("bhlki"), "heatr", 6, 5, S::npos)); + BOOST_TEST(testFF(S("lqmoh"), "pmblckedfn", 6, 0, S::npos)); + BOOST_TEST(testFF(S("mtqin"), "aceqmsrbik", 6, 1, S::npos)); + BOOST_TEST(testFF(S("dpqbr"), "lmbtdehjrn", 6, 5, S::npos)); + BOOST_TEST(testFF(S("kdhmo"), "teqmcrlgib", 6, 9, S::npos)); + BOOST_TEST(testFF(S("jblqp"), "njolbmspac", 6, 10, S::npos)); + BOOST_TEST(testFF(S("qmjgl"), "pofnhidklamecrbqjgst", 6, 0, S::npos)); + BOOST_TEST(testFF(S("rothp"), "jbhckmtgrqnosafedpli", 6, 1, S::npos)); + BOOST_TEST(testFF(S("ghknq"), "dobntpmqklicsahgjerf", 6, 10, S::npos)); + BOOST_TEST(testFF(S("eopfi"), "tpdshainjkbfoemlrgcq", 6, 19, S::npos)); + BOOST_TEST(testFF(S("dsnmg"), "oldpfgeakrnitscbjmqh", 6, 20, S::npos)); + BOOST_TEST(testFF(S("jnkrfhotgl"), "", 0, 0, S::npos)); + BOOST_TEST(testFF(S("dltjfngbko"), "rqegt", 0, 0, S::npos)); + BOOST_TEST(testFF(S("bmjlpkiqde"), "dashm", 0, 1, 8)); + BOOST_TEST(testFF(S("skrflobnqm"), "jqirk", 0, 2, 8)); + BOOST_TEST(testFF(S("jkpldtshrm"), "rckeg", 0, 4, 1)); + BOOST_TEST(testFF(S("ghasdbnjqo"), "jscie", 0, 5, 3)); + BOOST_TEST(testFF(S("igrkhpbqjt"), "efsphndliq", 0, 0, S::npos)); + BOOST_TEST(testFF(S("ikthdgcamf"), "gdicosleja", 0, 1, 5)); + BOOST_TEST(testFF(S("pcofgeniam"), "qcpjibosfl", 0, 5, 0)); + BOOST_TEST(testFF(S("rlfjgesqhc"), "lrhmefnjcq", 0, 9, 0)); + BOOST_TEST(testFF(S("itphbqsker"), "dtablcrseo", 0, 10, 1)); + BOOST_TEST(testFF(S("skjafcirqm"), "apckjsftedbhgomrnilq", 0, 0, S::npos)); + BOOST_TEST(testFF(S("tcqomarsfd"), "pcbrgflehjtiadnsokqm", 0, 1, S::npos)); + BOOST_TEST(testFF(S("rocfeldqpk"), "nsiadegjklhobrmtqcpf", 0, 10, 4)); + BOOST_TEST(testFF(S("cfpegndlkt"), "cpmajdqnolikhgsbretf", 0, 19, 0)); + BOOST_TEST(testFF(S("fqbtnkeasj"), "jcflkntmgiqrphdosaeb", 0, 20, 0)); + BOOST_TEST(testFF(S("shbcqnmoar"), "", 1, 0, S::npos)); + BOOST_TEST(testFF(S("bdoshlmfin"), "ontrs", 1, 0, S::npos)); + BOOST_TEST(testFF(S("khfrebnsgq"), "pfkna", 1, 1, S::npos)); + BOOST_TEST(testFF(S("getcrsaoji"), "ekosa", 1, 2, 1)); + BOOST_TEST(testFF(S("fjiknedcpq"), "anqhk", 1, 4, 4)); + BOOST_TEST(testFF(S("tkejgnafrm"), "jekca", 1, 5, 1)); + BOOST_TEST(testFF(S("jnakolqrde"), "ikemsjgacf", 1, 0, S::npos)); + BOOST_TEST(testFF(S("lcjptsmgbe"), "arolgsjkhm", 1, 1, S::npos)); + BOOST_TEST(testFF(S("itfsmcjorl"), "oftkbldhre", 1, 5, 1)); + BOOST_TEST(testFF(S("omchkfrjea"), "gbkqdoeftl", 1, 9, 4)); + BOOST_TEST(testFF(S("cigfqkated"), "sqcflrgtim", 1, 10, 1)); + BOOST_TEST(testFF(S("tscenjikml"), "fmhbkislrjdpanogqcet", 1, 0, S::npos)); + BOOST_TEST(testFF(S("qcpaemsinf"), "rnioadktqlgpbcjsmhef", 1, 1, S::npos)); + BOOST_TEST(testFF(S("gltkojeipd"), "oakgtnldpsefihqmjcbr", 1, 10, 1)); + BOOST_TEST(testFF(S("qistfrgnmp"), "gbnaelosidmcjqktfhpr", 1, 19, 1)); + BOOST_TEST(testFF(S("bdnpfcqaem"), "akbripjhlosndcmqgfet", 1, 20, 1)); + BOOST_TEST(testFF(S("ectnhskflp"), "", 5, 0, S::npos)); + BOOST_TEST(testFF(S("fgtianblpq"), "pijag", 5, 0, S::npos)); + BOOST_TEST(testFF(S("mfeqklirnh"), "jrckd", 5, 1, S::npos)); + BOOST_TEST(testFF(S("astedncjhk"), "qcloh", 5, 2, 6)); + BOOST_TEST(testFF(S("fhlqgcajbr"), "thlmp", 5, 4, S::npos)); + BOOST_TEST(testFF(S("epfhocmdng"), "qidmo", 5, 5, 6)); + BOOST_TEST(testFF(S("apcnsibger"), "lnegpsjqrd", 5, 0, S::npos)); + BOOST_TEST(testFF(S("aqkocrbign"), "rjqdablmfs", 5, 1, 5)); + BOOST_TEST(testFF(S("ijsmdtqgce"), "enkgpbsjaq", 5, 5, 7)); + BOOST_TEST(testFF(S("clobgsrken"), "kdsgoaijfh", 5, 9, 5)); + BOOST_TEST(testFF(S("jbhcfposld"), "trfqgmckbe", 5, 10, S::npos)); + BOOST_TEST(testFF(S("oqnpblhide"), "igetsracjfkdnpoblhqm", 5, 0, S::npos)); + BOOST_TEST(testFF(S("lroeasctif"), "nqctfaogirshlekbdjpm", 5, 1, S::npos)); + BOOST_TEST(testFF(S("bpjlgmiedh"), "csehfgomljdqinbartkp", 5, 10, 5)); + BOOST_TEST(testFF(S("pamkeoidrj"), "qahoegcmplkfsjbdnitr", 5, 19, 5)); + BOOST_TEST(testFF(S("espogqbthk"), "dpteiajrqmsognhlfbkc", 5, 20, 5)); + BOOST_TEST(testFF(S("shoiedtcjb"), "", 9, 0, S::npos)); + BOOST_TEST(testFF(S("ebcinjgads"), "tqbnh", 9, 0, S::npos)); + BOOST_TEST(testFF(S("dqmregkcfl"), "akmle", 9, 1, S::npos)); + BOOST_TEST(testFF(S("ngcrieqajf"), "iqfkm", 9, 2, S::npos)); + BOOST_TEST(testFF(S("qosmilgnjb"), "tqjsr", 9, 4, S::npos)); + BOOST_TEST(testFF(S("ikabsjtdfl"), "jplqg", 9, 5, 9)); + BOOST_TEST(testFF(S("ersmicafdh"), "oilnrbcgtj", 9, 0, S::npos)); + BOOST_TEST(testFF(S("fdnplotmgh"), "morkglpesn", 9, 1, S::npos)); + BOOST_TEST(testFF(S("fdbicojerm"), "dmicerngat", 9, 5, 9)); + BOOST_TEST(testFF(S("mbtafndjcq"), "radgeskbtc", 9, 9, S::npos)); + BOOST_TEST(testFF(S("mlenkpfdtc"), "ljikprsmqo", 9, 10, S::npos)); + BOOST_TEST(testFF(S("ahlcifdqgs"), "trqihkcgsjamfdbolnpe", 9, 0, S::npos)); + BOOST_TEST(testFF(S("bgjemaltks"), "lqmthbsrekajgnofcipd", 9, 1, S::npos)); + BOOST_TEST(testFF(S("pdhslbqrfc"), "jtalmedribkgqsopcnfh", 9, 10, S::npos)); + BOOST_TEST(testFF(S("dirhtsnjkc"), "spqfoiclmtagejbndkrh", 9, 19, 9)); + BOOST_TEST(testFF(S("dlroktbcja"), "nmotklspigjrdhcfaebq", 9, 20, 9)); + BOOST_TEST(testFF(S("ncjpmaekbs"), "", 10, 0, S::npos)); + BOOST_TEST(testFF(S("hlbosgmrak"), "hpmsd", 10, 0, S::npos)); + BOOST_TEST(testFF(S("pqfhsgilen"), "qnpor", 10, 1, S::npos)); + BOOST_TEST(testFF(S("gqtjsbdckh"), "otdma", 10, 2, S::npos)); + BOOST_TEST(testFF(S("cfkqpjlegi"), "efhjg", 10, 4, S::npos)); + BOOST_TEST(testFF(S("beanrfodgj"), "odpte", 10, 5, S::npos)); + BOOST_TEST(testFF(S("adtkqpbjfi"), "bctdgfmolr", 10, 0, S::npos)); + BOOST_TEST(testFF(S("iomkfthagj"), "oaklidrbqg", 10, 1, S::npos)); + BOOST_TEST(testFF(S("sdpcilonqj"), "dnjfsagktr", 10, 5, S::npos)); + BOOST_TEST(testFF(S("gtfbdkqeml"), "nejaktmiqg", 10, 9, S::npos)); + BOOST_TEST(testFF(S("bmeqgcdorj"), "pjqonlebsf", 10, 10, S::npos)); + BOOST_TEST(testFF(S("etqlcanmob"), "dshmnbtolcjepgaikfqr", 10, 0, S::npos)); + BOOST_TEST(testFF(S("roqmkbdtia"), "iogfhpabtjkqlrnemcds", 10, 1, S::npos)); + BOOST_TEST(testFF(S("kadsithljf"), "ngridfabjsecpqltkmoh", 10, 10, S::npos)); + BOOST_TEST(testFF(S("sgtkpbfdmh"), "athmknplcgofrqejsdib", 10, 19, S::npos)); + BOOST_TEST(testFF(S("qgmetnabkl"), "ldobhmqcafnjtkeisgrp", 10, 20, S::npos)); + BOOST_TEST(testFF(S("cqjohampgd"), "", 11, 0, S::npos)); + BOOST_TEST(testFF(S("hobitmpsan"), "aocjb", 11, 0, S::npos)); + BOOST_TEST(testFF(S("tjehkpsalm"), "jbrnk", 11, 1, S::npos)); + BOOST_TEST(testFF(S("ngfbojitcl"), "tqedg", 11, 2, S::npos)); + BOOST_TEST(testFF(S("rcfkdbhgjo"), "nqskp", 11, 4, S::npos)); + BOOST_TEST(testFF(S("qghptonrea"), "eaqkl", 11, 5, S::npos)); + BOOST_TEST(testFF(S("hnprfgqjdl"), "reaoicljqm", 11, 0, S::npos)); + BOOST_TEST(testFF(S("hlmgabenti"), "lsftgajqpm", 11, 1, S::npos)); + BOOST_TEST(testFF(S("ofcjanmrbs"), "rlpfogmits", 11, 5, S::npos)); + BOOST_TEST(testFF(S("jqedtkornm"), "shkncmiaqj", 11, 9, S::npos)); + BOOST_TEST(testFF(S("rfedlasjmg"), "fpnatrhqgs", 11, 10, S::npos)); + BOOST_TEST(testFF(S("talpqjsgkm"), "sjclemqhnpdbgikarfot", 11, 0, S::npos)); + BOOST_TEST(testFF(S("lrkcbtqpie"), "otcmedjikgsfnqbrhpla", 11, 1, S::npos)); + BOOST_TEST(testFF(S("cipogdskjf"), "bonsaefdqiprkhlgtjcm", 11, 10, S::npos)); + BOOST_TEST(testFF(S("nqedcojahi"), "egpscmahijlfnkrodqtb", 11, 19, S::npos)); + BOOST_TEST(testFF(S("hefnrkmctj"), "kmqbfepjthgilscrndoa", 11, 20, S::npos)); + BOOST_TEST(testFF(S("atqirnmekfjolhpdsgcb"), "", 0, 0, S::npos)); + BOOST_TEST(testFF(S("echfkmlpribjnqsaogtd"), "prboq", 0, 0, S::npos)); + BOOST_TEST(testFF(S("qnhiftdgcleajbpkrosm"), "fjcqh", 0, 1, 4)); + BOOST_TEST(testFF(S("chamfknorbedjitgslpq"), "fmosa", 0, 2, 3)); + BOOST_TEST(testFF(S("njhqpibfmtlkaecdrgso"), "qdbok", 0, 4, 3)); + BOOST_TEST(testFF(S("ebnghfsqkprmdcljoiat"), "amslg", 0, 5, 3)); + BOOST_TEST(testFF(S("letjomsgihfrpqbkancd"), "smpltjneqb", 0, 0, S::npos)); + BOOST_TEST(testFF(S("nblgoipcrqeaktshjdmf"), "flitskrnge", 0, 1, 19)); + BOOST_TEST(testFF(S("cehkbngtjoiflqapsmrd"), "pgqihmlbef", 0, 5, 2)); + BOOST_TEST(testFF(S("mignapfoklbhcqjetdrs"), "cfpdqjtgsb", 0, 9, 2)); + BOOST_TEST(testFF(S("ceatbhlsqjgpnokfrmdi"), "htpsiaflom", 0, 10, 2)); + BOOST_TEST(testFF(S("ocihkjgrdelpfnmastqb"), "kpjfiaceghsrdtlbnomq", 0, 0, S::npos)); + BOOST_TEST(testFF(S("noelgschdtbrjfmiqkap"), "qhtbomidljgafneksprc", 0, 1, 16)); + BOOST_TEST(testFF(S("dkclqfombepritjnghas"), "nhtjobkcefldimpsaqgr", 0, 10, 1)); + BOOST_TEST(testFF(S("miklnresdgbhqcojftap"), "prabcjfqnoeskilmtgdh", 0, 19, 0)); + BOOST_TEST(testFF(S("htbcigojaqmdkfrnlsep"), "dtrgmchilkasqoebfpjn", 0, 20, 0)); + BOOST_TEST(testFF(S("febhmqtjanokscdirpgl"), "", 1, 0, S::npos)); + BOOST_TEST(testFF(S("loakbsqjpcrdhftniegm"), "sqome", 1, 0, S::npos)); + BOOST_TEST(testFF(S("reagphsqflbitdcjmkno"), "smfte", 1, 1, 6)); + BOOST_TEST(testFF(S("jitlfrqemsdhkopncabg"), "ciboh", 1, 2, 1)); + BOOST_TEST(testFF(S("mhtaepscdnrjqgbkifol"), "haois", 1, 4, 1)); + BOOST_TEST(testFF(S("tocesrfmnglpbjihqadk"), "abfki", 1, 5, 6)); + BOOST_TEST(testFF(S("lpfmctjrhdagneskbqoi"), "frdkocntmq", 1, 0, S::npos)); + BOOST_TEST(testFF(S("lsmqaepkdhncirbtjfgo"), "oasbpedlnr", 1, 1, 19)); + BOOST_TEST(testFF(S("epoiqmtldrabnkjhcfsg"), "kltqmhgand", 1, 5, 4)); + BOOST_TEST(testFF(S("emgasrilpknqojhtbdcf"), "gdtfjchpmr", 1, 9, 1)); + BOOST_TEST(testFF(S("hnfiagdpcklrjetqbsom"), "ponmcqblet", 1, 10, 1)); + BOOST_TEST(testFF(S("nsdfebgajhmtricpoklq"), "sgphqdnofeiklatbcmjr", 1, 0, S::npos)); + BOOST_TEST(testFF(S("atjgfsdlpobmeiqhncrk"), "ljqprsmigtfoneadckbh", 1, 1, 7)); + BOOST_TEST(testFF(S("sitodfgnrejlahcbmqkp"), "ligeojhafnkmrcsqtbdp", 1, 10, 1)); + BOOST_TEST(testFF(S("fraghmbiceknltjpqosd"), "lsimqfnjarbopedkhcgt", 1, 19, 1)); + BOOST_TEST(testFF(S("pmafenlhqtdbkirjsogc"), "abedmfjlghniorcqptks", 1, 20, 1)); + BOOST_TEST(testFF(S("pihgmoeqtnakrjslcbfd"), "", 10, 0, S::npos)); + BOOST_TEST(testFF(S("gjdkeprctqblnhiafsom"), "hqtoa", 10, 0, S::npos)); + BOOST_TEST(testFF(S("mkpnblfdsahrcqijteog"), "cahif", 10, 1, 12)); + BOOST_TEST(testFF(S("gckarqnelodfjhmbptis"), "kehis", 10, 2, S::npos)); + BOOST_TEST(testFF(S("gqpskidtbclomahnrjfe"), "kdlmh", 10, 4, 10)); + BOOST_TEST(testFF(S("pkldjsqrfgitbhmaecno"), "paeql", 10, 5, 15)); + BOOST_TEST(testFF(S("aftsijrbeklnmcdqhgop"), "aghoqiefnb", 10, 0, S::npos)); + BOOST_TEST(testFF(S("mtlgdrhafjkbiepqnsoc"), "jrbqaikpdo", 10, 1, S::npos)); + BOOST_TEST(testFF(S("pqgirnaefthokdmbsclj"), "smjonaeqcl", 10, 5, 11)); + BOOST_TEST(testFF(S("kpdbgjmtherlsfcqoina"), "eqbdrkcfah", 10, 9, 10)); + BOOST_TEST(testFF(S("jrlbothiknqmdgcfasep"), "kapmsienhf", 10, 10, 11)); + BOOST_TEST(testFF(S("mjogldqferckabinptsh"), "jpqotrlenfcsbhkaimdg", 10, 0, S::npos)); + BOOST_TEST(testFF(S("apoklnefbhmgqcdrisjt"), "jlbmhnfgtcqprikeados", 10, 1, 18)); + BOOST_TEST(testFF(S("ifeopcnrjbhkdgatmqls"), "stgbhfmdaljnpqoicker", 10, 10, 10)); + BOOST_TEST(testFF(S("ckqhaiesmjdnrgolbtpf"), "oihcetflbjagdsrkmqpn", 10, 19, 10)); + BOOST_TEST(testFF(S("bnlgapfimcoterskqdjh"), "adtclebmnpjsrqfkigoh", 10, 20, 10)); + BOOST_TEST(testFF(S("kgdlrobpmjcthqsafeni"), "", 19, 0, S::npos)); + BOOST_TEST(testFF(S("dfkechomjapgnslbtqir"), "beafg", 19, 0, S::npos)); + BOOST_TEST(testFF(S("rloadknfbqtgmhcsipje"), "iclat", 19, 1, S::npos)); + BOOST_TEST(testFF(S("mgjhkolrnadqbpetcifs"), "rkhnf", 19, 2, S::npos)); + BOOST_TEST(testFF(S("cmlfakiojdrgtbsphqen"), "clshq", 19, 4, S::npos)); + BOOST_TEST(testFF(S("kghbfipeomsntdalrqjc"), "dtcoj", 19, 5, 19)); + BOOST_TEST(testFF(S("eldiqckrnmtasbghjfpo"), "rqosnjmfth", 19, 0, S::npos)); + BOOST_TEST(testFF(S("abqjcfedgotihlnspkrm"), "siatdfqglh", 19, 1, S::npos)); + BOOST_TEST(testFF(S("qfbadrtjsimkolcenhpg"), "mrlshtpgjq", 19, 5, S::npos)); + BOOST_TEST(testFF(S("abseghclkjqifmtodrnp"), "adlcskgqjt", 19, 9, S::npos)); + BOOST_TEST(testFF(S("ibmsnlrjefhtdokacqpg"), "drshcjknaf", 19, 10, S::npos)); + BOOST_TEST(testFF(S("mrkfciqjebaponsthldg"), "etsaqroinghpkjdlfcbm", 19, 0, S::npos)); + BOOST_TEST(testFF(S("mjkticdeoqshpalrfbgn"), "sgepdnkqliambtrocfhj", 19, 1, S::npos)); + BOOST_TEST(testFF(S("rqnoclbdejgiphtfsakm"), "nlmcjaqgbsortfdihkpe", 19, 10, 19)); + BOOST_TEST(testFF(S("plkqbhmtfaeodjcrsing"), "racfnpmosldibqkghjet", 19, 19, 19)); + BOOST_TEST(testFF(S("oegalhmstjrfickpbndq"), "fjhdsctkqeiolagrnmbp", 19, 20, 19)); + BOOST_TEST(testFF(S("rdtgjcaohpblniekmsfq"), "", 20, 0, S::npos)); + BOOST_TEST(testFF(S("ofkqbnjetrmsaidphglc"), "ejanp", 20, 0, S::npos)); + BOOST_TEST(testFF(S("grkpahljcftesdmonqib"), "odife", 20, 1, S::npos)); + BOOST_TEST(testFF(S("jimlgbhfqkteospardcn"), "okaqd", 20, 2, S::npos)); + BOOST_TEST(testFF(S("gftenihpmslrjkqadcob"), "lcdbi", 20, 4, S::npos)); + BOOST_TEST(testFF(S("bmhldogtckrfsanijepq"), "fsqbj", 20, 5, S::npos)); + BOOST_TEST(testFF(S("nfqkrpjdesabgtlcmoih"), "bigdomnplq", 20, 0, S::npos)); + BOOST_TEST(testFF(S("focalnrpiqmdkstehbjg"), "apiblotgcd", 20, 1, S::npos)); + BOOST_TEST(testFF(S("rhqdspkmebiflcotnjga"), "acfhdenops", 20, 5, S::npos)); + BOOST_TEST(testFF(S("rahdtmsckfboqlpniegj"), "jopdeamcrk", 20, 9, S::npos)); + BOOST_TEST(testFF(S("fbkeiopclstmdqranjhg"), "trqncbkgmh", 20, 10, S::npos)); + BOOST_TEST(testFF(S("lifhpdgmbconstjeqark"), "tomglrkencbsfjqpihda", 20, 0, S::npos)); + + + + + + + + + // find_last_of + + BOOST_TEST(fs1.find_last_of(v1) == 4); + BOOST_TEST(fs1.find_last_of(v2) == 4); + BOOST_TEST(fs1.find_last_of(fs1) == 4); + BOOST_TEST(fs1.find_last_of(fs2) == 4); + + BOOST_TEST(fs1.find_last_of(cs1) == 4); + BOOST_TEST(fs1.find_last_of(cs2) == 4); + + BOOST_TEST(fs1.find_last_of(cs1, 0) == 0); + BOOST_TEST(fs1.find_last_of(cs2, 0) == -1); + + BOOST_TEST(fs1.find_last_of(cs2, 0, 2) == -1); + + BOOST_TEST(fs1.find_last_of(cs1, 4) == 4); + BOOST_TEST(fs1.find_last_of(cs2, 4) == 4); + + BOOST_TEST(fs1.find_last_of('1') == 0); + BOOST_TEST(fs1.find_last_of('5', 3) == -1); + + BOOST_TEST(testFL(S(""), "", 0, 0, S::npos)); + BOOST_TEST(testFL(S(""), "irkhs", 0, 0, S::npos)); + BOOST_TEST(testFL(S(""), "kante", 0, 1, S::npos)); + BOOST_TEST(testFL(S(""), "oknlr", 0, 2, S::npos)); + BOOST_TEST(testFL(S(""), "pcdro", 0, 4, S::npos)); + BOOST_TEST(testFL(S(""), "bnrpe", 0, 5, S::npos)); + BOOST_TEST(testFL(S(""), "jtdaefblso", 0, 0, S::npos)); + BOOST_TEST(testFL(S(""), "oselktgbca", 0, 1, S::npos)); + BOOST_TEST(testFL(S(""), "eqgaplhckj", 0, 5, S::npos)); + BOOST_TEST(testFL(S(""), "bjahtcmnlp", 0, 9, S::npos)); + BOOST_TEST(testFL(S(""), "hjlcmgpket", 0, 10, S::npos)); + BOOST_TEST(testFL(S(""), "htaobedqikfplcgjsmrn", 0, 0, S::npos)); + BOOST_TEST(testFL(S(""), "hpqiarojkcdlsgnmfetb", 0, 1, S::npos)); + BOOST_TEST(testFL(S(""), "dfkaprhjloqetcsimnbg", 0, 10, S::npos)); + BOOST_TEST(testFL(S(""), "ihqrfebgadntlpmjksoc", 0, 19, S::npos)); + BOOST_TEST(testFL(S(""), "ngtjfcalbseiqrphmkdo", 0, 20, S::npos)); + BOOST_TEST(testFL(S(""), "", 1, 0, S::npos)); + BOOST_TEST(testFL(S(""), "lbtqd", 1, 0, S::npos)); + BOOST_TEST(testFL(S(""), "tboim", 1, 1, S::npos)); + BOOST_TEST(testFL(S(""), "slcer", 1, 2, S::npos)); + BOOST_TEST(testFL(S(""), "cbjfs", 1, 4, S::npos)); + BOOST_TEST(testFL(S(""), "aqibs", 1, 5, S::npos)); + BOOST_TEST(testFL(S(""), "gtfblmqinc", 1, 0, S::npos)); + BOOST_TEST(testFL(S(""), "mkqpbtdalg", 1, 1, S::npos)); + BOOST_TEST(testFL(S(""), "kphatlimcd", 1, 5, S::npos)); + BOOST_TEST(testFL(S(""), "pblasqogic", 1, 9, S::npos)); + BOOST_TEST(testFL(S(""), "arosdhcfme", 1, 10, S::npos)); + BOOST_TEST(testFL(S(""), "blkhjeogicatqfnpdmsr", 1, 0, S::npos)); + BOOST_TEST(testFL(S(""), "bmhineprjcoadgstflqk", 1, 1, S::npos)); + BOOST_TEST(testFL(S(""), "djkqcmetslnghpbarfoi", 1, 10, S::npos)); + BOOST_TEST(testFL(S(""), "lgokshjtpbemarcdqnfi", 1, 19, S::npos)); + BOOST_TEST(testFL(S(""), "bqjhtkfepimcnsgrlado", 1, 20, S::npos)); + BOOST_TEST(testFL(S("eaint"), "", 0, 0, S::npos)); + BOOST_TEST(testFL(S("binja"), "gfsrt", 0, 0, S::npos)); + BOOST_TEST(testFL(S("latkm"), "pfsoc", 0, 1, S::npos)); + BOOST_TEST(testFL(S("lecfr"), "tpflm", 0, 2, S::npos)); + BOOST_TEST(testFL(S("eqkst"), "sgkec", 0, 4, 0)); + BOOST_TEST(testFL(S("cdafr"), "romds", 0, 5, S::npos)); + BOOST_TEST(testFL(S("prbhe"), "qhjistlgmr", 0, 0, S::npos)); + BOOST_TEST(testFL(S("lbisk"), "pedfirsglo", 0, 1, S::npos)); + BOOST_TEST(testFL(S("hrlpd"), "aqcoslgrmk", 0, 5, S::npos)); + BOOST_TEST(testFL(S("ehmja"), "dabckmepqj", 0, 9, 0)); + BOOST_TEST(testFL(S("mhqgd"), "pqscrjthli", 0, 10, S::npos)); + BOOST_TEST(testFL(S("tgklq"), "kfphdcsjqmobliagtren", 0, 0, S::npos)); + BOOST_TEST(testFL(S("bocjs"), "rokpefncljibsdhqtagm", 0, 1, S::npos)); + BOOST_TEST(testFL(S("grbsd"), "afionmkphlebtcjqsgrd", 0, 10, S::npos)); + BOOST_TEST(testFL(S("ofjqr"), "aenmqplidhkofrjbctsg", 0, 19, 0)); + BOOST_TEST(testFL(S("btlfi"), "osjmbtcadhiklegrpqnf", 0, 20, 0)); + BOOST_TEST(testFL(S("clrgb"), "", 1, 0, S::npos)); + BOOST_TEST(testFL(S("tjmek"), "osmia", 1, 0, S::npos)); + BOOST_TEST(testFL(S("bgstp"), "ckonl", 1, 1, S::npos)); + BOOST_TEST(testFL(S("hstrk"), "ilcaj", 1, 2, S::npos)); + BOOST_TEST(testFL(S("kmspj"), "lasiq", 1, 4, S::npos)); + BOOST_TEST(testFL(S("tjboh"), "kfqmr", 1, 5, S::npos)); + BOOST_TEST(testFL(S("ilbcj"), "klnitfaobg", 1, 0, S::npos)); + BOOST_TEST(testFL(S("jkngf"), "gjhmdlqikp", 1, 1, S::npos)); + BOOST_TEST(testFL(S("gfcql"), "skbgtahqej", 1, 5, 0)); + BOOST_TEST(testFL(S("dqtlg"), "bjsdgtlpkf", 1, 9, 0)); + BOOST_TEST(testFL(S("bthpg"), "bjgfmnlkio", 1, 10, 0)); + BOOST_TEST(testFL(S("dgsnq"), "lbhepotfsjdqigcnamkr", 1, 0, S::npos)); + BOOST_TEST(testFL(S("rmfhp"), "tebangckmpsrqdlfojhi", 1, 1, S::npos)); + BOOST_TEST(testFL(S("jfdam"), "joflqbdkhtegimscpanr", 1, 10, 1)); + BOOST_TEST(testFL(S("edapb"), "adpmcohetfbsrjinlqkg", 1, 19, 1)); + BOOST_TEST(testFL(S("brfsm"), "iacldqjpfnogbsrhmetk", 1, 20, 1)); + BOOST_TEST(testFL(S("ndrhl"), "", 2, 0, S::npos)); + BOOST_TEST(testFL(S("mrecp"), "otkgb", 2, 0, S::npos)); + BOOST_TEST(testFL(S("qlasf"), "cqsjl", 2, 1, S::npos)); + BOOST_TEST(testFL(S("smaqd"), "dpifl", 2, 2, S::npos)); + BOOST_TEST(testFL(S("hjeni"), "oapht", 2, 4, 0)); + BOOST_TEST(testFL(S("ocmfj"), "cifts", 2, 5, 1)); + BOOST_TEST(testFL(S("hmftq"), "nmsckbgalo", 2, 0, S::npos)); + BOOST_TEST(testFL(S("fklad"), "tpksqhamle", 2, 1, S::npos)); + BOOST_TEST(testFL(S("dirnm"), "tpdrchmkji", 2, 5, 2)); + BOOST_TEST(testFL(S("hrgdc"), "ijagfkblst", 2, 9, 2)); + BOOST_TEST(testFL(S("ifakg"), "kpocsignjb", 2, 10, 0)); + BOOST_TEST(testFL(S("ebrgd"), "pecqtkjsnbdrialgmohf", 2, 0, S::npos)); + BOOST_TEST(testFL(S("rcjml"), "aiortphfcmkjebgsndql", 2, 1, S::npos)); + BOOST_TEST(testFL(S("peqmt"), "sdbkeamglhipojqftrcn", 2, 10, 1)); + BOOST_TEST(testFL(S("frehn"), "ljqncehgmfktroapidbs", 2, 19, 2)); + BOOST_TEST(testFL(S("tqolf"), "rtcfodilamkbenjghqps", 2, 20, 2)); + BOOST_TEST(testFL(S("cjgao"), "", 4, 0, S::npos)); + BOOST_TEST(testFL(S("kjplq"), "mabns", 4, 0, S::npos)); + BOOST_TEST(testFL(S("herni"), "bdnrp", 4, 1, S::npos)); + BOOST_TEST(testFL(S("tadrb"), "scidp", 4, 2, S::npos)); + BOOST_TEST(testFL(S("pkfeo"), "agbjl", 4, 4, S::npos)); + BOOST_TEST(testFL(S("hoser"), "jfmpr", 4, 5, 4)); + BOOST_TEST(testFL(S("kgrsp"), "rbpefghsmj", 4, 0, S::npos)); + BOOST_TEST(testFL(S("pgejb"), "apsfntdoqc", 4, 1, S::npos)); + BOOST_TEST(testFL(S("thlnq"), "ndkjeisgcl", 4, 5, 3)); + BOOST_TEST(testFL(S("nbmit"), "rnfpqatdeo", 4, 9, 4)); + BOOST_TEST(testFL(S("jgmib"), "bntjlqrfik", 4, 10, 4)); + BOOST_TEST(testFL(S("ncrfj"), "kcrtmpolnaqejghsfdbi", 4, 0, S::npos)); + BOOST_TEST(testFL(S("ncsik"), "lobheanpkmqidsrtcfgj", 4, 1, S::npos)); + BOOST_TEST(testFL(S("sgbfh"), "athdkljcnreqbgpmisof", 4, 10, 4)); + BOOST_TEST(testFL(S("dktbn"), "qkdmjialrscpbhefgont", 4, 19, 4)); + BOOST_TEST(testFL(S("fthqm"), "dmasojntqleribkgfchp", 4, 20, 4)); + BOOST_TEST(testFL(S("klopi"), "", 5, 0, S::npos)); + BOOST_TEST(testFL(S("dajhn"), "psthd", 5, 0, S::npos)); + BOOST_TEST(testFL(S("jbgno"), "rpmjd", 5, 1, S::npos)); + BOOST_TEST(testFL(S("hkjae"), "dfsmk", 5, 2, S::npos)); + BOOST_TEST(testFL(S("gbhqo"), "skqne", 5, 4, 3)); + BOOST_TEST(testFL(S("ktdor"), "kipnf", 5, 5, 0)); + BOOST_TEST(testFL(S("ldprn"), "hmrnqdgifl", 5, 0, S::npos)); + BOOST_TEST(testFL(S("egmjk"), "fsmjcdairn", 5, 1, S::npos)); + BOOST_TEST(testFL(S("armql"), "pcdgltbrfj", 5, 5, 4)); + BOOST_TEST(testFL(S("cdhjo"), "aekfctpirg", 5, 9, 0)); + BOOST_TEST(testFL(S("jcons"), "ledihrsgpf", 5, 10, 4)); + BOOST_TEST(testFL(S("cbrkp"), "mqcklahsbtirgopefndj", 5, 0, S::npos)); + BOOST_TEST(testFL(S("fhgna"), "kmlthaoqgecrnpdbjfis", 5, 1, S::npos)); + BOOST_TEST(testFL(S("ejfcd"), "sfhbamcdptojlkrenqgi", 5, 10, 4)); + BOOST_TEST(testFL(S("kqjhe"), "pbniofmcedrkhlstgaqj", 5, 19, 4)); + BOOST_TEST(testFL(S("pbdjl"), "mongjratcskbhqiepfdl", 5, 20, 4)); + BOOST_TEST(testFL(S("gajqn"), "", 6, 0, S::npos)); + BOOST_TEST(testFL(S("stedk"), "hrnat", 6, 0, S::npos)); + BOOST_TEST(testFL(S("tjkaf"), "gsqdt", 6, 1, S::npos)); + BOOST_TEST(testFL(S("dthpe"), "bspkd", 6, 2, S::npos)); + BOOST_TEST(testFL(S("klhde"), "ohcmb", 6, 4, 2)); + BOOST_TEST(testFL(S("bhlki"), "heatr", 6, 5, 1)); + BOOST_TEST(testFL(S("lqmoh"), "pmblckedfn", 6, 0, S::npos)); + BOOST_TEST(testFL(S("mtqin"), "aceqmsrbik", 6, 1, S::npos)); + BOOST_TEST(testFL(S("dpqbr"), "lmbtdehjrn", 6, 5, 3)); + BOOST_TEST(testFL(S("kdhmo"), "teqmcrlgib", 6, 9, 3)); + BOOST_TEST(testFL(S("jblqp"), "njolbmspac", 6, 10, 4)); + BOOST_TEST(testFL(S("qmjgl"), "pofnhidklamecrbqjgst", 6, 0, S::npos)); + BOOST_TEST(testFL(S("rothp"), "jbhckmtgrqnosafedpli", 6, 1, S::npos)); + BOOST_TEST(testFL(S("ghknq"), "dobntpmqklicsahgjerf", 6, 10, 4)); + BOOST_TEST(testFL(S("eopfi"), "tpdshainjkbfoemlrgcq", 6, 19, 4)); + BOOST_TEST(testFL(S("dsnmg"), "oldpfgeakrnitscbjmqh", 6, 20, 4)); + BOOST_TEST(testFL(S("jnkrfhotgl"), "", 0, 0, S::npos)); + BOOST_TEST(testFL(S("dltjfngbko"), "rqegt", 0, 0, S::npos)); + BOOST_TEST(testFL(S("bmjlpkiqde"), "dashm", 0, 1, S::npos)); + BOOST_TEST(testFL(S("skrflobnqm"), "jqirk", 0, 2, S::npos)); + BOOST_TEST(testFL(S("jkpldtshrm"), "rckeg", 0, 4, S::npos)); + BOOST_TEST(testFL(S("ghasdbnjqo"), "jscie", 0, 5, S::npos)); + BOOST_TEST(testFL(S("igrkhpbqjt"), "efsphndliq", 0, 0, S::npos)); + BOOST_TEST(testFL(S("ikthdgcamf"), "gdicosleja", 0, 1, S::npos)); + BOOST_TEST(testFL(S("pcofgeniam"), "qcpjibosfl", 0, 5, 0)); + BOOST_TEST(testFL(S("rlfjgesqhc"), "lrhmefnjcq", 0, 9, 0)); + BOOST_TEST(testFL(S("itphbqsker"), "dtablcrseo", 0, 10, S::npos)); + BOOST_TEST(testFL(S("skjafcirqm"), "apckjsftedbhgomrnilq", 0, 0, S::npos)); + BOOST_TEST(testFL(S("tcqomarsfd"), "pcbrgflehjtiadnsokqm", 0, 1, S::npos)); + BOOST_TEST(testFL(S("rocfeldqpk"), "nsiadegjklhobrmtqcpf", 0, 10, S::npos)); + BOOST_TEST(testFL(S("cfpegndlkt"), "cpmajdqnolikhgsbretf", 0, 19, 0)); + BOOST_TEST(testFL(S("fqbtnkeasj"), "jcflkntmgiqrphdosaeb", 0, 20, 0)); + BOOST_TEST(testFL(S("shbcqnmoar"), "", 1, 0, S::npos)); + BOOST_TEST(testFL(S("bdoshlmfin"), "ontrs", 1, 0, S::npos)); + BOOST_TEST(testFL(S("khfrebnsgq"), "pfkna", 1, 1, S::npos)); + BOOST_TEST(testFL(S("getcrsaoji"), "ekosa", 1, 2, 1)); + BOOST_TEST(testFL(S("fjiknedcpq"), "anqhk", 1, 4, S::npos)); + BOOST_TEST(testFL(S("tkejgnafrm"), "jekca", 1, 5, 1)); + BOOST_TEST(testFL(S("jnakolqrde"), "ikemsjgacf", 1, 0, S::npos)); + BOOST_TEST(testFL(S("lcjptsmgbe"), "arolgsjkhm", 1, 1, S::npos)); + BOOST_TEST(testFL(S("itfsmcjorl"), "oftkbldhre", 1, 5, 1)); + BOOST_TEST(testFL(S("omchkfrjea"), "gbkqdoeftl", 1, 9, 0)); + BOOST_TEST(testFL(S("cigfqkated"), "sqcflrgtim", 1, 10, 1)); + BOOST_TEST(testFL(S("tscenjikml"), "fmhbkislrjdpanogqcet", 1, 0, S::npos)); + BOOST_TEST(testFL(S("qcpaemsinf"), "rnioadktqlgpbcjsmhef", 1, 1, S::npos)); + BOOST_TEST(testFL(S("gltkojeipd"), "oakgtnldpsefihqmjcbr", 1, 10, 1)); + BOOST_TEST(testFL(S("qistfrgnmp"), "gbnaelosidmcjqktfhpr", 1, 19, 1)); + BOOST_TEST(testFL(S("bdnpfcqaem"), "akbripjhlosndcmqgfet", 1, 20, 1)); + BOOST_TEST(testFL(S("ectnhskflp"), "", 5, 0, S::npos)); + BOOST_TEST(testFL(S("fgtianblpq"), "pijag", 5, 0, S::npos)); + BOOST_TEST(testFL(S("mfeqklirnh"), "jrckd", 5, 1, S::npos)); + BOOST_TEST(testFL(S("astedncjhk"), "qcloh", 5, 2, S::npos)); + BOOST_TEST(testFL(S("fhlqgcajbr"), "thlmp", 5, 4, 2)); + BOOST_TEST(testFL(S("epfhocmdng"), "qidmo", 5, 5, 4)); + BOOST_TEST(testFL(S("apcnsibger"), "lnegpsjqrd", 5, 0, S::npos)); + BOOST_TEST(testFL(S("aqkocrbign"), "rjqdablmfs", 5, 1, 5)); + BOOST_TEST(testFL(S("ijsmdtqgce"), "enkgpbsjaq", 5, 5, S::npos)); + BOOST_TEST(testFL(S("clobgsrken"), "kdsgoaijfh", 5, 9, 5)); + BOOST_TEST(testFL(S("jbhcfposld"), "trfqgmckbe", 5, 10, 4)); + BOOST_TEST(testFL(S("oqnpblhide"), "igetsracjfkdnpoblhqm", 5, 0, S::npos)); + BOOST_TEST(testFL(S("lroeasctif"), "nqctfaogirshlekbdjpm", 5, 1, S::npos)); + BOOST_TEST(testFL(S("bpjlgmiedh"), "csehfgomljdqinbartkp", 5, 10, 5)); + BOOST_TEST(testFL(S("pamkeoidrj"), "qahoegcmplkfsjbdnitr", 5, 19, 5)); + BOOST_TEST(testFL(S("espogqbthk"), "dpteiajrqmsognhlfbkc", 5, 20, 5)); + BOOST_TEST(testFL(S("shoiedtcjb"), "", 9, 0, S::npos)); + BOOST_TEST(testFL(S("ebcinjgads"), "tqbnh", 9, 0, S::npos)); + BOOST_TEST(testFL(S("dqmregkcfl"), "akmle", 9, 1, S::npos)); + BOOST_TEST(testFL(S("ngcrieqajf"), "iqfkm", 9, 2, 6)); + BOOST_TEST(testFL(S("qosmilgnjb"), "tqjsr", 9, 4, 8)); + BOOST_TEST(testFL(S("ikabsjtdfl"), "jplqg", 9, 5, 9)); + BOOST_TEST(testFL(S("ersmicafdh"), "oilnrbcgtj", 9, 0, S::npos)); + BOOST_TEST(testFL(S("fdnplotmgh"), "morkglpesn", 9, 1, 7)); + BOOST_TEST(testFL(S("fdbicojerm"), "dmicerngat", 9, 5, 9)); + BOOST_TEST(testFL(S("mbtafndjcq"), "radgeskbtc", 9, 9, 6)); + BOOST_TEST(testFL(S("mlenkpfdtc"), "ljikprsmqo", 9, 10, 5)); + BOOST_TEST(testFL(S("ahlcifdqgs"), "trqihkcgsjamfdbolnpe", 9, 0, S::npos)); + BOOST_TEST(testFL(S("bgjemaltks"), "lqmthbsrekajgnofcipd", 9, 1, 6)); + BOOST_TEST(testFL(S("pdhslbqrfc"), "jtalmedribkgqsopcnfh", 9, 10, 7)); + BOOST_TEST(testFL(S("dirhtsnjkc"), "spqfoiclmtagejbndkrh", 9, 19, 9)); + BOOST_TEST(testFL(S("dlroktbcja"), "nmotklspigjrdhcfaebq", 9, 20, 9)); + BOOST_TEST(testFL(S("ncjpmaekbs"), "", 10, 0, S::npos)); + BOOST_TEST(testFL(S("hlbosgmrak"), "hpmsd", 10, 0, S::npos)); + BOOST_TEST(testFL(S("pqfhsgilen"), "qnpor", 10, 1, 1)); + BOOST_TEST(testFL(S("gqtjsbdckh"), "otdma", 10, 2, 2)); + BOOST_TEST(testFL(S("cfkqpjlegi"), "efhjg", 10, 4, 7)); + BOOST_TEST(testFL(S("beanrfodgj"), "odpte", 10, 5, 7)); + BOOST_TEST(testFL(S("adtkqpbjfi"), "bctdgfmolr", 10, 0, S::npos)); + BOOST_TEST(testFL(S("iomkfthagj"), "oaklidrbqg", 10, 1, 1)); + BOOST_TEST(testFL(S("sdpcilonqj"), "dnjfsagktr", 10, 5, 9)); + BOOST_TEST(testFL(S("gtfbdkqeml"), "nejaktmiqg", 10, 9, 8)); + BOOST_TEST(testFL(S("bmeqgcdorj"), "pjqonlebsf", 10, 10, 9)); + BOOST_TEST(testFL(S("etqlcanmob"), "dshmnbtolcjepgaikfqr", 10, 0, S::npos)); + BOOST_TEST(testFL(S("roqmkbdtia"), "iogfhpabtjkqlrnemcds", 10, 1, 8)); + BOOST_TEST(testFL(S("kadsithljf"), "ngridfabjsecpqltkmoh", 10, 10, 9)); + BOOST_TEST(testFL(S("sgtkpbfdmh"), "athmknplcgofrqejsdib", 10, 19, 9)); + BOOST_TEST(testFL(S("qgmetnabkl"), "ldobhmqcafnjtkeisgrp", 10, 20, 9)); + BOOST_TEST(testFL(S("cqjohampgd"), "", 11, 0, S::npos)); + BOOST_TEST(testFL(S("hobitmpsan"), "aocjb", 11, 0, S::npos)); + BOOST_TEST(testFL(S("tjehkpsalm"), "jbrnk", 11, 1, 1)); + BOOST_TEST(testFL(S("ngfbojitcl"), "tqedg", 11, 2, 7)); + BOOST_TEST(testFL(S("rcfkdbhgjo"), "nqskp", 11, 4, 3)); + BOOST_TEST(testFL(S("qghptonrea"), "eaqkl", 11, 5, 9)); + BOOST_TEST(testFL(S("hnprfgqjdl"), "reaoicljqm", 11, 0, S::npos)); + BOOST_TEST(testFL(S("hlmgabenti"), "lsftgajqpm", 11, 1, 1)); + BOOST_TEST(testFL(S("ofcjanmrbs"), "rlpfogmits", 11, 5, 7)); + BOOST_TEST(testFL(S("jqedtkornm"), "shkncmiaqj", 11, 9, 9)); + BOOST_TEST(testFL(S("rfedlasjmg"), "fpnatrhqgs", 11, 10, 9)); + BOOST_TEST(testFL(S("talpqjsgkm"), "sjclemqhnpdbgikarfot", 11, 0, S::npos)); + BOOST_TEST(testFL(S("lrkcbtqpie"), "otcmedjikgsfnqbrhpla", 11, 1, S::npos)); + BOOST_TEST(testFL(S("cipogdskjf"), "bonsaefdqiprkhlgtjcm", 11, 10, 9)); + BOOST_TEST(testFL(S("nqedcojahi"), "egpscmahijlfnkrodqtb", 11, 19, 9)); + BOOST_TEST(testFL(S("hefnrkmctj"), "kmqbfepjthgilscrndoa", 11, 20, 9)); + BOOST_TEST(testFL(S("atqirnmekfjolhpdsgcb"), "", 0, 0, S::npos)); + BOOST_TEST(testFL(S("echfkmlpribjnqsaogtd"), "prboq", 0, 0, S::npos)); + BOOST_TEST(testFL(S("qnhiftdgcleajbpkrosm"), "fjcqh", 0, 1, S::npos)); + BOOST_TEST(testFL(S("chamfknorbedjitgslpq"), "fmosa", 0, 2, S::npos)); + BOOST_TEST(testFL(S("njhqpibfmtlkaecdrgso"), "qdbok", 0, 4, S::npos)); + BOOST_TEST(testFL(S("ebnghfsqkprmdcljoiat"), "amslg", 0, 5, S::npos)); + BOOST_TEST(testFL(S("letjomsgihfrpqbkancd"), "smpltjneqb", 0, 0, S::npos)); + BOOST_TEST(testFL(S("nblgoipcrqeaktshjdmf"), "flitskrnge", 0, 1, S::npos)); + BOOST_TEST(testFL(S("cehkbngtjoiflqapsmrd"), "pgqihmlbef", 0, 5, S::npos)); + BOOST_TEST(testFL(S("mignapfoklbhcqjetdrs"), "cfpdqjtgsb", 0, 9, S::npos)); + BOOST_TEST(testFL(S("ceatbhlsqjgpnokfrmdi"), "htpsiaflom", 0, 10, S::npos)); + BOOST_TEST(testFL(S("ocihkjgrdelpfnmastqb"), "kpjfiaceghsrdtlbnomq", 0, 0, S::npos)); + BOOST_TEST(testFL(S("noelgschdtbrjfmiqkap"), "qhtbomidljgafneksprc", 0, 1, S::npos)); + BOOST_TEST(testFL(S("dkclqfombepritjnghas"), "nhtjobkcefldimpsaqgr", 0, 10, S::npos)); + BOOST_TEST(testFL(S("miklnresdgbhqcojftap"), "prabcjfqnoeskilmtgdh", 0, 19, 0)); + BOOST_TEST(testFL(S("htbcigojaqmdkfrnlsep"), "dtrgmchilkasqoebfpjn", 0, 20, 0)); + BOOST_TEST(testFL(S("febhmqtjanokscdirpgl"), "", 1, 0, S::npos)); + BOOST_TEST(testFL(S("loakbsqjpcrdhftniegm"), "sqome", 1, 0, S::npos)); + BOOST_TEST(testFL(S("reagphsqflbitdcjmkno"), "smfte", 1, 1, S::npos)); + BOOST_TEST(testFL(S("jitlfrqemsdhkopncabg"), "ciboh", 1, 2, 1)); + BOOST_TEST(testFL(S("mhtaepscdnrjqgbkifol"), "haois", 1, 4, 1)); + BOOST_TEST(testFL(S("tocesrfmnglpbjihqadk"), "abfki", 1, 5, S::npos)); + BOOST_TEST(testFL(S("lpfmctjrhdagneskbqoi"), "frdkocntmq", 1, 0, S::npos)); + BOOST_TEST(testFL(S("lsmqaepkdhncirbtjfgo"), "oasbpedlnr", 1, 1, S::npos)); + BOOST_TEST(testFL(S("epoiqmtldrabnkjhcfsg"), "kltqmhgand", 1, 5, S::npos)); + BOOST_TEST(testFL(S("emgasrilpknqojhtbdcf"), "gdtfjchpmr", 1, 9, 1)); + BOOST_TEST(testFL(S("hnfiagdpcklrjetqbsom"), "ponmcqblet", 1, 10, 1)); + BOOST_TEST(testFL(S("nsdfebgajhmtricpoklq"), "sgphqdnofeiklatbcmjr", 1, 0, S::npos)); + BOOST_TEST(testFL(S("atjgfsdlpobmeiqhncrk"), "ljqprsmigtfoneadckbh", 1, 1, S::npos)); + BOOST_TEST(testFL(S("sitodfgnrejlahcbmqkp"), "ligeojhafnkmrcsqtbdp", 1, 10, 1)); + BOOST_TEST(testFL(S("fraghmbiceknltjpqosd"), "lsimqfnjarbopedkhcgt", 1, 19, 1)); + BOOST_TEST(testFL(S("pmafenlhqtdbkirjsogc"), "abedmfjlghniorcqptks", 1, 20, 1)); + BOOST_TEST(testFL(S("pihgmoeqtnakrjslcbfd"), "", 10, 0, S::npos)); + BOOST_TEST(testFL(S("gjdkeprctqblnhiafsom"), "hqtoa", 10, 0, S::npos)); + BOOST_TEST(testFL(S("mkpnblfdsahrcqijteog"), "cahif", 10, 1, S::npos)); + BOOST_TEST(testFL(S("gckarqnelodfjhmbptis"), "kehis", 10, 2, 7)); + BOOST_TEST(testFL(S("gqpskidtbclomahnrjfe"), "kdlmh", 10, 4, 10)); + BOOST_TEST(testFL(S("pkldjsqrfgitbhmaecno"), "paeql", 10, 5, 6)); + BOOST_TEST(testFL(S("aftsijrbeklnmcdqhgop"), "aghoqiefnb", 10, 0, S::npos)); + BOOST_TEST(testFL(S("mtlgdrhafjkbiepqnsoc"), "jrbqaikpdo", 10, 1, 9)); + BOOST_TEST(testFL(S("pqgirnaefthokdmbsclj"), "smjonaeqcl", 10, 5, 5)); + BOOST_TEST(testFL(S("kpdbgjmtherlsfcqoina"), "eqbdrkcfah", 10, 9, 10)); + BOOST_TEST(testFL(S("jrlbothiknqmdgcfasep"), "kapmsienhf", 10, 10, 9)); + BOOST_TEST(testFL(S("mjogldqferckabinptsh"), "jpqotrlenfcsbhkaimdg", 10, 0, S::npos)); + BOOST_TEST(testFL(S("apoklnefbhmgqcdrisjt"), "jlbmhnfgtcqprikeados", 10, 1, S::npos)); + BOOST_TEST(testFL(S("ifeopcnrjbhkdgatmqls"), "stgbhfmdaljnpqoicker", 10, 10, 10)); + BOOST_TEST(testFL(S("ckqhaiesmjdnrgolbtpf"), "oihcetflbjagdsrkmqpn", 10, 19, 10)); + BOOST_TEST(testFL(S("bnlgapfimcoterskqdjh"), "adtclebmnpjsrqfkigoh", 10, 20, 10)); + BOOST_TEST(testFL(S("kgdlrobpmjcthqsafeni"), "", 19, 0, S::npos)); + BOOST_TEST(testFL(S("dfkechomjapgnslbtqir"), "beafg", 19, 0, S::npos)); + BOOST_TEST(testFL(S("rloadknfbqtgmhcsipje"), "iclat", 19, 1, 16)); + BOOST_TEST(testFL(S("mgjhkolrnadqbpetcifs"), "rkhnf", 19, 2, 7)); + BOOST_TEST(testFL(S("cmlfakiojdrgtbsphqen"), "clshq", 19, 4, 16)); + BOOST_TEST(testFL(S("kghbfipeomsntdalrqjc"), "dtcoj", 19, 5, 19)); + BOOST_TEST(testFL(S("eldiqckrnmtasbghjfpo"), "rqosnjmfth", 19, 0, S::npos)); + BOOST_TEST(testFL(S("abqjcfedgotihlnspkrm"), "siatdfqglh", 19, 1, 15)); + BOOST_TEST(testFL(S("qfbadrtjsimkolcenhpg"), "mrlshtpgjq", 19, 5, 17)); + BOOST_TEST(testFL(S("abseghclkjqifmtodrnp"), "adlcskgqjt", 19, 9, 16)); + BOOST_TEST(testFL(S("ibmsnlrjefhtdokacqpg"), "drshcjknaf", 19, 10, 16)); + BOOST_TEST(testFL(S("mrkfciqjebaponsthldg"), "etsaqroinghpkjdlfcbm", 19, 0, S::npos)); + BOOST_TEST(testFL(S("mjkticdeoqshpalrfbgn"), "sgepdnkqliambtrocfhj", 19, 1, 10)); + BOOST_TEST(testFL(S("rqnoclbdejgiphtfsakm"), "nlmcjaqgbsortfdihkpe", 19, 10, 19)); + BOOST_TEST(testFL(S("plkqbhmtfaeodjcrsing"), "racfnpmosldibqkghjet", 19, 19, 19)); + BOOST_TEST(testFL(S("oegalhmstjrfickpbndq"), "fjhdsctkqeiolagrnmbp", 19, 20, 19)); + BOOST_TEST(testFL(S("rdtgjcaohpblniekmsfq"), "", 20, 0, S::npos)); + BOOST_TEST(testFL(S("ofkqbnjetrmsaidphglc"), "ejanp", 20, 0, S::npos)); + BOOST_TEST(testFL(S("grkpahljcftesdmonqib"), "odife", 20, 1, 15)); + BOOST_TEST(testFL(S("jimlgbhfqkteospardcn"), "okaqd", 20, 2, 12)); + BOOST_TEST(testFL(S("gftenihpmslrjkqadcob"), "lcdbi", 20, 4, 19)); + BOOST_TEST(testFL(S("bmhldogtckrfsanijepq"), "fsqbj", 20, 5, 19)); + BOOST_TEST(testFL(S("nfqkrpjdesabgtlcmoih"), "bigdomnplq", 20, 0, S::npos)); + BOOST_TEST(testFL(S("focalnrpiqmdkstehbjg"), "apiblotgcd", 20, 1, 3)); + BOOST_TEST(testFL(S("rhqdspkmebiflcotnjga"), "acfhdenops", 20, 5, 19)); + BOOST_TEST(testFL(S("rahdtmsckfboqlpniegj"), "jopdeamcrk", 20, 9, 19)); + BOOST_TEST(testFL(S("fbkeiopclstmdqranjhg"), "trqncbkgmh", 20, 10, 19)); + BOOST_TEST(testFL(S("lifhpdgmbconstjeqark"), "tomglrkencbsfjqpihda", 20, 0, S::npos)); + BOOST_TEST(testFL(S("pboqganrhedjmltsicfk"), "gbkhdnpoietfcmrslajq", 20, 1, 4)); + BOOST_TEST(testFL(S("klchabsimetjnqgorfpd"), "rtfnmbsglkjaichoqedp", 20, 10, 17)); + BOOST_TEST(testFL(S("sirfgmjqhctndbklaepo"), "ohkmdpfqbsacrtjnlgei", 20, 19, 19)); + BOOST_TEST(testFL(S("rlbdsiceaonqjtfpghkm"), "dlbrteoisgphmkncajfq", 20, 20, 19)); + BOOST_TEST(testFL(S("ecgdanriptblhjfqskom"), "", 21, 0, S::npos)); + BOOST_TEST(testFL(S("fdmiarlpgcskbhoteqjn"), "sjrlo", 21, 0, S::npos)); + BOOST_TEST(testFL(S("rlbstjqopignecmfadkh"), "qjpor", 21, 1, 6)); + BOOST_TEST(testFL(S("grjpqmbshektdolcafni"), "odhfn", 21, 2, 13)); + BOOST_TEST(testFL(S("sakfcohtqnibprjmlged"), "qtfin", 21, 4, 10)); + BOOST_TEST(testFL(S("mjtdglasihqpocebrfkn"), "hpqfo", 21, 5, 17)); + BOOST_TEST(testFL(S("okaplfrntghqbmeicsdj"), "fabmertkos", 21, 0, S::npos)); + BOOST_TEST(testFL(S("sahngemrtcjidqbklfpo"), "brqtgkmaej", 21, 1, 14)); + BOOST_TEST(testFL(S("dlmsipcnekhbgoaftqjr"), "nfrdeihsgl", 21, 5, 19)); + BOOST_TEST(testFL(S("ahegrmqnoiklpfsdbcjt"), "hlfrosekpi", 21, 9, 14)); + BOOST_TEST(testFL(S("hdsjbnmlegtkqripacof"), "atgbkrjdsm", 21, 10, 16)); + BOOST_TEST(testFL(S("pcnedrfjihqbalkgtoms"), "blnrptjgqmaifsdkhoec", 21, 0, S::npos)); + BOOST_TEST(testFL(S("qjidealmtpskrbfhocng"), "ctpmdahebfqjgknloris", 21, 1, 17)); + BOOST_TEST(testFL(S("qeindtagmokpfhsclrbj"), "apnkeqthrmlbfodiscgj", 21, 10, 17)); + BOOST_TEST(testFL(S("kpfegbjhsrnodltqciam"), "jdgictpframeoqlsbknh", 21, 19, 19)); + BOOST_TEST(testFL(S("hnbrcplsjfgiktoedmaq"), "qprlsfojamgndekthibc", 21, 20, 19)); + + + + + + + + // find_first_not_of + + const char* cs3 = "12456"; + const char* cs4 = "2356"; + string_view v3 = cs3; + string_view v4 = cs4; + fixed_string<5> fs3 = cs3; + fixed_string<4> fs4 = cs4; + + BOOST_TEST(fs1.find_first_not_of(v3) == 2); + BOOST_TEST(fs1.find_first_not_of(v4) == 0); + BOOST_TEST(fs1.find_first_not_of(fs3) == 2); + BOOST_TEST(fs1.find_first_not_of(fs4) == 0); + + BOOST_TEST(fs1.find_first_not_of(cs3) == 2); + BOOST_TEST(fs1.find_first_not_of(cs4) == 0); + + BOOST_TEST(fs1.find_first_not_of(cs3, 0) == 2); + BOOST_TEST(fs1.find_first_not_of(cs4, 0) == 0); + + BOOST_TEST(fs1.find_first_not_of(cs4, 0, 2) == 0); + + BOOST_TEST(fs1.find_first_not_of(cs3, 4) == -1); + BOOST_TEST(fs1.find_first_not_of(cs4, 4) == -1); + + BOOST_TEST(fs1.find_first_not_of('1') == 1); + BOOST_TEST(fs1.find_first_not_of('1', 3) == 3); + + + + + + BOOST_TEST(testFFN(S(""), "", 0, 0, S::npos)); + BOOST_TEST(testFFN(S(""), "irkhs", 0, 0, S::npos)); + BOOST_TEST(testFFN(S(""), "kante", 0, 1, S::npos)); + BOOST_TEST(testFFN(S(""), "oknlr", 0, 2, S::npos)); + BOOST_TEST(testFFN(S(""), "pcdro", 0, 4, S::npos)); + BOOST_TEST(testFFN(S(""), "bnrpe", 0, 5, S::npos)); + BOOST_TEST(testFFN(S(""), "jtdaefblso", 0, 0, S::npos)); + BOOST_TEST(testFFN(S(""), "oselktgbca", 0, 1, S::npos)); + BOOST_TEST(testFFN(S(""), "eqgaplhckj", 0, 5, S::npos)); + BOOST_TEST(testFFN(S(""), "bjahtcmnlp", 0, 9, S::npos)); + BOOST_TEST(testFFN(S(""), "hjlcmgpket", 0, 10, S::npos)); + BOOST_TEST(testFFN(S(""), "htaobedqikfplcgjsmrn", 0, 0, S::npos)); + BOOST_TEST(testFFN(S(""), "hpqiarojkcdlsgnmfetb", 0, 1, S::npos)); + BOOST_TEST(testFFN(S(""), "dfkaprhjloqetcsimnbg", 0, 10, S::npos)); + BOOST_TEST(testFFN(S(""), "ihqrfebgadntlpmjksoc", 0, 19, S::npos)); + BOOST_TEST(testFFN(S(""), "ngtjfcalbseiqrphmkdo", 0, 20, S::npos)); + BOOST_TEST(testFFN(S(""), "", 1, 0, S::npos)); + BOOST_TEST(testFFN(S(""), "lbtqd", 1, 0, S::npos)); + BOOST_TEST(testFFN(S(""), "tboim", 1, 1, S::npos)); + BOOST_TEST(testFFN(S(""), "slcer", 1, 2, S::npos)); + BOOST_TEST(testFFN(S(""), "cbjfs", 1, 4, S::npos)); + BOOST_TEST(testFFN(S(""), "aqibs", 1, 5, S::npos)); + BOOST_TEST(testFFN(S(""), "gtfblmqinc", 1, 0, S::npos)); + BOOST_TEST(testFFN(S(""), "mkqpbtdalg", 1, 1, S::npos)); + BOOST_TEST(testFFN(S(""), "kphatlimcd", 1, 5, S::npos)); + BOOST_TEST(testFFN(S(""), "pblasqogic", 1, 9, S::npos)); + BOOST_TEST(testFFN(S(""), "arosdhcfme", 1, 10, S::npos)); + BOOST_TEST(testFFN(S(""), "blkhjeogicatqfnpdmsr", 1, 0, S::npos)); + BOOST_TEST(testFFN(S(""), "bmhineprjcoadgstflqk", 1, 1, S::npos)); + BOOST_TEST(testFFN(S(""), "djkqcmetslnghpbarfoi", 1, 10, S::npos)); + BOOST_TEST(testFFN(S(""), "lgokshjtpbemarcdqnfi", 1, 19, S::npos)); + BOOST_TEST(testFFN(S(""), "bqjhtkfepimcnsgrlado", 1, 20, S::npos)); + BOOST_TEST(testFFN(S("eaint"), "", 0, 0, 0)); + BOOST_TEST(testFFN(S("binja"), "gfsrt", 0, 0, 0)); + BOOST_TEST(testFFN(S("latkm"), "pfsoc", 0, 1, 0)); + BOOST_TEST(testFFN(S("lecfr"), "tpflm", 0, 2, 0)); + BOOST_TEST(testFFN(S("eqkst"), "sgkec", 0, 4, 1)); + BOOST_TEST(testFFN(S("cdafr"), "romds", 0, 5, 0)); + BOOST_TEST(testFFN(S("prbhe"), "qhjistlgmr", 0, 0, 0)); + BOOST_TEST(testFFN(S("lbisk"), "pedfirsglo", 0, 1, 0)); + BOOST_TEST(testFFN(S("hrlpd"), "aqcoslgrmk", 0, 5, 0)); + BOOST_TEST(testFFN(S("ehmja"), "dabckmepqj", 0, 9, 1)); + BOOST_TEST(testFFN(S("mhqgd"), "pqscrjthli", 0, 10, 0)); + BOOST_TEST(testFFN(S("tgklq"), "kfphdcsjqmobliagtren", 0, 0, 0)); + BOOST_TEST(testFFN(S("bocjs"), "rokpefncljibsdhqtagm", 0, 1, 0)); + BOOST_TEST(testFFN(S("grbsd"), "afionmkphlebtcjqsgrd", 0, 10, 0)); + BOOST_TEST(testFFN(S("ofjqr"), "aenmqplidhkofrjbctsg", 0, 19, S::npos)); + BOOST_TEST(testFFN(S("btlfi"), "osjmbtcadhiklegrpqnf", 0, 20, S::npos)); + BOOST_TEST(testFFN(S("clrgb"), "", 1, 0, 1)); + BOOST_TEST(testFFN(S("tjmek"), "osmia", 1, 0, 1)); + BOOST_TEST(testFFN(S("bgstp"), "ckonl", 1, 1, 1)); + BOOST_TEST(testFFN(S("hstrk"), "ilcaj", 1, 2, 1)); + BOOST_TEST(testFFN(S("kmspj"), "lasiq", 1, 4, 1)); + BOOST_TEST(testFFN(S("tjboh"), "kfqmr", 1, 5, 1)); + BOOST_TEST(testFFN(S("ilbcj"), "klnitfaobg", 1, 0, 1)); + BOOST_TEST(testFFN(S("jkngf"), "gjhmdlqikp", 1, 1, 1)); + BOOST_TEST(testFFN(S("gfcql"), "skbgtahqej", 1, 5, 1)); + BOOST_TEST(testFFN(S("dqtlg"), "bjsdgtlpkf", 1, 9, 1)); + BOOST_TEST(testFFN(S("bthpg"), "bjgfmnlkio", 1, 10, 1)); + BOOST_TEST(testFFN(S("dgsnq"), "lbhepotfsjdqigcnamkr", 1, 0, 1)); + BOOST_TEST(testFFN(S("rmfhp"), "tebangckmpsrqdlfojhi", 1, 1, 1)); + BOOST_TEST(testFFN(S("jfdam"), "joflqbdkhtegimscpanr", 1, 10, 3)); + BOOST_TEST(testFFN(S("edapb"), "adpmcohetfbsrjinlqkg", 1, 19, S::npos)); + BOOST_TEST(testFFN(S("brfsm"), "iacldqjpfnogbsrhmetk", 1, 20, S::npos)); + BOOST_TEST(testFFN(S("ndrhl"), "", 2, 0, 2)); + BOOST_TEST(testFFN(S("mrecp"), "otkgb", 2, 0, 2)); + BOOST_TEST(testFFN(S("qlasf"), "cqsjl", 2, 1, 2)); + BOOST_TEST(testFFN(S("smaqd"), "dpifl", 2, 2, 2)); + BOOST_TEST(testFFN(S("hjeni"), "oapht", 2, 4, 2)); + BOOST_TEST(testFFN(S("ocmfj"), "cifts", 2, 5, 2)); + BOOST_TEST(testFFN(S("hmftq"), "nmsckbgalo", 2, 0, 2)); + BOOST_TEST(testFFN(S("fklad"), "tpksqhamle", 2, 1, 2)); + BOOST_TEST(testFFN(S("dirnm"), "tpdrchmkji", 2, 5, 3)); + BOOST_TEST(testFFN(S("hrgdc"), "ijagfkblst", 2, 9, 3)); + BOOST_TEST(testFFN(S("ifakg"), "kpocsignjb", 2, 10, 2)); + BOOST_TEST(testFFN(S("ebrgd"), "pecqtkjsnbdrialgmohf", 2, 0, 2)); + BOOST_TEST(testFFN(S("rcjml"), "aiortphfcmkjebgsndql", 2, 1, 2)); + BOOST_TEST(testFFN(S("peqmt"), "sdbkeamglhipojqftrcn", 2, 10, 2)); + BOOST_TEST(testFFN(S("frehn"), "ljqncehgmfktroapidbs", 2, 19, S::npos)); + BOOST_TEST(testFFN(S("tqolf"), "rtcfodilamkbenjghqps", 2, 20, S::npos)); + BOOST_TEST(testFFN(S("cjgao"), "", 4, 0, 4)); + BOOST_TEST(testFFN(S("kjplq"), "mabns", 4, 0, 4)); + BOOST_TEST(testFFN(S("herni"), "bdnrp", 4, 1, 4)); + BOOST_TEST(testFFN(S("tadrb"), "scidp", 4, 2, 4)); + BOOST_TEST(testFFN(S("pkfeo"), "agbjl", 4, 4, 4)); + BOOST_TEST(testFFN(S("hoser"), "jfmpr", 4, 5, S::npos)); + BOOST_TEST(testFFN(S("kgrsp"), "rbpefghsmj", 4, 0, 4)); + BOOST_TEST(testFFN(S("pgejb"), "apsfntdoqc", 4, 1, 4)); + BOOST_TEST(testFFN(S("thlnq"), "ndkjeisgcl", 4, 5, 4)); + BOOST_TEST(testFFN(S("nbmit"), "rnfpqatdeo", 4, 9, S::npos)); + BOOST_TEST(testFFN(S("jgmib"), "bntjlqrfik", 4, 10, S::npos)); + BOOST_TEST(testFFN(S("ncrfj"), "kcrtmpolnaqejghsfdbi", 4, 0, 4)); + BOOST_TEST(testFFN(S("ncsik"), "lobheanpkmqidsrtcfgj", 4, 1, 4)); + BOOST_TEST(testFFN(S("sgbfh"), "athdkljcnreqbgpmisof", 4, 10, S::npos)); + BOOST_TEST(testFFN(S("dktbn"), "qkdmjialrscpbhefgont", 4, 19, S::npos)); + BOOST_TEST(testFFN(S("fthqm"), "dmasojntqleribkgfchp", 4, 20, S::npos)); + BOOST_TEST(testFFN(S("klopi"), "", 5, 0, S::npos)); + BOOST_TEST(testFFN(S("dajhn"), "psthd", 5, 0, S::npos)); + BOOST_TEST(testFFN(S("jbgno"), "rpmjd", 5, 1, S::npos)); + BOOST_TEST(testFFN(S("hkjae"), "dfsmk", 5, 2, S::npos)); + BOOST_TEST(testFFN(S("gbhqo"), "skqne", 5, 4, S::npos)); + BOOST_TEST(testFFN(S("ktdor"), "kipnf", 5, 5, S::npos)); + BOOST_TEST(testFFN(S("ldprn"), "hmrnqdgifl", 5, 0, S::npos)); + BOOST_TEST(testFFN(S("egmjk"), "fsmjcdairn", 5, 1, S::npos)); + BOOST_TEST(testFFN(S("armql"), "pcdgltbrfj", 5, 5, S::npos)); + BOOST_TEST(testFFN(S("cdhjo"), "aekfctpirg", 5, 9, S::npos)); + BOOST_TEST(testFFN(S("jcons"), "ledihrsgpf", 5, 10, S::npos)); + BOOST_TEST(testFFN(S("cbrkp"), "mqcklahsbtirgopefndj", 5, 0, S::npos)); + BOOST_TEST(testFFN(S("fhgna"), "kmlthaoqgecrnpdbjfis", 5, 1, S::npos)); + BOOST_TEST(testFFN(S("ejfcd"), "sfhbamcdptojlkrenqgi", 5, 10, S::npos)); + BOOST_TEST(testFFN(S("kqjhe"), "pbniofmcedrkhlstgaqj", 5, 19, S::npos)); + BOOST_TEST(testFFN(S("pbdjl"), "mongjratcskbhqiepfdl", 5, 20, S::npos)); + BOOST_TEST(testFFN(S("gajqn"), "", 6, 0, S::npos)); + BOOST_TEST(testFFN(S("stedk"), "hrnat", 6, 0, S::npos)); + BOOST_TEST(testFFN(S("tjkaf"), "gsqdt", 6, 1, S::npos)); + BOOST_TEST(testFFN(S("dthpe"), "bspkd", 6, 2, S::npos)); + BOOST_TEST(testFFN(S("klhde"), "ohcmb", 6, 4, S::npos)); + BOOST_TEST(testFFN(S("bhlki"), "heatr", 6, 5, S::npos)); + BOOST_TEST(testFFN(S("lqmoh"), "pmblckedfn", 6, 0, S::npos)); + BOOST_TEST(testFFN(S("mtqin"), "aceqmsrbik", 6, 1, S::npos)); + BOOST_TEST(testFFN(S("dpqbr"), "lmbtdehjrn", 6, 5, S::npos)); + BOOST_TEST(testFFN(S("kdhmo"), "teqmcrlgib", 6, 9, S::npos)); + BOOST_TEST(testFFN(S("jblqp"), "njolbmspac", 6, 10, S::npos)); + BOOST_TEST(testFFN(S("qmjgl"), "pofnhidklamecrbqjgst", 6, 0, S::npos)); + BOOST_TEST(testFFN(S("rothp"), "jbhckmtgrqnosafedpli", 6, 1, S::npos)); + BOOST_TEST(testFFN(S("ghknq"), "dobntpmqklicsahgjerf", 6, 10, S::npos)); + BOOST_TEST(testFFN(S("eopfi"), "tpdshainjkbfoemlrgcq", 6, 19, S::npos)); + BOOST_TEST(testFFN(S("dsnmg"), "oldpfgeakrnitscbjmqh", 6, 20, S::npos)); + BOOST_TEST(testFFN(S("jnkrfhotgl"), "", 0, 0, 0)); + BOOST_TEST(testFFN(S("dltjfngbko"), "rqegt", 0, 0, 0)); + BOOST_TEST(testFFN(S("bmjlpkiqde"), "dashm", 0, 1, 0)); + BOOST_TEST(testFFN(S("skrflobnqm"), "jqirk", 0, 2, 0)); + BOOST_TEST(testFFN(S("jkpldtshrm"), "rckeg", 0, 4, 0)); + BOOST_TEST(testFFN(S("ghasdbnjqo"), "jscie", 0, 5, 0)); + BOOST_TEST(testFFN(S("igrkhpbqjt"), "efsphndliq", 0, 0, 0)); + BOOST_TEST(testFFN(S("ikthdgcamf"), "gdicosleja", 0, 1, 0)); + BOOST_TEST(testFFN(S("pcofgeniam"), "qcpjibosfl", 0, 5, 2)); + BOOST_TEST(testFFN(S("rlfjgesqhc"), "lrhmefnjcq", 0, 9, 4)); + BOOST_TEST(testFFN(S("itphbqsker"), "dtablcrseo", 0, 10, 0)); + BOOST_TEST(testFFN(S("skjafcirqm"), "apckjsftedbhgomrnilq", 0, 0, 0)); + BOOST_TEST(testFFN(S("tcqomarsfd"), "pcbrgflehjtiadnsokqm", 0, 1, 0)); + BOOST_TEST(testFFN(S("rocfeldqpk"), "nsiadegjklhobrmtqcpf", 0, 10, 0)); + BOOST_TEST(testFFN(S("cfpegndlkt"), "cpmajdqnolikhgsbretf", 0, 19, 1)); + BOOST_TEST(testFFN(S("fqbtnkeasj"), "jcflkntmgiqrphdosaeb", 0, 20, S::npos)); + BOOST_TEST(testFFN(S("shbcqnmoar"), "", 1, 0, 1)); + BOOST_TEST(testFFN(S("bdoshlmfin"), "ontrs", 1, 0, 1)); + BOOST_TEST(testFFN(S("khfrebnsgq"), "pfkna", 1, 1, 1)); + BOOST_TEST(testFFN(S("getcrsaoji"), "ekosa", 1, 2, 2)); + BOOST_TEST(testFFN(S("fjiknedcpq"), "anqhk", 1, 4, 1)); + BOOST_TEST(testFFN(S("tkejgnafrm"), "jekca", 1, 5, 4)); + BOOST_TEST(testFFN(S("jnakolqrde"), "ikemsjgacf", 1, 0, 1)); + BOOST_TEST(testFFN(S("lcjptsmgbe"), "arolgsjkhm", 1, 1, 1)); + BOOST_TEST(testFFN(S("itfsmcjorl"), "oftkbldhre", 1, 5, 3)); + BOOST_TEST(testFFN(S("omchkfrjea"), "gbkqdoeftl", 1, 9, 1)); + BOOST_TEST(testFFN(S("cigfqkated"), "sqcflrgtim", 1, 10, 5)); + BOOST_TEST(testFFN(S("tscenjikml"), "fmhbkislrjdpanogqcet", 1, 0, 1)); + BOOST_TEST(testFFN(S("qcpaemsinf"), "rnioadktqlgpbcjsmhef", 1, 1, 1)); + BOOST_TEST(testFFN(S("gltkojeipd"), "oakgtnldpsefihqmjcbr", 1, 10, 5)); + BOOST_TEST(testFFN(S("qistfrgnmp"), "gbnaelosidmcjqktfhpr", 1, 19, 5)); + BOOST_TEST(testFFN(S("bdnpfcqaem"), "akbripjhlosndcmqgfet", 1, 20, S::npos)); + BOOST_TEST(testFFN(S("ectnhskflp"), "", 5, 0, 5)); + BOOST_TEST(testFFN(S("fgtianblpq"), "pijag", 5, 0, 5)); + BOOST_TEST(testFFN(S("mfeqklirnh"), "jrckd", 5, 1, 5)); + BOOST_TEST(testFFN(S("astedncjhk"), "qcloh", 5, 2, 5)); + BOOST_TEST(testFFN(S("fhlqgcajbr"), "thlmp", 5, 4, 5)); + BOOST_TEST(testFFN(S("epfhocmdng"), "qidmo", 5, 5, 5)); + BOOST_TEST(testFFN(S("apcnsibger"), "lnegpsjqrd", 5, 0, 5)); + BOOST_TEST(testFFN(S("aqkocrbign"), "rjqdablmfs", 5, 1, 6)); + BOOST_TEST(testFFN(S("ijsmdtqgce"), "enkgpbsjaq", 5, 5, 5)); + BOOST_TEST(testFFN(S("clobgsrken"), "kdsgoaijfh", 5, 9, 6)); + BOOST_TEST(testFFN(S("jbhcfposld"), "trfqgmckbe", 5, 10, 5)); + BOOST_TEST(testFFN(S("oqnpblhide"), "igetsracjfkdnpoblhqm", 5, 0, 5)); + BOOST_TEST(testFFN(S("lroeasctif"), "nqctfaogirshlekbdjpm", 5, 1, 5)); + BOOST_TEST(testFFN(S("bpjlgmiedh"), "csehfgomljdqinbartkp", 5, 10, 6)); + BOOST_TEST(testFFN(S("pamkeoidrj"), "qahoegcmplkfsjbdnitr", 5, 19, 8)); + BOOST_TEST(testFFN(S("espogqbthk"), "dpteiajrqmsognhlfbkc", 5, 20, S::npos)); + BOOST_TEST(testFFN(S("shoiedtcjb"), "", 9, 0, 9)); + BOOST_TEST(testFFN(S("ebcinjgads"), "tqbnh", 9, 0, 9)); + BOOST_TEST(testFFN(S("dqmregkcfl"), "akmle", 9, 1, 9)); + BOOST_TEST(testFFN(S("ngcrieqajf"), "iqfkm", 9, 2, 9)); + BOOST_TEST(testFFN(S("qosmilgnjb"), "tqjsr", 9, 4, 9)); + BOOST_TEST(testFFN(S("ikabsjtdfl"), "jplqg", 9, 5, S::npos)); + BOOST_TEST(testFFN(S("ersmicafdh"), "oilnrbcgtj", 9, 0, 9)); + BOOST_TEST(testFFN(S("fdnplotmgh"), "morkglpesn", 9, 1, 9)); + BOOST_TEST(testFFN(S("fdbicojerm"), "dmicerngat", 9, 5, S::npos)); + BOOST_TEST(testFFN(S("mbtafndjcq"), "radgeskbtc", 9, 9, 9)); + BOOST_TEST(testFFN(S("mlenkpfdtc"), "ljikprsmqo", 9, 10, 9)); + BOOST_TEST(testFFN(S("ahlcifdqgs"), "trqihkcgsjamfdbolnpe", 9, 0, 9)); + BOOST_TEST(testFFN(S("bgjemaltks"), "lqmthbsrekajgnofcipd", 9, 1, 9)); + BOOST_TEST(testFFN(S("pdhslbqrfc"), "jtalmedribkgqsopcnfh", 9, 10, 9)); + BOOST_TEST(testFFN(S("dirhtsnjkc"), "spqfoiclmtagejbndkrh", 9, 19, S::npos)); + BOOST_TEST(testFFN(S("dlroktbcja"), "nmotklspigjrdhcfaebq", 9, 20, S::npos)); + BOOST_TEST(testFFN(S("ncjpmaekbs"), "", 10, 0, S::npos)); + BOOST_TEST(testFFN(S("hlbosgmrak"), "hpmsd", 10, 0, S::npos)); + BOOST_TEST(testFFN(S("pqfhsgilen"), "qnpor", 10, 1, S::npos)); + BOOST_TEST(testFFN(S("gqtjsbdckh"), "otdma", 10, 2, S::npos)); + BOOST_TEST(testFFN(S("cfkqpjlegi"), "efhjg", 10, 4, S::npos)); + BOOST_TEST(testFFN(S("beanrfodgj"), "odpte", 10, 5, S::npos)); + BOOST_TEST(testFFN(S("adtkqpbjfi"), "bctdgfmolr", 10, 0, S::npos)); + BOOST_TEST(testFFN(S("iomkfthagj"), "oaklidrbqg", 10, 1, S::npos)); + BOOST_TEST(testFFN(S("sdpcilonqj"), "dnjfsagktr", 10, 5, S::npos)); + BOOST_TEST(testFFN(S("gtfbdkqeml"), "nejaktmiqg", 10, 9, S::npos)); + BOOST_TEST(testFFN(S("bmeqgcdorj"), "pjqonlebsf", 10, 10, S::npos)); + BOOST_TEST(testFFN(S("etqlcanmob"), "dshmnbtolcjepgaikfqr", 10, 0, S::npos)); + BOOST_TEST(testFFN(S("roqmkbdtia"), "iogfhpabtjkqlrnemcds", 10, 1, S::npos)); + BOOST_TEST(testFFN(S("kadsithljf"), "ngridfabjsecpqltkmoh", 10, 10, S::npos)); + BOOST_TEST(testFFN(S("sgtkpbfdmh"), "athmknplcgofrqejsdib", 10, 19, S::npos)); + BOOST_TEST(testFFN(S("qgmetnabkl"), "ldobhmqcafnjtkeisgrp", 10, 20, S::npos)); + BOOST_TEST(testFFN(S("cqjohampgd"), "", 11, 0, S::npos)); + BOOST_TEST(testFFN(S("hobitmpsan"), "aocjb", 11, 0, S::npos)); + BOOST_TEST(testFFN(S("tjehkpsalm"), "jbrnk", 11, 1, S::npos)); + BOOST_TEST(testFFN(S("ngfbojitcl"), "tqedg", 11, 2, S::npos)); + BOOST_TEST(testFFN(S("rcfkdbhgjo"), "nqskp", 11, 4, S::npos)); + BOOST_TEST(testFFN(S("qghptonrea"), "eaqkl", 11, 5, S::npos)); + BOOST_TEST(testFFN(S("hnprfgqjdl"), "reaoicljqm", 11, 0, S::npos)); + BOOST_TEST(testFFN(S("hlmgabenti"), "lsftgajqpm", 11, 1, S::npos)); + BOOST_TEST(testFFN(S("ofcjanmrbs"), "rlpfogmits", 11, 5, S::npos)); + BOOST_TEST(testFFN(S("jqedtkornm"), "shkncmiaqj", 11, 9, S::npos)); + BOOST_TEST(testFFN(S("rfedlasjmg"), "fpnatrhqgs", 11, 10, S::npos)); + BOOST_TEST(testFFN(S("talpqjsgkm"), "sjclemqhnpdbgikarfot", 11, 0, S::npos)); + BOOST_TEST(testFFN(S("lrkcbtqpie"), "otcmedjikgsfnqbrhpla", 11, 1, S::npos)); + BOOST_TEST(testFFN(S("cipogdskjf"), "bonsaefdqiprkhlgtjcm", 11, 10, S::npos)); + BOOST_TEST(testFFN(S("nqedcojahi"), "egpscmahijlfnkrodqtb", 11, 19, S::npos)); + BOOST_TEST(testFFN(S("hefnrkmctj"), "kmqbfepjthgilscrndoa", 11, 20, S::npos)); + BOOST_TEST(testFFN(S("atqirnmekfjolhpdsgcb"), "", 0, 0, 0)); + BOOST_TEST(testFFN(S("echfkmlpribjnqsaogtd"), "prboq", 0, 0, 0)); + BOOST_TEST(testFFN(S("qnhiftdgcleajbpkrosm"), "fjcqh", 0, 1, 0)); + BOOST_TEST(testFFN(S("chamfknorbedjitgslpq"), "fmosa", 0, 2, 0)); + BOOST_TEST(testFFN(S("njhqpibfmtlkaecdrgso"), "qdbok", 0, 4, 0)); + BOOST_TEST(testFFN(S("ebnghfsqkprmdcljoiat"), "amslg", 0, 5, 0)); + BOOST_TEST(testFFN(S("letjomsgihfrpqbkancd"), "smpltjneqb", 0, 0, 0)); + BOOST_TEST(testFFN(S("nblgoipcrqeaktshjdmf"), "flitskrnge", 0, 1, 0)); + BOOST_TEST(testFFN(S("cehkbngtjoiflqapsmrd"), "pgqihmlbef", 0, 5, 0)); + BOOST_TEST(testFFN(S("mignapfoklbhcqjetdrs"), "cfpdqjtgsb", 0, 9, 0)); + BOOST_TEST(testFFN(S("ceatbhlsqjgpnokfrmdi"), "htpsiaflom", 0, 10, 0)); + BOOST_TEST(testFFN(S("ocihkjgrdelpfnmastqb"), "kpjfiaceghsrdtlbnomq", 0, 0, 0)); + BOOST_TEST(testFFN(S("noelgschdtbrjfmiqkap"), "qhtbomidljgafneksprc", 0, 1, 0)); + BOOST_TEST(testFFN(S("dkclqfombepritjnghas"), "nhtjobkcefldimpsaqgr", 0, 10, 0)); + BOOST_TEST(testFFN(S("miklnresdgbhqcojftap"), "prabcjfqnoeskilmtgdh", 0, 19, 11)); + BOOST_TEST(testFFN(S("htbcigojaqmdkfrnlsep"), "dtrgmchilkasqoebfpjn", 0, 20, S::npos)); + BOOST_TEST(testFFN(S("febhmqtjanokscdirpgl"), "", 1, 0, 1)); + BOOST_TEST(testFFN(S("loakbsqjpcrdhftniegm"), "sqome", 1, 0, 1)); + BOOST_TEST(testFFN(S("reagphsqflbitdcjmkno"), "smfte", 1, 1, 1)); + BOOST_TEST(testFFN(S("jitlfrqemsdhkopncabg"), "ciboh", 1, 2, 2)); + BOOST_TEST(testFFN(S("mhtaepscdnrjqgbkifol"), "haois", 1, 4, 2)); + BOOST_TEST(testFFN(S("tocesrfmnglpbjihqadk"), "abfki", 1, 5, 1)); + BOOST_TEST(testFFN(S("lpfmctjrhdagneskbqoi"), "frdkocntmq", 1, 0, 1)); + BOOST_TEST(testFFN(S("lsmqaepkdhncirbtjfgo"), "oasbpedlnr", 1, 1, 1)); + BOOST_TEST(testFFN(S("epoiqmtldrabnkjhcfsg"), "kltqmhgand", 1, 5, 1)); + BOOST_TEST(testFFN(S("emgasrilpknqojhtbdcf"), "gdtfjchpmr", 1, 9, 3)); + BOOST_TEST(testFFN(S("hnfiagdpcklrjetqbsom"), "ponmcqblet", 1, 10, 2)); + BOOST_TEST(testFFN(S("nsdfebgajhmtricpoklq"), "sgphqdnofeiklatbcmjr", 1, 0, 1)); + BOOST_TEST(testFFN(S("atjgfsdlpobmeiqhncrk"), "ljqprsmigtfoneadckbh", 1, 1, 1)); + BOOST_TEST(testFFN(S("sitodfgnrejlahcbmqkp"), "ligeojhafnkmrcsqtbdp", 1, 10, 2)); + BOOST_TEST(testFFN(S("fraghmbiceknltjpqosd"), "lsimqfnjarbopedkhcgt", 1, 19, 13)); + BOOST_TEST(testFFN(S("pmafenlhqtdbkirjsogc"), "abedmfjlghniorcqptks", 1, 20, S::npos)); + BOOST_TEST(testFFN(S("pihgmoeqtnakrjslcbfd"), "", 10, 0, 10)); + BOOST_TEST(testFFN(S("gjdkeprctqblnhiafsom"), "hqtoa", 10, 0, 10)); + BOOST_TEST(testFFN(S("mkpnblfdsahrcqijteog"), "cahif", 10, 1, 10)); + BOOST_TEST(testFFN(S("gckarqnelodfjhmbptis"), "kehis", 10, 2, 10)); + BOOST_TEST(testFFN(S("gqpskidtbclomahnrjfe"), "kdlmh", 10, 4, 11)); + BOOST_TEST(testFFN(S("pkldjsqrfgitbhmaecno"), "paeql", 10, 5, 10)); + BOOST_TEST(testFFN(S("aftsijrbeklnmcdqhgop"), "aghoqiefnb", 10, 0, 10)); + BOOST_TEST(testFFN(S("mtlgdrhafjkbiepqnsoc"), "jrbqaikpdo", 10, 1, 10)); + BOOST_TEST(testFFN(S("pqgirnaefthokdmbsclj"), "smjonaeqcl", 10, 5, 10)); + BOOST_TEST(testFFN(S("kpdbgjmtherlsfcqoina"), "eqbdrkcfah", 10, 9, 11)); + BOOST_TEST(testFFN(S("jrlbothiknqmdgcfasep"), "kapmsienhf", 10, 10, 10)); + BOOST_TEST(testFFN(S("mjogldqferckabinptsh"), "jpqotrlenfcsbhkaimdg", 10, 0, 10)); + BOOST_TEST(testFFN(S("apoklnefbhmgqcdrisjt"), "jlbmhnfgtcqprikeados", 10, 1, 10)); + BOOST_TEST(testFFN(S("ifeopcnrjbhkdgatmqls"), "stgbhfmdaljnpqoicker", 10, 10, 11)); + BOOST_TEST(testFFN(S("ckqhaiesmjdnrgolbtpf"), "oihcetflbjagdsrkmqpn", 10, 19, 11)); + BOOST_TEST(testFFN(S("bnlgapfimcoterskqdjh"), "adtclebmnpjsrqfkigoh", 10, 20, S::npos)); + BOOST_TEST(testFFN(S("kgdlrobpmjcthqsafeni"), "", 19, 0, 19)); + BOOST_TEST(testFFN(S("dfkechomjapgnslbtqir"), "beafg", 19, 0, 19)); + BOOST_TEST(testFFN(S("rloadknfbqtgmhcsipje"), "iclat", 19, 1, 19)); + BOOST_TEST(testFFN(S("mgjhkolrnadqbpetcifs"), "rkhnf", 19, 2, 19)); + BOOST_TEST(testFFN(S("cmlfakiojdrgtbsphqen"), "clshq", 19, 4, 19)); + BOOST_TEST(testFFN(S("kghbfipeomsntdalrqjc"), "dtcoj", 19, 5, S::npos)); + BOOST_TEST(testFFN(S("eldiqckrnmtasbghjfpo"), "rqosnjmfth", 19, 0, 19)); + BOOST_TEST(testFFN(S("abqjcfedgotihlnspkrm"), "siatdfqglh", 19, 1, 19)); + BOOST_TEST(testFFN(S("qfbadrtjsimkolcenhpg"), "mrlshtpgjq", 19, 5, 19)); + BOOST_TEST(testFFN(S("abseghclkjqifmtodrnp"), "adlcskgqjt", 19, 9, 19)); + BOOST_TEST(testFFN(S("ibmsnlrjefhtdokacqpg"), "drshcjknaf", 19, 10, 19)); + BOOST_TEST(testFFN(S("mrkfciqjebaponsthldg"), "etsaqroinghpkjdlfcbm", 19, 0, 19)); + BOOST_TEST(testFFN(S("mjkticdeoqshpalrfbgn"), "sgepdnkqliambtrocfhj", 19, 1, 19)); + BOOST_TEST(testFFN(S("rqnoclbdejgiphtfsakm"), "nlmcjaqgbsortfdihkpe", 19, 10, S::npos)); + BOOST_TEST(testFFN(S("plkqbhmtfaeodjcrsing"), "racfnpmosldibqkghjet", 19, 19, S::npos)); + BOOST_TEST(testFFN(S("oegalhmstjrfickpbndq"), "fjhdsctkqeiolagrnmbp", 19, 20, S::npos)); + BOOST_TEST(testFFN(S("rdtgjcaohpblniekmsfq"), "", 20, 0, S::npos)); + BOOST_TEST(testFFN(S("ofkqbnjetrmsaidphglc"), "ejanp", 20, 0, S::npos)); + BOOST_TEST(testFFN(S("grkpahljcftesdmonqib"), "odife", 20, 1, S::npos)); + BOOST_TEST(testFFN(S("jimlgbhfqkteospardcn"), "okaqd", 20, 2, S::npos)); + BOOST_TEST(testFFN(S("gftenihpmslrjkqadcob"), "lcdbi", 20, 4, S::npos)); + BOOST_TEST(testFFN(S("bmhldogtckrfsanijepq"), "fsqbj", 20, 5, S::npos)); + BOOST_TEST(testFFN(S("nfqkrpjdesabgtlcmoih"), "bigdomnplq", 20, 0, S::npos)); + BOOST_TEST(testFFN(S("focalnrpiqmdkstehbjg"), "apiblotgcd", 20, 1, S::npos)); + BOOST_TEST(testFFN(S("rhqdspkmebiflcotnjga"), "acfhdenops", 20, 5, S::npos)); + BOOST_TEST(testFFN(S("rahdtmsckfboqlpniegj"), "jopdeamcrk", 20, 9, S::npos)); + BOOST_TEST(testFFN(S("fbkeiopclstmdqranjhg"), "trqncbkgmh", 20, 10, S::npos)); + BOOST_TEST(testFFN(S("lifhpdgmbconstjeqark"), "tomglrkencbsfjqpihda", 20, 0, S::npos)); + BOOST_TEST(testFFN(S("pboqganrhedjmltsicfk"), "gbkhdnpoietfcmrslajq", 20, 1, S::npos)); + BOOST_TEST(testFFN(S("klchabsimetjnqgorfpd"), "rtfnmbsglkjaichoqedp", 20, 10, S::npos)); + BOOST_TEST(testFFN(S("sirfgmjqhctndbklaepo"), "ohkmdpfqbsacrtjnlgei", 20, 19, S::npos)); + BOOST_TEST(testFFN(S("rlbdsiceaonqjtfpghkm"), "dlbrteoisgphmkncajfq", 20, 20, S::npos)); + BOOST_TEST(testFFN(S("ecgdanriptblhjfqskom"), "", 21, 0, S::npos)); + BOOST_TEST(testFFN(S("fdmiarlpgcskbhoteqjn"), "sjrlo", 21, 0, S::npos)); + BOOST_TEST(testFFN(S("rlbstjqopignecmfadkh"), "qjpor", 21, 1, S::npos)); + BOOST_TEST(testFFN(S("grjpqmbshektdolcafni"), "odhfn", 21, 2, S::npos)); + BOOST_TEST(testFFN(S("sakfcohtqnibprjmlged"), "qtfin", 21, 4, S::npos)); + BOOST_TEST(testFFN(S("mjtdglasihqpocebrfkn"), "hpqfo", 21, 5, S::npos)); + BOOST_TEST(testFFN(S("okaplfrntghqbmeicsdj"), "fabmertkos", 21, 0, S::npos)); + BOOST_TEST(testFFN(S("sahngemrtcjidqbklfpo"), "brqtgkmaej", 21, 1, S::npos)); + BOOST_TEST(testFFN(S("dlmsipcnekhbgoaftqjr"), "nfrdeihsgl", 21, 5, S::npos)); + BOOST_TEST(testFFN(S("ahegrmqnoiklpfsdbcjt"), "hlfrosekpi", 21, 9, S::npos)); + BOOST_TEST(testFFN(S("hdsjbnmlegtkqripacof"), "atgbkrjdsm", 21, 10, S::npos)); + BOOST_TEST(testFFN(S("pcnedrfjihqbalkgtoms"), "blnrptjgqmaifsdkhoec", 21, 0, S::npos)); + BOOST_TEST(testFFN(S("qjidealmtpskrbfhocng"), "ctpmdahebfqjgknloris", 21, 1, S::npos)); + BOOST_TEST(testFFN(S("qeindtagmokpfhsclrbj"), "apnkeqthrmlbfodiscgj", 21, 10, S::npos)); + BOOST_TEST(testFFN(S("kpfegbjhsrnodltqciam"), "jdgictpframeoqlsbknh", 21, 19, S::npos)); + BOOST_TEST(testFFN(S("hnbrcplsjfgiktoedmaq"), "qprlsfojamgndekthibc", 21, 20, S::npos)); + + // find_last_not_of + + BOOST_TEST(fs1.find_last_not_of(v3) == 2); + BOOST_TEST(fs1.find_last_not_of(v4) == 3); + BOOST_TEST(fs1.find_last_not_of(fs3) == 2); + BOOST_TEST(fs1.find_last_not_of(fs4) == 3); + + BOOST_TEST(fs1.find_last_not_of(cs3) == 2); + BOOST_TEST(fs1.find_last_not_of(cs4) == 3); + + BOOST_TEST(fs1.find_last_not_of(cs3, 0) == -1); + BOOST_TEST(fs1.find_last_not_of(cs4, 0) == 0); + + BOOST_TEST(fs1.find_last_not_of(cs4, 0, 2) == 0); + + BOOST_TEST(fs1.find_last_not_of(cs3, 4) == 2); + BOOST_TEST(fs1.find_last_not_of(cs4, 4) == 3); + + BOOST_TEST(fs1.find_last_not_of('1') == 4); + BOOST_TEST(fs1.find_last_not_of('1', 3) == 3); + + + BOOST_TEST(testFLN(S(""), "", 0, 0, S::npos)); + BOOST_TEST(testFLN(S(""), "irkhs", 0, 0, S::npos)); + BOOST_TEST(testFLN(S(""), "kante", 0, 1, S::npos)); + BOOST_TEST(testFLN(S(""), "oknlr", 0, 2, S::npos)); + BOOST_TEST(testFLN(S(""), "pcdro", 0, 4, S::npos)); + BOOST_TEST(testFLN(S(""), "bnrpe", 0, 5, S::npos)); + BOOST_TEST(testFLN(S(""), "jtdaefblso", 0, 0, S::npos)); + BOOST_TEST(testFLN(S(""), "oselktgbca", 0, 1, S::npos)); + BOOST_TEST(testFLN(S(""), "eqgaplhckj", 0, 5, S::npos)); + BOOST_TEST(testFLN(S(""), "bjahtcmnlp", 0, 9, S::npos)); + BOOST_TEST(testFLN(S(""), "hjlcmgpket", 0, 10, S::npos)); + BOOST_TEST(testFLN(S(""), "htaobedqikfplcgjsmrn", 0, 0, S::npos)); + BOOST_TEST(testFLN(S(""), "hpqiarojkcdlsgnmfetb", 0, 1, S::npos)); + BOOST_TEST(testFLN(S(""), "dfkaprhjloqetcsimnbg", 0, 10, S::npos)); + BOOST_TEST(testFLN(S(""), "ihqrfebgadntlpmjksoc", 0, 19, S::npos)); + BOOST_TEST(testFLN(S(""), "ngtjfcalbseiqrphmkdo", 0, 20, S::npos)); + BOOST_TEST(testFLN(S(""), "", 1, 0, S::npos)); + BOOST_TEST(testFLN(S(""), "lbtqd", 1, 0, S::npos)); + BOOST_TEST(testFLN(S(""), "tboim", 1, 1, S::npos)); + BOOST_TEST(testFLN(S(""), "slcer", 1, 2, S::npos)); + BOOST_TEST(testFLN(S(""), "cbjfs", 1, 4, S::npos)); + BOOST_TEST(testFLN(S(""), "aqibs", 1, 5, S::npos)); + BOOST_TEST(testFLN(S(""), "gtfblmqinc", 1, 0, S::npos)); + BOOST_TEST(testFLN(S(""), "mkqpbtdalg", 1, 1, S::npos)); + BOOST_TEST(testFLN(S(""), "kphatlimcd", 1, 5, S::npos)); + BOOST_TEST(testFLN(S(""), "pblasqogic", 1, 9, S::npos)); + BOOST_TEST(testFLN(S(""), "arosdhcfme", 1, 10, S::npos)); + BOOST_TEST(testFLN(S(""), "blkhjeogicatqfnpdmsr", 1, 0, S::npos)); + BOOST_TEST(testFLN(S(""), "bmhineprjcoadgstflqk", 1, 1, S::npos)); + BOOST_TEST(testFLN(S(""), "djkqcmetslnghpbarfoi", 1, 10, S::npos)); + BOOST_TEST(testFLN(S(""), "lgokshjtpbemarcdqnfi", 1, 19, S::npos)); + BOOST_TEST(testFLN(S(""), "bqjhtkfepimcnsgrlado", 1, 20, S::npos)); + BOOST_TEST(testFLN(S("eaint"), "", 0, 0, 0)); + BOOST_TEST(testFLN(S("binja"), "gfsrt", 0, 0, 0)); + BOOST_TEST(testFLN(S("latkm"), "pfsoc", 0, 1, 0)); + BOOST_TEST(testFLN(S("lecfr"), "tpflm", 0, 2, 0)); + BOOST_TEST(testFLN(S("eqkst"), "sgkec", 0, 4, S::npos)); + BOOST_TEST(testFLN(S("cdafr"), "romds", 0, 5, 0)); + BOOST_TEST(testFLN(S("prbhe"), "qhjistlgmr", 0, 0, 0)); + BOOST_TEST(testFLN(S("lbisk"), "pedfirsglo", 0, 1, 0)); + BOOST_TEST(testFLN(S("hrlpd"), "aqcoslgrmk", 0, 5, 0)); + BOOST_TEST(testFLN(S("ehmja"), "dabckmepqj", 0, 9, S::npos)); + BOOST_TEST(testFLN(S("mhqgd"), "pqscrjthli", 0, 10, 0)); + BOOST_TEST(testFLN(S("tgklq"), "kfphdcsjqmobliagtren", 0, 0, 0)); + BOOST_TEST(testFLN(S("bocjs"), "rokpefncljibsdhqtagm", 0, 1, 0)); + BOOST_TEST(testFLN(S("grbsd"), "afionmkphlebtcjqsgrd", 0, 10, 0)); + BOOST_TEST(testFLN(S("ofjqr"), "aenmqplidhkofrjbctsg", 0, 19, S::npos)); + BOOST_TEST(testFLN(S("btlfi"), "osjmbtcadhiklegrpqnf", 0, 20, S::npos)); + BOOST_TEST(testFLN(S("clrgb"), "", 1, 0, 1)); + BOOST_TEST(testFLN(S("tjmek"), "osmia", 1, 0, 1)); + BOOST_TEST(testFLN(S("bgstp"), "ckonl", 1, 1, 1)); + BOOST_TEST(testFLN(S("hstrk"), "ilcaj", 1, 2, 1)); + BOOST_TEST(testFLN(S("kmspj"), "lasiq", 1, 4, 1)); + BOOST_TEST(testFLN(S("tjboh"), "kfqmr", 1, 5, 1)); + BOOST_TEST(testFLN(S("ilbcj"), "klnitfaobg", 1, 0, 1)); + BOOST_TEST(testFLN(S("jkngf"), "gjhmdlqikp", 1, 1, 1)); + BOOST_TEST(testFLN(S("gfcql"), "skbgtahqej", 1, 5, 1)); + BOOST_TEST(testFLN(S("dqtlg"), "bjsdgtlpkf", 1, 9, 1)); + BOOST_TEST(testFLN(S("bthpg"), "bjgfmnlkio", 1, 10, 1)); + BOOST_TEST(testFLN(S("dgsnq"), "lbhepotfsjdqigcnamkr", 1, 0, 1)); + BOOST_TEST(testFLN(S("rmfhp"), "tebangckmpsrqdlfojhi", 1, 1, 1)); + BOOST_TEST(testFLN(S("jfdam"), "joflqbdkhtegimscpanr", 1, 10, S::npos)); + BOOST_TEST(testFLN(S("edapb"), "adpmcohetfbsrjinlqkg", 1, 19, S::npos)); + BOOST_TEST(testFLN(S("brfsm"), "iacldqjpfnogbsrhmetk", 1, 20, S::npos)); + BOOST_TEST(testFLN(S("ndrhl"), "", 2, 0, 2)); + BOOST_TEST(testFLN(S("mrecp"), "otkgb", 2, 0, 2)); + BOOST_TEST(testFLN(S("qlasf"), "cqsjl", 2, 1, 2)); + BOOST_TEST(testFLN(S("smaqd"), "dpifl", 2, 2, 2)); + BOOST_TEST(testFLN(S("hjeni"), "oapht", 2, 4, 2)); + BOOST_TEST(testFLN(S("ocmfj"), "cifts", 2, 5, 2)); + BOOST_TEST(testFLN(S("hmftq"), "nmsckbgalo", 2, 0, 2)); + BOOST_TEST(testFLN(S("fklad"), "tpksqhamle", 2, 1, 2)); + BOOST_TEST(testFLN(S("dirnm"), "tpdrchmkji", 2, 5, 1)); + BOOST_TEST(testFLN(S("hrgdc"), "ijagfkblst", 2, 9, 1)); + BOOST_TEST(testFLN(S("ifakg"), "kpocsignjb", 2, 10, 2)); + BOOST_TEST(testFLN(S("ebrgd"), "pecqtkjsnbdrialgmohf", 2, 0, 2)); + BOOST_TEST(testFLN(S("rcjml"), "aiortphfcmkjebgsndql", 2, 1, 2)); + BOOST_TEST(testFLN(S("peqmt"), "sdbkeamglhipojqftrcn", 2, 10, 2)); + BOOST_TEST(testFLN(S("frehn"), "ljqncehgmfktroapidbs", 2, 19, S::npos)); + BOOST_TEST(testFLN(S("tqolf"), "rtcfodilamkbenjghqps", 2, 20, S::npos)); + BOOST_TEST(testFLN(S("cjgao"), "", 4, 0, 4)); + BOOST_TEST(testFLN(S("kjplq"), "mabns", 4, 0, 4)); + BOOST_TEST(testFLN(S("herni"), "bdnrp", 4, 1, 4)); + BOOST_TEST(testFLN(S("tadrb"), "scidp", 4, 2, 4)); + BOOST_TEST(testFLN(S("pkfeo"), "agbjl", 4, 4, 4)); + BOOST_TEST(testFLN(S("hoser"), "jfmpr", 4, 5, 3)); + BOOST_TEST(testFLN(S("kgrsp"), "rbpefghsmj", 4, 0, 4)); + BOOST_TEST(testFLN(S("pgejb"), "apsfntdoqc", 4, 1, 4)); + BOOST_TEST(testFLN(S("thlnq"), "ndkjeisgcl", 4, 5, 4)); + BOOST_TEST(testFLN(S("nbmit"), "rnfpqatdeo", 4, 9, 3)); + BOOST_TEST(testFLN(S("jgmib"), "bntjlqrfik", 4, 10, 2)); + BOOST_TEST(testFLN(S("ncrfj"), "kcrtmpolnaqejghsfdbi", 4, 0, 4)); + BOOST_TEST(testFLN(S("ncsik"), "lobheanpkmqidsrtcfgj", 4, 1, 4)); + BOOST_TEST(testFLN(S("sgbfh"), "athdkljcnreqbgpmisof", 4, 10, 3)); + BOOST_TEST(testFLN(S("dktbn"), "qkdmjialrscpbhefgont", 4, 19, 2)); + BOOST_TEST(testFLN(S("fthqm"), "dmasojntqleribkgfchp", 4, 20, S::npos)); + BOOST_TEST(testFLN(S("klopi"), "", 5, 0, 4)); + BOOST_TEST(testFLN(S("dajhn"), "psthd", 5, 0, 4)); + BOOST_TEST(testFLN(S("jbgno"), "rpmjd", 5, 1, 4)); + BOOST_TEST(testFLN(S("hkjae"), "dfsmk", 5, 2, 4)); + BOOST_TEST(testFLN(S("gbhqo"), "skqne", 5, 4, 4)); + BOOST_TEST(testFLN(S("ktdor"), "kipnf", 5, 5, 4)); + BOOST_TEST(testFLN(S("ldprn"), "hmrnqdgifl", 5, 0, 4)); + BOOST_TEST(testFLN(S("egmjk"), "fsmjcdairn", 5, 1, 4)); + BOOST_TEST(testFLN(S("armql"), "pcdgltbrfj", 5, 5, 3)); + BOOST_TEST(testFLN(S("cdhjo"), "aekfctpirg", 5, 9, 4)); + BOOST_TEST(testFLN(S("jcons"), "ledihrsgpf", 5, 10, 3)); + BOOST_TEST(testFLN(S("cbrkp"), "mqcklahsbtirgopefndj", 5, 0, 4)); + BOOST_TEST(testFLN(S("fhgna"), "kmlthaoqgecrnpdbjfis", 5, 1, 4)); + BOOST_TEST(testFLN(S("ejfcd"), "sfhbamcdptojlkrenqgi", 5, 10, 1)); + BOOST_TEST(testFLN(S("kqjhe"), "pbniofmcedrkhlstgaqj", 5, 19, 2)); + BOOST_TEST(testFLN(S("pbdjl"), "mongjratcskbhqiepfdl", 5, 20, S::npos)); + BOOST_TEST(testFLN(S("gajqn"), "", 6, 0, 4)); + BOOST_TEST(testFLN(S("stedk"), "hrnat", 6, 0, 4)); + BOOST_TEST(testFLN(S("tjkaf"), "gsqdt", 6, 1, 4)); + BOOST_TEST(testFLN(S("dthpe"), "bspkd", 6, 2, 4)); + BOOST_TEST(testFLN(S("klhde"), "ohcmb", 6, 4, 4)); + BOOST_TEST(testFLN(S("bhlki"), "heatr", 6, 5, 4)); + BOOST_TEST(testFLN(S("lqmoh"), "pmblckedfn", 6, 0, 4)); + BOOST_TEST(testFLN(S("mtqin"), "aceqmsrbik", 6, 1, 4)); + BOOST_TEST(testFLN(S("dpqbr"), "lmbtdehjrn", 6, 5, 4)); + BOOST_TEST(testFLN(S("kdhmo"), "teqmcrlgib", 6, 9, 4)); + BOOST_TEST(testFLN(S("jblqp"), "njolbmspac", 6, 10, 3)); + BOOST_TEST(testFLN(S("qmjgl"), "pofnhidklamecrbqjgst", 6, 0, 4)); + BOOST_TEST(testFLN(S("rothp"), "jbhckmtgrqnosafedpli", 6, 1, 4)); + BOOST_TEST(testFLN(S("ghknq"), "dobntpmqklicsahgjerf", 6, 10, 1)); + BOOST_TEST(testFLN(S("eopfi"), "tpdshainjkbfoemlrgcq", 6, 19, S::npos)); + BOOST_TEST(testFLN(S("dsnmg"), "oldpfgeakrnitscbjmqh", 6, 20, S::npos)); + BOOST_TEST(testFLN(S("jnkrfhotgl"), "", 0, 0, 0)); + BOOST_TEST(testFLN(S("dltjfngbko"), "rqegt", 0, 0, 0)); + BOOST_TEST(testFLN(S("bmjlpkiqde"), "dashm", 0, 1, 0)); + BOOST_TEST(testFLN(S("skrflobnqm"), "jqirk", 0, 2, 0)); + BOOST_TEST(testFLN(S("jkpldtshrm"), "rckeg", 0, 4, 0)); + BOOST_TEST(testFLN(S("ghasdbnjqo"), "jscie", 0, 5, 0)); + BOOST_TEST(testFLN(S("igrkhpbqjt"), "efsphndliq", 0, 0, 0)); + BOOST_TEST(testFLN(S("ikthdgcamf"), "gdicosleja", 0, 1, 0)); + BOOST_TEST(testFLN(S("pcofgeniam"), "qcpjibosfl", 0, 5, S::npos)); + BOOST_TEST(testFLN(S("rlfjgesqhc"), "lrhmefnjcq", 0, 9, S::npos)); + BOOST_TEST(testFLN(S("itphbqsker"), "dtablcrseo", 0, 10, 0)); + BOOST_TEST(testFLN(S("skjafcirqm"), "apckjsftedbhgomrnilq", 0, 0, 0)); + BOOST_TEST(testFLN(S("tcqomarsfd"), "pcbrgflehjtiadnsokqm", 0, 1, 0)); + BOOST_TEST(testFLN(S("rocfeldqpk"), "nsiadegjklhobrmtqcpf", 0, 10, 0)); + BOOST_TEST(testFLN(S("cfpegndlkt"), "cpmajdqnolikhgsbretf", 0, 19, S::npos)); + BOOST_TEST(testFLN(S("fqbtnkeasj"), "jcflkntmgiqrphdosaeb", 0, 20, S::npos)); + BOOST_TEST(testFLN(S("shbcqnmoar"), "", 1, 0, 1)); + BOOST_TEST(testFLN(S("bdoshlmfin"), "ontrs", 1, 0, 1)); + BOOST_TEST(testFLN(S("khfrebnsgq"), "pfkna", 1, 1, 1)); + BOOST_TEST(testFLN(S("getcrsaoji"), "ekosa", 1, 2, 0)); + BOOST_TEST(testFLN(S("fjiknedcpq"), "anqhk", 1, 4, 1)); + BOOST_TEST(testFLN(S("tkejgnafrm"), "jekca", 1, 5, 0)); + BOOST_TEST(testFLN(S("jnakolqrde"), "ikemsjgacf", 1, 0, 1)); + BOOST_TEST(testFLN(S("lcjptsmgbe"), "arolgsjkhm", 1, 1, 1)); + BOOST_TEST(testFLN(S("itfsmcjorl"), "oftkbldhre", 1, 5, 0)); + BOOST_TEST(testFLN(S("omchkfrjea"), "gbkqdoeftl", 1, 9, 1)); + BOOST_TEST(testFLN(S("cigfqkated"), "sqcflrgtim", 1, 10, S::npos)); + BOOST_TEST(testFLN(S("tscenjikml"), "fmhbkislrjdpanogqcet", 1, 0, 1)); + BOOST_TEST(testFLN(S("qcpaemsinf"), "rnioadktqlgpbcjsmhef", 1, 1, 1)); + BOOST_TEST(testFLN(S("gltkojeipd"), "oakgtnldpsefihqmjcbr", 1, 10, S::npos)); + BOOST_TEST(testFLN(S("qistfrgnmp"), "gbnaelosidmcjqktfhpr", 1, 19, S::npos)); + BOOST_TEST(testFLN(S("bdnpfcqaem"), "akbripjhlosndcmqgfet", 1, 20, S::npos)); + BOOST_TEST(testFLN(S("ectnhskflp"), "", 5, 0, 5)); + BOOST_TEST(testFLN(S("fgtianblpq"), "pijag", 5, 0, 5)); + BOOST_TEST(testFLN(S("mfeqklirnh"), "jrckd", 5, 1, 5)); + BOOST_TEST(testFLN(S("astedncjhk"), "qcloh", 5, 2, 5)); + BOOST_TEST(testFLN(S("fhlqgcajbr"), "thlmp", 5, 4, 5)); + BOOST_TEST(testFLN(S("epfhocmdng"), "qidmo", 5, 5, 5)); + BOOST_TEST(testFLN(S("apcnsibger"), "lnegpsjqrd", 5, 0, 5)); + BOOST_TEST(testFLN(S("aqkocrbign"), "rjqdablmfs", 5, 1, 4)); + BOOST_TEST(testFLN(S("ijsmdtqgce"), "enkgpbsjaq", 5, 5, 5)); + BOOST_TEST(testFLN(S("clobgsrken"), "kdsgoaijfh", 5, 9, 3)); + BOOST_TEST(testFLN(S("jbhcfposld"), "trfqgmckbe", 5, 10, 5)); + BOOST_TEST(testFLN(S("oqnpblhide"), "igetsracjfkdnpoblhqm", 5, 0, 5)); + BOOST_TEST(testFLN(S("lroeasctif"), "nqctfaogirshlekbdjpm", 5, 1, 5)); + BOOST_TEST(testFLN(S("bpjlgmiedh"), "csehfgomljdqinbartkp", 5, 10, 1)); + BOOST_TEST(testFLN(S("pamkeoidrj"), "qahoegcmplkfsjbdnitr", 5, 19, S::npos)); + BOOST_TEST(testFLN(S("espogqbthk"), "dpteiajrqmsognhlfbkc", 5, 20, S::npos)); + BOOST_TEST(testFLN(S("shoiedtcjb"), "", 9, 0, 9)); + BOOST_TEST(testFLN(S("ebcinjgads"), "tqbnh", 9, 0, 9)); + BOOST_TEST(testFLN(S("dqmregkcfl"), "akmle", 9, 1, 9)); + BOOST_TEST(testFLN(S("ngcrieqajf"), "iqfkm", 9, 2, 9)); + BOOST_TEST(testFLN(S("qosmilgnjb"), "tqjsr", 9, 4, 9)); + BOOST_TEST(testFLN(S("ikabsjtdfl"), "jplqg", 9, 5, 8)); + BOOST_TEST(testFLN(S("ersmicafdh"), "oilnrbcgtj", 9, 0, 9)); + BOOST_TEST(testFLN(S("fdnplotmgh"), "morkglpesn", 9, 1, 9)); + BOOST_TEST(testFLN(S("fdbicojerm"), "dmicerngat", 9, 5, 8)); + BOOST_TEST(testFLN(S("mbtafndjcq"), "radgeskbtc", 9, 9, 9)); + BOOST_TEST(testFLN(S("mlenkpfdtc"), "ljikprsmqo", 9, 10, 9)); + BOOST_TEST(testFLN(S("ahlcifdqgs"), "trqihkcgsjamfdbolnpe", 9, 0, 9)); + BOOST_TEST(testFLN(S("bgjemaltks"), "lqmthbsrekajgnofcipd", 9, 1, 9)); + BOOST_TEST(testFLN(S("pdhslbqrfc"), "jtalmedribkgqsopcnfh", 9, 10, 9)); + BOOST_TEST(testFLN(S("dirhtsnjkc"), "spqfoiclmtagejbndkrh", 9, 19, 3)); + BOOST_TEST(testFLN(S("dlroktbcja"), "nmotklspigjrdhcfaebq", 9, 20, S::npos)); + BOOST_TEST(testFLN(S("ncjpmaekbs"), "", 10, 0, 9)); + BOOST_TEST(testFLN(S("hlbosgmrak"), "hpmsd", 10, 0, 9)); + BOOST_TEST(testFLN(S("pqfhsgilen"), "qnpor", 10, 1, 9)); + BOOST_TEST(testFLN(S("gqtjsbdckh"), "otdma", 10, 2, 9)); + BOOST_TEST(testFLN(S("cfkqpjlegi"), "efhjg", 10, 4, 9)); + BOOST_TEST(testFLN(S("beanrfodgj"), "odpte", 10, 5, 9)); + BOOST_TEST(testFLN(S("adtkqpbjfi"), "bctdgfmolr", 10, 0, 9)); + BOOST_TEST(testFLN(S("iomkfthagj"), "oaklidrbqg", 10, 1, 9)); + BOOST_TEST(testFLN(S("sdpcilonqj"), "dnjfsagktr", 10, 5, 8)); + BOOST_TEST(testFLN(S("gtfbdkqeml"), "nejaktmiqg", 10, 9, 9)); + BOOST_TEST(testFLN(S("bmeqgcdorj"), "pjqonlebsf", 10, 10, 8)); + BOOST_TEST(testFLN(S("etqlcanmob"), "dshmnbtolcjepgaikfqr", 10, 0, 9)); + BOOST_TEST(testFLN(S("roqmkbdtia"), "iogfhpabtjkqlrnemcds", 10, 1, 9)); + BOOST_TEST(testFLN(S("kadsithljf"), "ngridfabjsecpqltkmoh", 10, 10, 7)); + BOOST_TEST(testFLN(S("sgtkpbfdmh"), "athmknplcgofrqejsdib", 10, 19, 5)); + BOOST_TEST(testFLN(S("qgmetnabkl"), "ldobhmqcafnjtkeisgrp", 10, 20, S::npos)); + BOOST_TEST(testFLN(S("cqjohampgd"), "", 11, 0, 9)); + BOOST_TEST(testFLN(S("hobitmpsan"), "aocjb", 11, 0, 9)); + BOOST_TEST(testFLN(S("tjehkpsalm"), "jbrnk", 11, 1, 9)); + BOOST_TEST(testFLN(S("ngfbojitcl"), "tqedg", 11, 2, 9)); + BOOST_TEST(testFLN(S("rcfkdbhgjo"), "nqskp", 11, 4, 9)); + BOOST_TEST(testFLN(S("qghptonrea"), "eaqkl", 11, 5, 7)); + BOOST_TEST(testFLN(S("hnprfgqjdl"), "reaoicljqm", 11, 0, 9)); + BOOST_TEST(testFLN(S("hlmgabenti"), "lsftgajqpm", 11, 1, 9)); + BOOST_TEST(testFLN(S("ofcjanmrbs"), "rlpfogmits", 11, 5, 9)); + BOOST_TEST(testFLN(S("jqedtkornm"), "shkncmiaqj", 11, 9, 7)); + BOOST_TEST(testFLN(S("rfedlasjmg"), "fpnatrhqgs", 11, 10, 8)); + BOOST_TEST(testFLN(S("talpqjsgkm"), "sjclemqhnpdbgikarfot", 11, 0, 9)); + BOOST_TEST(testFLN(S("lrkcbtqpie"), "otcmedjikgsfnqbrhpla", 11, 1, 9)); + BOOST_TEST(testFLN(S("cipogdskjf"), "bonsaefdqiprkhlgtjcm", 11, 10, 8)); + BOOST_TEST(testFLN(S("nqedcojahi"), "egpscmahijlfnkrodqtb", 11, 19, S::npos)); + BOOST_TEST(testFLN(S("hefnrkmctj"), "kmqbfepjthgilscrndoa", 11, 20, S::npos)); + BOOST_TEST(testFLN(S("atqirnmekfjolhpdsgcb"), "", 0, 0, 0)); + BOOST_TEST(testFLN(S("echfkmlpribjnqsaogtd"), "prboq", 0, 0, 0)); + BOOST_TEST(testFLN(S("qnhiftdgcleajbpkrosm"), "fjcqh", 0, 1, 0)); + BOOST_TEST(testFLN(S("chamfknorbedjitgslpq"), "fmosa", 0, 2, 0)); + BOOST_TEST(testFLN(S("njhqpibfmtlkaecdrgso"), "qdbok", 0, 4, 0)); + BOOST_TEST(testFLN(S("ebnghfsqkprmdcljoiat"), "amslg", 0, 5, 0)); + BOOST_TEST(testFLN(S("letjomsgihfrpqbkancd"), "smpltjneqb", 0, 0, 0)); + BOOST_TEST(testFLN(S("nblgoipcrqeaktshjdmf"), "flitskrnge", 0, 1, 0)); + BOOST_TEST(testFLN(S("cehkbngtjoiflqapsmrd"), "pgqihmlbef", 0, 5, 0)); + BOOST_TEST(testFLN(S("mignapfoklbhcqjetdrs"), "cfpdqjtgsb", 0, 9, 0)); + BOOST_TEST(testFLN(S("ceatbhlsqjgpnokfrmdi"), "htpsiaflom", 0, 10, 0)); + BOOST_TEST(testFLN(S("ocihkjgrdelpfnmastqb"), "kpjfiaceghsrdtlbnomq", 0, 0, 0)); + BOOST_TEST(testFLN(S("noelgschdtbrjfmiqkap"), "qhtbomidljgafneksprc", 0, 1, 0)); + BOOST_TEST(testFLN(S("dkclqfombepritjnghas"), "nhtjobkcefldimpsaqgr", 0, 10, 0)); + BOOST_TEST(testFLN(S("miklnresdgbhqcojftap"), "prabcjfqnoeskilmtgdh", 0, 19, S::npos)); + BOOST_TEST(testFLN(S("htbcigojaqmdkfrnlsep"), "dtrgmchilkasqoebfpjn", 0, 20, S::npos)); + BOOST_TEST(testFLN(S("febhmqtjanokscdirpgl"), "", 1, 0, 1)); + BOOST_TEST(testFLN(S("loakbsqjpcrdhftniegm"), "sqome", 1, 0, 1)); + BOOST_TEST(testFLN(S("reagphsqflbitdcjmkno"), "smfte", 1, 1, 1)); + BOOST_TEST(testFLN(S("jitlfrqemsdhkopncabg"), "ciboh", 1, 2, 0)); + BOOST_TEST(testFLN(S("mhtaepscdnrjqgbkifol"), "haois", 1, 4, 0)); + BOOST_TEST(testFLN(S("tocesrfmnglpbjihqadk"), "abfki", 1, 5, 1)); + BOOST_TEST(testFLN(S("lpfmctjrhdagneskbqoi"), "frdkocntmq", 1, 0, 1)); + BOOST_TEST(testFLN(S("lsmqaepkdhncirbtjfgo"), "oasbpedlnr", 1, 1, 1)); + BOOST_TEST(testFLN(S("epoiqmtldrabnkjhcfsg"), "kltqmhgand", 1, 5, 1)); + BOOST_TEST(testFLN(S("emgasrilpknqojhtbdcf"), "gdtfjchpmr", 1, 9, 0)); + BOOST_TEST(testFLN(S("hnfiagdpcklrjetqbsom"), "ponmcqblet", 1, 10, 0)); + BOOST_TEST(testFLN(S("nsdfebgajhmtricpoklq"), "sgphqdnofeiklatbcmjr", 1, 0, 1)); + BOOST_TEST(testFLN(S("atjgfsdlpobmeiqhncrk"), "ljqprsmigtfoneadckbh", 1, 1, 1)); + BOOST_TEST(testFLN(S("sitodfgnrejlahcbmqkp"), "ligeojhafnkmrcsqtbdp", 1, 10, 0)); + BOOST_TEST(testFLN(S("fraghmbiceknltjpqosd"), "lsimqfnjarbopedkhcgt", 1, 19, S::npos)); + BOOST_TEST(testFLN(S("pmafenlhqtdbkirjsogc"), "abedmfjlghniorcqptks", 1, 20, S::npos)); + BOOST_TEST(testFLN(S("pihgmoeqtnakrjslcbfd"), "", 10, 0, 10)); + BOOST_TEST(testFLN(S("gjdkeprctqblnhiafsom"), "hqtoa", 10, 0, 10)); + BOOST_TEST(testFLN(S("mkpnblfdsahrcqijteog"), "cahif", 10, 1, 10)); + BOOST_TEST(testFLN(S("gckarqnelodfjhmbptis"), "kehis", 10, 2, 10)); + BOOST_TEST(testFLN(S("gqpskidtbclomahnrjfe"), "kdlmh", 10, 4, 9)); + BOOST_TEST(testFLN(S("pkldjsqrfgitbhmaecno"), "paeql", 10, 5, 10)); + BOOST_TEST(testFLN(S("aftsijrbeklnmcdqhgop"), "aghoqiefnb", 10, 0, 10)); + BOOST_TEST(testFLN(S("mtlgdrhafjkbiepqnsoc"), "jrbqaikpdo", 10, 1, 10)); + BOOST_TEST(testFLN(S("pqgirnaefthokdmbsclj"), "smjonaeqcl", 10, 5, 10)); + BOOST_TEST(testFLN(S("kpdbgjmtherlsfcqoina"), "eqbdrkcfah", 10, 9, 8)); + BOOST_TEST(testFLN(S("jrlbothiknqmdgcfasep"), "kapmsienhf", 10, 10, 10)); + BOOST_TEST(testFLN(S("mjogldqferckabinptsh"), "jpqotrlenfcsbhkaimdg", 10, 0, 10)); + BOOST_TEST(testFLN(S("apoklnefbhmgqcdrisjt"), "jlbmhnfgtcqprikeados", 10, 1, 10)); + BOOST_TEST(testFLN(S("ifeopcnrjbhkdgatmqls"), "stgbhfmdaljnpqoicker", 10, 10, 8)); + BOOST_TEST(testFLN(S("ckqhaiesmjdnrgolbtpf"), "oihcetflbjagdsrkmqpn", 10, 19, S::npos)); + BOOST_TEST(testFLN(S("bnlgapfimcoterskqdjh"), "adtclebmnpjsrqfkigoh", 10, 20, S::npos)); + BOOST_TEST(testFLN(S("kgdlrobpmjcthqsafeni"), "", 19, 0, 19)); + BOOST_TEST(testFLN(S("dfkechomjapgnslbtqir"), "beafg", 19, 0, 19)); + BOOST_TEST(testFLN(S("rloadknfbqtgmhcsipje"), "iclat", 19, 1, 19)); + BOOST_TEST(testFLN(S("mgjhkolrnadqbpetcifs"), "rkhnf", 19, 2, 19)); + BOOST_TEST(testFLN(S("cmlfakiojdrgtbsphqen"), "clshq", 19, 4, 19)); + BOOST_TEST(testFLN(S("kghbfipeomsntdalrqjc"), "dtcoj", 19, 5, 17)); + BOOST_TEST(testFLN(S("eldiqckrnmtasbghjfpo"), "rqosnjmfth", 19, 0, 19)); + BOOST_TEST(testFLN(S("abqjcfedgotihlnspkrm"), "siatdfqglh", 19, 1, 19)); + BOOST_TEST(testFLN(S("qfbadrtjsimkolcenhpg"), "mrlshtpgjq", 19, 5, 19)); + BOOST_TEST(testFLN(S("abseghclkjqifmtodrnp"), "adlcskgqjt", 19, 9, 19)); + BOOST_TEST(testFLN(S("ibmsnlrjefhtdokacqpg"), "drshcjknaf", 19, 10, 19)); + BOOST_TEST(testFLN(S("mrkfciqjebaponsthldg"), "etsaqroinghpkjdlfcbm", 19, 0, 19)); + BOOST_TEST(testFLN(S("mjkticdeoqshpalrfbgn"), "sgepdnkqliambtrocfhj", 19, 1, 19)); + BOOST_TEST(testFLN(S("rqnoclbdejgiphtfsakm"), "nlmcjaqgbsortfdihkpe", 19, 10, 18)); + BOOST_TEST(testFLN(S("plkqbhmtfaeodjcrsing"), "racfnpmosldibqkghjet", 19, 19, 7)); + BOOST_TEST(testFLN(S("oegalhmstjrfickpbndq"), "fjhdsctkqeiolagrnmbp", 19, 20, S::npos)); + BOOST_TEST(testFLN(S("rdtgjcaohpblniekmsfq"), "", 20, 0, 19)); + BOOST_TEST(testFLN(S("ofkqbnjetrmsaidphglc"), "ejanp", 20, 0, 19)); + BOOST_TEST(testFLN(S("grkpahljcftesdmonqib"), "odife", 20, 1, 19)); + BOOST_TEST(testFLN(S("jimlgbhfqkteospardcn"), "okaqd", 20, 2, 19)); + BOOST_TEST(testFLN(S("gftenihpmslrjkqadcob"), "lcdbi", 20, 4, 18)); + BOOST_TEST(testFLN(S("bmhldogtckrfsanijepq"), "fsqbj", 20, 5, 18)); + BOOST_TEST(testFLN(S("nfqkrpjdesabgtlcmoih"), "bigdomnplq", 20, 0, 19)); + BOOST_TEST(testFLN(S("focalnrpiqmdkstehbjg"), "apiblotgcd", 20, 1, 19)); + BOOST_TEST(testFLN(S("rhqdspkmebiflcotnjga"), "acfhdenops", 20, 5, 18)); + BOOST_TEST(testFLN(S("rahdtmsckfboqlpniegj"), "jopdeamcrk", 20, 9, 18)); + BOOST_TEST(testFLN(S("fbkeiopclstmdqranjhg"), "trqncbkgmh", 20, 10, 17)); + BOOST_TEST(testFLN(S("lifhpdgmbconstjeqark"), "tomglrkencbsfjqpihda", 20, 0, 19)); + BOOST_TEST(testFLN(S("pboqganrhedjmltsicfk"), "gbkhdnpoietfcmrslajq", 20, 1, 19)); + BOOST_TEST(testFLN(S("klchabsimetjnqgorfpd"), "rtfnmbsglkjaichoqedp", 20, 10, 19)); + BOOST_TEST(testFLN(S("sirfgmjqhctndbklaepo"), "ohkmdpfqbsacrtjnlgei", 20, 19, 1)); + BOOST_TEST(testFLN(S("rlbdsiceaonqjtfpghkm"), "dlbrteoisgphmkncajfq", 20, 20, S::npos)); + BOOST_TEST(testFLN(S("ecgdanriptblhjfqskom"), "", 21, 0, 19)); + BOOST_TEST(testFLN(S("fdmiarlpgcskbhoteqjn"), "sjrlo", 21, 0, 19)); + BOOST_TEST(testFLN(S("rlbstjqopignecmfadkh"), "qjpor", 21, 1, 19)); + BOOST_TEST(testFLN(S("grjpqmbshektdolcafni"), "odhfn", 21, 2, 19)); + BOOST_TEST(testFLN(S("sakfcohtqnibprjmlged"), "qtfin", 21, 4, 19)); + BOOST_TEST(testFLN(S("mjtdglasihqpocebrfkn"), "hpqfo", 21, 5, 19)); + BOOST_TEST(testFLN(S("okaplfrntghqbmeicsdj"), "fabmertkos", 21, 0, 19)); + BOOST_TEST(testFLN(S("sahngemrtcjidqbklfpo"), "brqtgkmaej", 21, 1, 19)); + BOOST_TEST(testFLN(S("dlmsipcnekhbgoaftqjr"), "nfrdeihsgl", 21, 5, 18)); + BOOST_TEST(testFLN(S("ahegrmqnoiklpfsdbcjt"), "hlfrosekpi", 21, 9, 19)); + BOOST_TEST(testFLN(S("hdsjbnmlegtkqripacof"), "atgbkrjdsm", 21, 10, 19)); + BOOST_TEST(testFLN(S("pcnedrfjihqbalkgtoms"), "blnrptjgqmaifsdkhoec", 21, 0, 19)); + BOOST_TEST(testFLN(S("qjidealmtpskrbfhocng"), "ctpmdahebfqjgknloris", 21, 1, 19)); + BOOST_TEST(testFLN(S("qeindtagmokpfhsclrbj"), "apnkeqthrmlbfodiscgj", 21, 10, 19)); + BOOST_TEST(testFLN(S("kpfegbjhsrnodltqciam"), "jdgictpframeoqlsbknh", 21, 19, 7)); + BOOST_TEST(testFLN(S("hnbrcplsjfgiktoedmaq"), "qprlsfojamgndekthibc", 21, 20, S::npos)); +} + +template +bool +testR(S s, typename S::size_type pos1, typename S::size_type n1, const typename S::value_type* str, S expected) +{ + typename S::size_type old_size = s.size(); + typename S::const_iterator first = s.begin() + pos1; + typename S::const_iterator last = s.begin() + pos1 + n1; + typename S::size_type xlen = last - first; + s.replace(first, last, str); + return s == expected; +} + +template +bool +testR(S s, typename S::size_type pos, typename S::size_type n1, + typename S::size_type n2, typename S::value_type c, + S expected) +{ + const typename S::size_type old_size = s.size(); + S s0 = s; + if (pos <= old_size) + { + s.replace(pos, n1, n2, c); + return s == expected; + } + else + { + try + { + s.replace(pos, n1, n2, c); + return s == expected; + } + catch (std::out_of_range&) + { + return true; + } + } +} + +template +bool +testR(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) +{ + const typename S::size_type old_size = s.size(); + S s0 = s; + if (pos <= old_size) + { + s.replace(pos, n1, str, n2); + return s == expected; + } + else + { + try + { + s.replace(pos, n1, str, n2); + return s == expected; + } + catch (std::out_of_range&) + { + return true; + } + } +} + +void +testReplace() +{ + { + fixed_string<20> fs1 = "helloworld"; + BOOST_TEST(fs1.replace(5, 2, fs1.data() + 1, 8) == "helloelloworlrld"); + } + { + fixed_string<20> fs1 = "helloworld"; + BOOST_TEST(fs1.replace(3, 2, fs1.data() + 2, 2) == "helllworld"); + } + { + fixed_string<20> fs2 = "0123456789"; + BOOST_TEST(fs2.replace(5, 2, fs2.data(), 2) == "0123401789"); + } + { + fixed_string<20> fs2 = "0123456789"; + BOOST_TEST(fs2.replace(1, 3, fs2.data() + 1, 5) == "012345456789"); + } + { + fixed_string<20> fs2 = "0123456789"; + BOOST_TEST(fs2.replace(0, 5, fs2.data(), 5) == "0123456789"); + } + { + fixed_string<20> fs2 = "0123456789"; + BOOST_TEST(fs2.replace(0, 5, fs2.data() + 5, 5) == "5678956789"); + } + { + fixed_string<20> fs2 = "0123456789"; + BOOST_TEST(fs2.replace(5, 2, fs2.data() + 3, 5) == "0123434567789"); + } + { + fixed_string<20> fs2 = "0123456789"; + BOOST_TEST(fs2.replace(5, 2, fs2.data() + 7, 3) == "01234789789"); + } + { + fixed_string<20> fs2 = "0123456789"; + BOOST_TEST(fs2.replace(3, 5, fs2.data() + 4, 2) == "0124589"); + } + { + fixed_string<20> fs2 = "0123456789"; + BOOST_TEST(fs2.replace(3, 5, fs2.data() + 1, 3) == "01212389"); + } + { + fixed_string<20> fs2 = "0123456789"; + BOOST_TEST(fs2.replace(0, 10, fs2.data(), 10) == "0123456789"); + } + { + fixed_string<20> fs2 = "0123456789"; + BOOST_TEST(fs2.replace(0, 10, fs2.data(), 5) == "01234"); + } + using S = fixed_string<400>; + + + S s_short = "123/"; + S s_long = "Lorem ipsum dolor sit amet, consectetur/"; + + BOOST_TEST(s_short.replace(s_short.begin(), s_short.begin(), s_short.begin(), s_short.end()) == "123/123/"); + BOOST_TEST(s_short.replace(s_short.begin(), s_short.begin(), s_short.begin(), s_short.end()) == "123/123/123/123/"); + 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/"); + 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/"); + + BOOST_TEST(testR(S(""), 0, 0, "", S(""))); + BOOST_TEST(testR(S(""), 0, 0, "12345", S("12345"))); + BOOST_TEST(testR(S(""), 0, 0, "1234567890", S("1234567890"))); + BOOST_TEST(testR(S(""), 0, 0, "12345678901234567890", S("12345678901234567890"))); + BOOST_TEST(testR(S("abcde"), 0, 0, "", S("abcde"))); + BOOST_TEST(testR(S("abcde"), 0, 0, "12345", S("12345abcde"))); + BOOST_TEST(testR(S("abcde"), 0, 0, "1234567890", S("1234567890abcde"))); + BOOST_TEST(testR(S("abcde"), 0, 0, "12345678901234567890", S("12345678901234567890abcde"))); + BOOST_TEST(testR(S("abcde"), 0, 1, "", S("bcde"))); + BOOST_TEST(testR(S("abcde"), 0, 1, "12345", S("12345bcde"))); + BOOST_TEST(testR(S("abcde"), 0, 1, "1234567890", S("1234567890bcde"))); + BOOST_TEST(testR(S("abcde"), 0, 1, "12345678901234567890", S("12345678901234567890bcde"))); + BOOST_TEST(testR(S("abcde"), 0, 2, "", S("cde"))); + BOOST_TEST(testR(S("abcde"), 0, 2, "12345", S("12345cde"))); + BOOST_TEST(testR(S("abcde"), 0, 2, "1234567890", S("1234567890cde"))); + BOOST_TEST(testR(S("abcde"), 0, 2, "12345678901234567890", S("12345678901234567890cde"))); + BOOST_TEST(testR(S("abcde"), 0, 4, "", S("e"))); + BOOST_TEST(testR(S("abcde"), 0, 4, "12345", S("12345e"))); + BOOST_TEST(testR(S("abcde"), 0, 4, "1234567890", S("1234567890e"))); + BOOST_TEST(testR(S("abcde"), 0, 4, "12345678901234567890", S("12345678901234567890e"))); + BOOST_TEST(testR(S("abcde"), 0, 5, "", S(""))); + BOOST_TEST(testR(S("abcde"), 0, 5, "12345", S("12345"))); + BOOST_TEST(testR(S("abcde"), 0, 5, "1234567890", S("1234567890"))); + BOOST_TEST(testR(S("abcde"), 0, 5, "12345678901234567890", S("12345678901234567890"))); + BOOST_TEST(testR(S("abcde"), 1, 0, "", S("abcde"))); + BOOST_TEST(testR(S("abcde"), 1, 0, "12345", S("a12345bcde"))); + BOOST_TEST(testR(S("abcde"), 1, 0, "1234567890", S("a1234567890bcde"))); + BOOST_TEST(testR(S("abcde"), 1, 0, "12345678901234567890", S("a12345678901234567890bcde"))); + BOOST_TEST(testR(S("abcde"), 1, 1, "", S("acde"))); + BOOST_TEST(testR(S("abcde"), 1, 1, "12345", S("a12345cde"))); + BOOST_TEST(testR(S("abcde"), 1, 1, "1234567890", S("a1234567890cde"))); + BOOST_TEST(testR(S("abcde"), 1, 1, "12345678901234567890", S("a12345678901234567890cde"))); + BOOST_TEST(testR(S("abcde"), 1, 2, "", S("ade"))); + BOOST_TEST(testR(S("abcde"), 1, 2, "12345", S("a12345de"))); + BOOST_TEST(testR(S("abcde"), 1, 2, "1234567890", S("a1234567890de"))); + BOOST_TEST(testR(S("abcde"), 1, 2, "12345678901234567890", S("a12345678901234567890de"))); + BOOST_TEST(testR(S("abcde"), 1, 3, "", S("ae"))); + BOOST_TEST(testR(S("abcde"), 1, 3, "12345", S("a12345e"))); + BOOST_TEST(testR(S("abcde"), 1, 3, "1234567890", S("a1234567890e"))); + BOOST_TEST(testR(S("abcde"), 1, 3, "12345678901234567890", S("a12345678901234567890e"))); + BOOST_TEST(testR(S("abcde"), 1, 4, "", S("a"))); + BOOST_TEST(testR(S("abcde"), 1, 4, "12345", S("a12345"))); + BOOST_TEST(testR(S("abcde"), 1, 4, "1234567890", S("a1234567890"))); + BOOST_TEST(testR(S("abcde"), 1, 4, "12345678901234567890", S("a12345678901234567890"))); + BOOST_TEST(testR(S("abcde"), 2, 0, "", S("abcde"))); + BOOST_TEST(testR(S("abcde"), 2, 0, "12345", S("ab12345cde"))); + BOOST_TEST(testR(S("abcde"), 2, 0, "1234567890", S("ab1234567890cde"))); + BOOST_TEST(testR(S("abcde"), 2, 0, "12345678901234567890", S("ab12345678901234567890cde"))); + BOOST_TEST(testR(S("abcde"), 2, 1, "", S("abde"))); + BOOST_TEST(testR(S("abcde"), 2, 1, "12345", S("ab12345de"))); + BOOST_TEST(testR(S("abcde"), 2, 1, "1234567890", S("ab1234567890de"))); + BOOST_TEST(testR(S("abcde"), 2, 1, "12345678901234567890", S("ab12345678901234567890de"))); + BOOST_TEST(testR(S("abcde"), 2, 2, "", S("abe"))); + BOOST_TEST(testR(S("abcde"), 2, 2, "12345", S("ab12345e"))); + BOOST_TEST(testR(S("abcde"), 2, 2, "1234567890", S("ab1234567890e"))); + BOOST_TEST(testR(S("abcde"), 2, 2, "12345678901234567890", S("ab12345678901234567890e"))); + BOOST_TEST(testR(S("abcde"), 2, 3, "", S("ab"))); + BOOST_TEST(testR(S("abcde"), 2, 3, "12345", S("ab12345"))); + BOOST_TEST(testR(S("abcde"), 2, 3, "1234567890", S("ab1234567890"))); + BOOST_TEST(testR(S("abcde"), 2, 3, "12345678901234567890", S("ab12345678901234567890"))); + BOOST_TEST(testR(S("abcde"), 4, 0, "", S("abcde"))); + BOOST_TEST(testR(S("abcde"), 4, 0, "12345", S("abcd12345e"))); + BOOST_TEST(testR(S("abcde"), 4, 0, "1234567890", S("abcd1234567890e"))); + BOOST_TEST(testR(S("abcde"), 4, 0, "12345678901234567890", S("abcd12345678901234567890e"))); + BOOST_TEST(testR(S("abcde"), 4, 1, "", S("abcd"))); + BOOST_TEST(testR(S("abcde"), 4, 1, "12345", S("abcd12345"))); + BOOST_TEST(testR(S("abcde"), 4, 1, "1234567890", S("abcd1234567890"))); + BOOST_TEST(testR(S("abcde"), 4, 1, "12345678901234567890", S("abcd12345678901234567890"))); + BOOST_TEST(testR(S("abcde"), 5, 0, "", S("abcde"))); + BOOST_TEST(testR(S("abcde"), 5, 0, "12345", S("abcde12345"))); + BOOST_TEST(testR(S("abcde"), 5, 0, "1234567890", S("abcde1234567890"))); + BOOST_TEST(testR(S("abcde"), 5, 0, "12345678901234567890", S("abcde12345678901234567890"))); + BOOST_TEST(testR(S("abcdefghij"), 0, 0, "", S("abcdefghij"))); + BOOST_TEST(testR(S("abcdefghij"), 0, 0, "12345", S("12345abcdefghij"))); + BOOST_TEST(testR(S("abcdefghij"), 0, 0, "1234567890", S("1234567890abcdefghij"))); + BOOST_TEST(testR(S("abcdefghij"), 0, 0, "12345678901234567890", S("12345678901234567890abcdefghij"))); + BOOST_TEST(testR(S("abcdefghij"), 0, 1, "", S("bcdefghij"))); + BOOST_TEST(testR(S("abcdefghij"), 0, 1, "12345", S("12345bcdefghij"))); + BOOST_TEST(testR(S("abcdefghij"), 0, 1, "1234567890", S("1234567890bcdefghij"))); + BOOST_TEST(testR(S("abcdefghij"), 0, 1, "12345678901234567890", S("12345678901234567890bcdefghij"))); + BOOST_TEST(testR(S("abcdefghij"), 0, 5, "", S("fghij"))); + BOOST_TEST(testR(S("abcdefghij"), 0, 5, "12345", S("12345fghij"))); + BOOST_TEST(testR(S("abcdefghij"), 0, 5, "1234567890", S("1234567890fghij"))); + BOOST_TEST(testR(S("abcdefghij"), 0, 5, "12345678901234567890", S("12345678901234567890fghij"))); + BOOST_TEST(testR(S("abcdefghij"), 0, 9, "", S("j"))); + BOOST_TEST(testR(S("abcdefghij"), 0, 9, "12345", S("12345j"))); + BOOST_TEST(testR(S("abcdefghij"), 0, 9, "1234567890", S("1234567890j"))); + BOOST_TEST(testR(S("abcdefghij"), 0, 9, "12345678901234567890", S("12345678901234567890j"))); + BOOST_TEST(testR(S("abcdefghij"), 0, 10, "", S(""))); + BOOST_TEST(testR(S("abcdefghij"), 0, 10, "12345", S("12345"))); + BOOST_TEST(testR(S("abcdefghij"), 0, 10, "1234567890", S("1234567890"))); + BOOST_TEST(testR(S("abcdefghij"), 0, 10, "12345678901234567890", S("12345678901234567890"))); + BOOST_TEST(testR(S("abcdefghij"), 1, 0, "", S("abcdefghij"))); + BOOST_TEST(testR(S("abcdefghij"), 1, 0, "12345", S("a12345bcdefghij"))); + BOOST_TEST(testR(S("abcdefghij"), 1, 0, "1234567890", S("a1234567890bcdefghij"))); + BOOST_TEST(testR(S("abcdefghij"), 1, 0, "12345678901234567890", S("a12345678901234567890bcdefghij"))); + BOOST_TEST(testR(S("abcdefghij"), 1, 1, "", S("acdefghij"))); + BOOST_TEST(testR(S("abcdefghij"), 1, 1, "12345", S("a12345cdefghij"))); + BOOST_TEST(testR(S("abcdefghij"), 1, 1, "1234567890", S("a1234567890cdefghij"))); + BOOST_TEST(testR(S("abcdefghij"), 1, 1, "12345678901234567890", S("a12345678901234567890cdefghij"))); + BOOST_TEST(testR(S(""), 0, 0, 0, '2', S(""))); + BOOST_TEST(testR(S(""), 0, 0, 5, '2', S("22222"))); + BOOST_TEST(testR(S(""), 0, 0, 10, '2', S("2222222222"))); + BOOST_TEST(testR(S(""), 0, 0, 20, '2', S("22222222222222222222"))); + BOOST_TEST(testR(S(""), 0, 1, 0, '2', S(""))); + BOOST_TEST(testR(S(""), 0, 1, 5, '2', S("22222"))); + BOOST_TEST(testR(S(""), 0, 1, 10, '2', S("2222222222"))); + BOOST_TEST(testR(S(""), 0, 1, 20, '2', S("22222222222222222222"))); + BOOST_TEST(testR(S("abcde"), 0, 0, 0, '2', S("abcde"))); + BOOST_TEST(testR(S("abcde"), 0, 0, 5, '2', S("22222abcde"))); + BOOST_TEST(testR(S("abcde"), 0, 0, 10, '2', S("2222222222abcde"))); + BOOST_TEST(testR(S("abcde"), 0, 0, 20, '2', S("22222222222222222222abcde"))); + BOOST_TEST(testR(S("abcde"), 0, 1, 0, '2', S("bcde"))); + BOOST_TEST(testR(S("abcde"), 0, 1, 5, '2', S("22222bcde"))); + BOOST_TEST(testR(S("abcde"), 0, 1, 10, '2', S("2222222222bcde"))); + BOOST_TEST(testR(S("abcde"), 0, 1, 20, '2', S("22222222222222222222bcde"))); + BOOST_TEST(testR(S("abcde"), 0, 2, 0, '2', S("cde"))); + BOOST_TEST(testR(S("abcde"), 0, 2, 5, '2', S("22222cde"))); + BOOST_TEST(testR(S("abcde"), 0, 2, 10, '2', S("2222222222cde"))); + BOOST_TEST(testR(S("abcde"), 0, 2, 20, '2', S("22222222222222222222cde"))); + BOOST_TEST(testR(S("abcde"), 0, 4, 0, '2', S("e"))); + BOOST_TEST(testR(S("abcde"), 0, 4, 5, '2', S("22222e"))); + BOOST_TEST(testR(S("abcde"), 0, 4, 10, '2', S("2222222222e"))); + BOOST_TEST(testR(S("abcde"), 0, 4, 20, '2', S("22222222222222222222e"))); + BOOST_TEST(testR(S("abcde"), 0, 5, 0, '2', S(""))); + BOOST_TEST(testR(S("abcde"), 0, 5, 5, '2', S("22222"))); + BOOST_TEST(testR(S("abcde"), 0, 5, 10, '2', S("2222222222"))); + BOOST_TEST(testR(S("abcde"), 0, 5, 20, '2', S("22222222222222222222"))); + BOOST_TEST(testR(S("abcde"), 0, 6, 0, '2', S(""))); + BOOST_TEST(testR(S("abcde"), 0, 6, 5, '2', S("22222"))); + BOOST_TEST(testR(S("abcde"), 0, 6, 10, '2', S("2222222222"))); + BOOST_TEST(testR(S("abcde"), 0, 6, 20, '2', S("22222222222222222222"))); + BOOST_TEST(testR(S("abcde"), 1, 0, 0, '2', S("abcde"))); + BOOST_TEST(testR(S("abcde"), 1, 0, 5, '2', S("a22222bcde"))); + BOOST_TEST(testR(S("abcde"), 1, 0, 10, '2', S("a2222222222bcde"))); + BOOST_TEST(testR(S("abcde"), 1, 0, 20, '2', S("a22222222222222222222bcde"))); + BOOST_TEST(testR(S("abcde"), 1, 1, 0, '2', S("acde"))); + BOOST_TEST(testR(S("abcde"), 1, 1, 5, '2', S("a22222cde"))); + BOOST_TEST(testR(S("abcde"), 1, 1, 10, '2', S("a2222222222cde"))); + BOOST_TEST(testR(S("abcde"), 1, 1, 20, '2', S("a22222222222222222222cde"))); + BOOST_TEST(testR(S("abcde"), 1, 2, 0, '2', S("ade"))); + BOOST_TEST(testR(S("abcde"), 1, 2, 5, '2', S("a22222de"))); + BOOST_TEST(testR(S("abcde"), 1, 2, 10, '2', S("a2222222222de"))); + BOOST_TEST(testR(S("abcde"), 1, 2, 20, '2', S("a22222222222222222222de"))); + BOOST_TEST(testR(S("abcde"), 1, 3, 0, '2', S("ae"))); + BOOST_TEST(testR(S("abcde"), 1, 3, 5, '2', S("a22222e"))); + BOOST_TEST(testR(S("abcde"), 1, 3, 10, '2', S("a2222222222e"))); + BOOST_TEST(testR(S("abcde"), 1, 3, 20, '2', S("a22222222222222222222e"))); + BOOST_TEST(testR(S("abcde"), 1, 4, 0, '2', S("a"))); + BOOST_TEST(testR(S("abcde"), 1, 4, 5, '2', S("a22222"))); + BOOST_TEST(testR(S("abcde"), 1, 4, 10, '2', S("a2222222222"))); + BOOST_TEST(testR(S("abcde"), 1, 4, 20, '2', S("a22222222222222222222"))); + BOOST_TEST(testR(S("abcde"), 1, 5, 0, '2', S("a"))); + BOOST_TEST(testR(S("abcde"), 1, 5, 5, '2', S("a22222"))); + BOOST_TEST(testR(S("abcde"), 1, 5, 10, '2', S("a2222222222"))); + BOOST_TEST(testR(S("abcde"), 1, 5, 20, '2', S("a22222222222222222222"))); + BOOST_TEST(testR(S("abcde"), 2, 0, 0, '2', S("abcde"))); + BOOST_TEST(testR(S("abcde"), 2, 0, 5, '2', S("ab22222cde"))); + BOOST_TEST(testR(S("abcde"), 2, 0, 10, '2', S("ab2222222222cde"))); + BOOST_TEST(testR(S("abcde"), 2, 0, 20, '2', S("ab22222222222222222222cde"))); + BOOST_TEST(testR(S("abcde"), 2, 1, 0, '2', S("abde"))); + BOOST_TEST(testR(S("abcde"), 2, 1, 5, '2', S("ab22222de"))); + BOOST_TEST(testR(S("abcde"), 2, 1, 10, '2', S("ab2222222222de"))); + BOOST_TEST(testR(S("abcde"), 2, 1, 20, '2', S("ab22222222222222222222de"))); + BOOST_TEST(testR(S("abcde"), 2, 2, 0, '2', S("abe"))); + BOOST_TEST(testR(S("abcde"), 2, 2, 5, '2', S("ab22222e"))); + BOOST_TEST(testR(S("abcde"), 2, 2, 10, '2', S("ab2222222222e"))); + BOOST_TEST(testR(S("abcde"), 2, 2, 20, '2', S("ab22222222222222222222e"))); + BOOST_TEST(testR(S("abcde"), 2, 3, 0, '2', S("ab"))); + BOOST_TEST(testR(S("abcde"), 2, 3, 5, '2', S("ab22222"))); + BOOST_TEST(testR(S("abcde"), 2, 3, 10, '2', S("ab2222222222"))); + BOOST_TEST(testR(S("abcde"), 2, 3, 20, '2', S("ab22222222222222222222"))); + BOOST_TEST(testR(S("abcde"), 2, 4, 0, '2', S("ab"))); + BOOST_TEST(testR(S("abcde"), 2, 4, 5, '2', S("ab22222"))); + BOOST_TEST(testR(S("abcde"), 2, 4, 10, '2', S("ab2222222222"))); + BOOST_TEST(testR(S("abcde"), 2, 4, 20, '2', S("ab22222222222222222222"))); + BOOST_TEST(testR(S("abcde"), 4, 0, 0, '2', S("abcde"))); + BOOST_TEST(testR(S("abcde"), 4, 0, 5, '2', S("abcd22222e"))); + BOOST_TEST(testR(S("abcde"), 4, 0, 10, '2', S("abcd2222222222e"))); + BOOST_TEST(testR(S("abcde"), 4, 0, 20, '2', S("abcd22222222222222222222e"))); + BOOST_TEST(testR(S("abcde"), 4, 1, 0, '2', S("abcd"))); + BOOST_TEST(testR(S("abcde"), 4, 1, 5, '2', S("abcd22222"))); + BOOST_TEST(testR(S("abcde"), 4, 1, 10, '2', S("abcd2222222222"))); + BOOST_TEST(testR(S("abcde"), 4, 1, 20, '2', S("abcd22222222222222222222"))); + BOOST_TEST(testR(S("abcde"), 4, 2, 0, '2', S("abcd"))); + + BOOST_TEST(testR(S("abcde"), 4, 2, 5, '2', S("abcd22222"))); + BOOST_TEST(testR(S("abcde"), 4, 2, 10, '2', S("abcd2222222222"))); + BOOST_TEST(testR(S("abcde"), 4, 2, 20, '2', S("abcd22222222222222222222"))); + + BOOST_TEST(testR(S("abcde"), 5, 0, 0, '2', S("abcde"))); + BOOST_TEST(testR(S("abcde"), 5, 0, 5, '2', S("abcde22222"))); + BOOST_TEST(testR(S("abcde"), 5, 0, 10, '2', S("abcde2222222222"))); + BOOST_TEST(testR(S("abcde"), 5, 0, 20, '2', S("abcde22222222222222222222"))); + + BOOST_TEST(testR(S("abcde"), 5, 1, 0, '2', S("abcde"))); + BOOST_TEST(testR(S("abcde"), 5, 1, 5, '2', S("abcde22222"))); + BOOST_TEST(testR(S("abcde"), 5, 1, 10, '2', S("abcde2222222222"))); + BOOST_TEST(testR(S("abcde"), 5, 1, 20, '2', S("abcde22222222222222222222"))); + + BOOST_TEST(testR(S("abcde"), 0, 4, "12345", 4, S("1234e"))); + BOOST_TEST(testR(S("abcde"), 0, 4, "12345", 5, S("12345e"))); + BOOST_TEST(testR(S("abcde"), 0, 4, "1234567890", 0, S("e"))); + BOOST_TEST(testR(S("abcde"), 0, 4, "1234567890", 1, S("1e"))); + BOOST_TEST(testR(S("abcde"), 0, 4, "1234567890", 5, S("12345e"))); + BOOST_TEST(testR(S("abcde"), 0, 4, "1234567890", 9, S("123456789e"))); + BOOST_TEST(testR(S("abcde"), 0, 4, "1234567890", 10, S("1234567890e"))); + BOOST_TEST(testR(S("abcde"), 0, 4, "12345678901234567890", 0, S("e"))); + BOOST_TEST(testR(S("abcde"), 0, 4, "12345678901234567890", 1, S("1e"))); + BOOST_TEST(testR(S("abcde"), 0, 4, "12345678901234567890", 10, S("1234567890e"))); + BOOST_TEST(testR(S("abcde"), 0, 4, "12345678901234567890", 19, S("1234567890123456789e"))); + BOOST_TEST(testR(S("abcde"), 0, 4, "12345678901234567890", 20, S("12345678901234567890e"))); + BOOST_TEST(testR(S("abcde"), 0, 5, "", 0, S(""))); + BOOST_TEST(testR(S("abcde"), 0, 5, "12345", 0, S(""))); + BOOST_TEST(testR(S("abcde"), 0, 5, "12345", 1, S("1"))); + BOOST_TEST(testR(S("abcde"), 0, 5, "12345", 2, S("12"))); + BOOST_TEST(testR(S("abcde"), 0, 5, "12345", 4, S("1234"))); + BOOST_TEST(testR(S("abcde"), 0, 5, "12345", 5, S("12345"))); + BOOST_TEST(testR(S("abcde"), 0, 5, "1234567890", 0, S(""))); + BOOST_TEST(testR(S("abcde"), 0, 5, "1234567890", 1, S("1"))); + BOOST_TEST(testR(S("abcde"), 0, 5, "1234567890", 5, S("12345"))); + BOOST_TEST(testR(S("abcde"), 0, 5, "1234567890", 9, S("123456789"))); + BOOST_TEST(testR(S("abcde"), 0, 5, "1234567890", 10, S("1234567890"))); + BOOST_TEST(testR(S("abcde"), 0, 5, "12345678901234567890", 0, S(""))); + BOOST_TEST(testR(S("abcde"), 0, 5, "12345678901234567890", 1, S("1"))); + BOOST_TEST(testR(S("abcde"), 0, 5, "12345678901234567890", 10, S("1234567890"))); + BOOST_TEST(testR(S("abcde"), 0, 5, "12345678901234567890", 19, S("1234567890123456789"))); + BOOST_TEST(testR(S("abcde"), 0, 5, "12345678901234567890", 20, S("12345678901234567890"))); + BOOST_TEST(testR(S("abcde"), 0, 6, "", 0, S(""))); + BOOST_TEST(testR(S("abcde"), 0, 6, "12345", 0, S(""))); + BOOST_TEST(testR(S("abcde"), 0, 6, "12345", 1, S("1"))); + BOOST_TEST(testR(S("abcde"), 0, 6, "12345", 2, S("12"))); + BOOST_TEST(testR(S("abcde"), 0, 6, "12345", 4, S("1234"))); + BOOST_TEST(testR(S("abcde"), 0, 6, "12345", 5, S("12345"))); + BOOST_TEST(testR(S("abcde"), 0, 6, "1234567890", 0, S(""))); + BOOST_TEST(testR(S("abcde"), 0, 6, "1234567890", 1, S("1"))); + BOOST_TEST(testR(S("abcde"), 0, 6, "1234567890", 5, S("12345"))); + BOOST_TEST(testR(S("abcde"), 0, 6, "1234567890", 9, S("123456789"))); + BOOST_TEST(testR(S("abcde"), 0, 6, "1234567890", 10, S("1234567890"))); + BOOST_TEST(testR(S("abcde"), 0, 6, "12345678901234567890", 0, S(""))); + BOOST_TEST(testR(S("abcde"), 0, 6, "12345678901234567890", 1, S("1"))); + BOOST_TEST(testR(S("abcde"), 0, 6, "12345678901234567890", 10, S("1234567890"))); + BOOST_TEST(testR(S("abcde"), 0, 6, "12345678901234567890", 19, S("1234567890123456789"))); + BOOST_TEST(testR(S("abcde"), 0, 6, "12345678901234567890", 20, S("12345678901234567890"))); + BOOST_TEST(testR(S("abcde"), 1, 0, "", 0, S("abcde"))); + BOOST_TEST(testR(S("abcde"), 1, 0, "12345", 0, S("abcde"))); + BOOST_TEST(testR(S("abcde"), 1, 0, "12345", 1, S("a1bcde"))); + BOOST_TEST(testR(S("abcde"), 1, 0, "12345", 2, S("a12bcde"))); + BOOST_TEST(testR(S("abcde"), 1, 0, "12345", 4, S("a1234bcde"))); + BOOST_TEST(testR(S("abcde"), 1, 0, "12345", 5, S("a12345bcde"))); + BOOST_TEST(testR(S("abcde"), 1, 0, "1234567890", 0, S("abcde"))); + BOOST_TEST(testR(S("abcde"), 1, 0, "1234567890", 1, S("a1bcde"))); + BOOST_TEST(testR(S("abcde"), 1, 0, "1234567890", 5, S("a12345bcde"))); + BOOST_TEST(testR(S("abcde"), 1, 0, "1234567890", 9, S("a123456789bcde"))); + BOOST_TEST(testR(S("abcde"), 1, 0, "1234567890", 10, S("a1234567890bcde"))); + BOOST_TEST(testR(S("abcde"), 1, 0, "12345678901234567890", 0, S("abcde"))); + BOOST_TEST(testR(S("abcde"), 1, 0, "12345678901234567890", 1, S("a1bcde"))); + BOOST_TEST(testR(S("abcde"), 1, 0, "12345678901234567890", 10, S("a1234567890bcde"))); + BOOST_TEST(testR(S("abcde"), 1, 0, "12345678901234567890", 19, S("a1234567890123456789bcde"))); + BOOST_TEST(testR(S("abcde"), 1, 0, "12345678901234567890", 20, S("a12345678901234567890bcde"))); + BOOST_TEST(testR(S("abcde"), 1, 1, "", 0, S("acde"))); + BOOST_TEST(testR(S("abcde"), 1, 1, "12345", 0, S("acde"))); + BOOST_TEST(testR(S("abcde"), 1, 1, "12345", 1, S("a1cde"))); + BOOST_TEST(testR(S("abcde"), 1, 1, "12345", 2, S("a12cde"))); + BOOST_TEST(testR(S("abcde"), 1, 1, "12345", 4, S("a1234cde"))); + BOOST_TEST(testR(S("abcde"), 1, 1, "12345", 5, S("a12345cde"))); + BOOST_TEST(testR(S("abcde"), 1, 1, "1234567890", 0, S("acde"))); + BOOST_TEST(testR(S("abcde"), 1, 1, "1234567890", 1, S("a1cde"))); + BOOST_TEST(testR(S("abcde"), 1, 1, "1234567890", 5, S("a12345cde"))); + BOOST_TEST(testR(S("abcde"), 1, 1, "1234567890", 9, S("a123456789cde"))); + BOOST_TEST(testR(S("abcde"), 1, 1, "1234567890", 10, S("a1234567890cde"))); + BOOST_TEST(testR(S("abcde"), 1, 1, "12345678901234567890", 0, S("acde"))); + BOOST_TEST(testR(S("abcde"), 1, 1, "12345678901234567890", 1, S("a1cde"))); + BOOST_TEST(testR(S("abcde"), 1, 1, "12345678901234567890", 10, S("a1234567890cde"))); + BOOST_TEST(testR(S("abcde"), 1, 1, "12345678901234567890", 19, S("a1234567890123456789cde"))); + BOOST_TEST(testR(S("abcde"), 1, 1, "12345678901234567890", 20, S("a12345678901234567890cde"))); + BOOST_TEST(testR(S("abcde"), 1, 2, "", 0, S("ade"))); + BOOST_TEST(testR(S("abcde"), 1, 2, "12345", 0, S("ade"))); + BOOST_TEST(testR(S("abcde"), 1, 2, "12345", 1, S("a1de"))); + BOOST_TEST(testR(S("abcde"), 1, 2, "12345", 2, S("a12de"))); + BOOST_TEST(testR(S("abcde"), 1, 2, "12345", 4, S("a1234de"))); + BOOST_TEST(testR(S("abcde"), 1, 2, "12345", 5, S("a12345de"))); + BOOST_TEST(testR(S("abcde"), 1, 2, "1234567890", 0, S("ade"))); + BOOST_TEST(testR(S("abcde"), 1, 2, "1234567890", 1, S("a1de"))); + BOOST_TEST(testR(S("abcde"), 1, 2, "1234567890", 5, S("a12345de"))); + BOOST_TEST(testR(S("abcde"), 1, 2, "1234567890", 9, S("a123456789de"))); + BOOST_TEST(testR(S("abcde"), 1, 2, "1234567890", 10, S("a1234567890de"))); + BOOST_TEST(testR(S("abcde"), 1, 2, "12345678901234567890", 0, S("ade"))); + BOOST_TEST(testR(S("abcde"), 1, 2, "12345678901234567890", 1, S("a1de"))); + BOOST_TEST(testR(S("abcde"), 1, 2, "12345678901234567890", 10, S("a1234567890de"))); + BOOST_TEST(testR(S("abcde"), 1, 2, "12345678901234567890", 19, S("a1234567890123456789de"))); + BOOST_TEST(testR(S("abcde"), 1, 2, "12345678901234567890", 20, S("a12345678901234567890de"))); + BOOST_TEST(testR(S("abcde"), 1, 3, "", 0, S("ae"))); + BOOST_TEST(testR(S("abcde"), 1, 3, "12345", 0, S("ae"))); + BOOST_TEST(testR(S("abcde"), 1, 3, "12345", 1, S("a1e"))); + BOOST_TEST(testR(S("abcde"), 1, 3, "12345", 2, S("a12e"))); + BOOST_TEST(testR(S("abcde"), 1, 3, "12345", 4, S("a1234e"))); + BOOST_TEST(testR(S("abcde"), 1, 3, "12345", 5, S("a12345e"))); + BOOST_TEST(testR(S("abcde"), 1, 3, "1234567890", 0, S("ae"))); + BOOST_TEST(testR(S("abcde"), 1, 3, "1234567890", 1, S("a1e"))); + BOOST_TEST(testR(S("abcdefghij"), 1, 10, "1234567890", 5, S("a12345"))); + BOOST_TEST(testR(S("abcdefghij"), 1, 10, "1234567890", 9, S("a123456789"))); + BOOST_TEST(testR(S("abcdefghij"), 1, 10, "1234567890", 10, S("a1234567890"))); + BOOST_TEST(testR(S("abcdefghij"), 1, 10, "12345678901234567890", 0, S("a"))); + BOOST_TEST(testR(S("abcdefghij"), 1, 10, "12345678901234567890", 1, S("a1"))); + BOOST_TEST(testR(S("abcdefghij"), 1, 10, "12345678901234567890", 10, S("a1234567890"))); + BOOST_TEST(testR(S("abcdefghij"), 1, 10, "12345678901234567890", 19, S("a1234567890123456789"))); + BOOST_TEST(testR(S("abcdefghij"), 1, 10, "12345678901234567890", 20, S("a12345678901234567890"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 0, "", 0, S("abcdefghij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 0, "12345", 0, S("abcdefghij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 0, "12345", 1, S("abcde1fghij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 0, "12345", 2, S("abcde12fghij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 0, "12345", 4, S("abcde1234fghij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 0, "12345", 5, S("abcde12345fghij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 0, "1234567890", 0, S("abcdefghij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 0, "1234567890", 1, S("abcde1fghij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 0, "1234567890", 5, S("abcde12345fghij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 0, "1234567890", 9, S("abcde123456789fghij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 0, "1234567890", 10, S("abcde1234567890fghij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 0, "12345678901234567890", 0, S("abcdefghij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 0, "12345678901234567890", 1, S("abcde1fghij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 0, "12345678901234567890", 10, S("abcde1234567890fghij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 0, "12345678901234567890", 19, S("abcde1234567890123456789fghij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 0, "12345678901234567890", 20, S("abcde12345678901234567890fghij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 1, "", 0, S("abcdeghij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 1, "12345", 0, S("abcdeghij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 1, "12345", 1, S("abcde1ghij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 1, "12345", 2, S("abcde12ghij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 1, "12345", 4, S("abcde1234ghij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 1, "12345", 5, S("abcde12345ghij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 1, "1234567890", 0, S("abcdeghij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 1, "1234567890", 1, S("abcde1ghij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 1, "1234567890", 5, S("abcde12345ghij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 1, "1234567890", 9, S("abcde123456789ghij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 1, "1234567890", 10, S("abcde1234567890ghij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 1, "12345678901234567890", 0, S("abcdeghij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 1, "12345678901234567890", 1, S("abcde1ghij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 1, "12345678901234567890", 10, S("abcde1234567890ghij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 1, "12345678901234567890", 19, S("abcde1234567890123456789ghij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 1, "12345678901234567890", 20, S("abcde12345678901234567890ghij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 2, "", 0, S("abcdehij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 2, "12345", 0, S("abcdehij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 2, "12345", 1, S("abcde1hij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 2, "12345", 2, S("abcde12hij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 2, "12345", 4, S("abcde1234hij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 2, "12345", 5, S("abcde12345hij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 2, "1234567890", 0, S("abcdehij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 2, "1234567890", 1, S("abcde1hij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 2, "1234567890", 5, S("abcde12345hij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 2, "1234567890", 9, S("abcde123456789hij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 2, "1234567890", 10, S("abcde1234567890hij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 2, "12345678901234567890", 0, S("abcdehij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 2, "12345678901234567890", 1, S("abcde1hij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 2, "12345678901234567890", 10, S("abcde1234567890hij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 2, "12345678901234567890", 19, S("abcde1234567890123456789hij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 2, "12345678901234567890", 20, S("abcde12345678901234567890hij"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 4, "", 0, S("abcdej"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 4, "12345", 0, S("abcdej"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 4, "12345", 1, S("abcde1j"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 4, "12345", 2, S("abcde12j"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 4, "12345", 4, S("abcde1234j"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 4, "12345", 5, S("abcde12345j"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 4, "1234567890", 0, S("abcdej"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 4, "1234567890", 1, S("abcde1j"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 4, "1234567890", 5, S("abcde12345j"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 4, "1234567890", 9, S("abcde123456789j"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 4, "1234567890", 10, S("abcde1234567890j"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 4, "12345678901234567890", 0, S("abcdej"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 4, "12345678901234567890", 1, S("abcde1j"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 4, "12345678901234567890", 10, S("abcde1234567890j"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 4, "12345678901234567890", 19, S("abcde1234567890123456789j"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 4, "12345678901234567890", 20, S("abcde12345678901234567890j"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 5, "", 0, S("abcde"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 5, "12345", 0, S("abcde"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 5, "12345", 1, S("abcde1"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 5, "12345", 2, S("abcde12"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 5, "12345", 4, S("abcde1234"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 5, "12345", 5, S("abcde12345"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 5, "1234567890", 0, S("abcde"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 5, "1234567890", 1, S("abcde1"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 5, "1234567890", 5, S("abcde12345"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 5, "1234567890", 9, S("abcde123456789"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 5, "1234567890", 10, S("abcde1234567890"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 5, "12345678901234567890", 0, S("abcde"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 5, "12345678901234567890", 1, S("abcde1"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 5, "12345678901234567890", 10, S("abcde1234567890"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 5, "12345678901234567890", 19, S("abcde1234567890123456789"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 5, "12345678901234567890", 20, S("abcde12345678901234567890"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 6, "", 0, S("abcde"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 6, "12345", 0, S("abcde"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 6, "12345", 1, S("abcde1"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 6, "12345", 2, S("abcde12"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 6, "12345", 4, S("abcde1234"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 6, "12345", 5, S("abcde12345"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 6, "1234567890", 0, S("abcde"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 6, "1234567890", 1, S("abcde1"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 6, "1234567890", 5, S("abcde12345"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 6, "1234567890", 9, S("abcde123456789"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 6, "1234567890", 10, S("abcde1234567890"))); + BOOST_TEST(testR(S("abcdefghij"), 5, 6, "12345678901234567890", 0, S("abcde"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 0, "", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 0, "12345", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 0, "12345", 1, S("1abcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 0, "12345", 2, S("12abcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 0, "12345", 4, S("1234abcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 0, "12345", 5, S("12345abcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 0, "1234567890", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 0, "1234567890", 1, S("1abcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 0, "1234567890", 5, S("12345abcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 0, "1234567890", 9, S("123456789abcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 0, "1234567890", 10, S("1234567890abcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 0, "12345678901234567890", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 0, "12345678901234567890", 1, S("1abcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 0, "12345678901234567890", 10, S("1234567890abcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 0, "12345678901234567890", 19, S("1234567890123456789abcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 0, "12345678901234567890", 20, S("12345678901234567890abcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 1, "", 0, S("bcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 1, "12345", 0, S("bcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 1, "12345", 1, S("1bcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 1, "12345", 2, S("12bcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 1, "12345", 4, S("1234bcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 1, "12345", 5, S("12345bcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 1, "1234567890", 0, S("bcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 1, "1234567890", 1, S("1bcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 1, "1234567890", 5, S("12345bcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 1, "1234567890", 9, S("123456789bcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 1, "1234567890", 10, S("1234567890bcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 1, "12345678901234567890", 0, S("bcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 1, "12345678901234567890", 1, S("1bcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 1, "12345678901234567890", 10, S("1234567890bcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 1, "12345678901234567890", 19, S("1234567890123456789bcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 1, "12345678901234567890", 20, S("12345678901234567890bcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 10, "", 0, S("klmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 10, "12345", 0, S("klmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 10, "12345", 1, S("1klmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 10, "12345", 2, S("12klmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 10, "12345", 4, S("1234klmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 10, "12345", 5, S("12345klmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 10, "1234567890", 0, S("klmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 10, "1234567890", 1, S("1klmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 10, "1234567890", 5, S("12345klmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 10, "1234567890", 9, S("123456789klmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 10, "1234567890", 10, S("1234567890klmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 10, "12345678901234567890", 0, S("klmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 10, "12345678901234567890", 1, S("1klmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 10, "12345678901234567890", 10, S("1234567890klmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 10, "12345678901234567890", 19, S("1234567890123456789klmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 10, "12345678901234567890", 20, S("12345678901234567890klmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 19, "", 0, S("t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 19, "12345", 0, S("t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 19, "12345", 1, S("1t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 19, "12345", 2, S("12t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 19, "12345", 4, S("1234t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 19, "12345", 5, S("12345t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 19, "1234567890", 0, S("t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 19, "1234567890", 1, S("1t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 19, "1234567890", 5, S("12345t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 19, "1234567890", 9, S("123456789t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 19, "1234567890", 10, S("1234567890t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 19, "12345678901234567890", 0, S("t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 19, "12345678901234567890", 1, S("1t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 19, "12345678901234567890", 10, S("1234567890t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 19, "12345678901234567890", 19, S("1234567890123456789t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 19, "12345678901234567890", 20, S("12345678901234567890t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 20, "", 0, S(""))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 20, "12345", 0, S(""))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 20, "12345", 1, S("1"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 20, "12345", 2, S("12"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 20, "12345", 4, S("1234"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 20, "12345", 5, S("12345"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 20, "1234567890", 0, S(""))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 20, "1234567890", 1, S("1"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 20, "1234567890", 5, S("12345"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 20, "1234567890", 9, S("123456789"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 20, "1234567890", 10, S("1234567890"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 20, "12345678901234567890", 0, S(""))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 20, "12345678901234567890", 1, S("1"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 20, "12345678901234567890", 10, S("1234567890"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 20, "12345678901234567890", 19, S("1234567890123456789"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 20, "12345678901234567890", 20, S("12345678901234567890"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 21, "", 0, S(""))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 21, "12345", 0, S(""))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 21, "12345", 1, S("1"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 21, "12345", 2, S("12"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 21, "12345", 4, S("1234"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 21, "12345", 5, S("12345"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 21, "1234567890", 0, S(""))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 21, "1234567890", 1, S("1"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 21, "1234567890", 5, S("12345"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 21, "1234567890", 9, S("123456789"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 21, "1234567890", 10, S("1234567890"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 21, "12345678901234567890", 0, S(""))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 21, "12345678901234567890", 1, S("1"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 21, "12345678901234567890", 10, S("1234567890"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 21, "12345678901234567890", 19, S("1234567890123456789"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 0, 21, "12345678901234567890", 20, S("12345678901234567890"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 0, "", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 0, "12345", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 0, "12345", 1, S("a1bcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 0, "12345", 2, S("a12bcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 0, "12345", 4, S("a1234bcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 0, "12345", 5, S("a12345bcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 0, "1234567890", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 0, "1234567890", 1, S("a1bcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 0, "1234567890", 5, S("a12345bcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 0, "1234567890", 9, S("a123456789bcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 0, "1234567890", 10, S("a1234567890bcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 0, "12345678901234567890", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 0, "12345678901234567890", 1, S("a1bcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 0, "12345678901234567890", 10, S("a1234567890bcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 0, "12345678901234567890", 19, S("a1234567890123456789bcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 0, "12345678901234567890", 20, S("a12345678901234567890bcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 1, "", 0, S("acdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 1, "12345", 0, S("acdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 1, "12345", 1, S("a1cdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 1, "12345", 2, S("a12cdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 1, "12345", 4, S("a1234cdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 1, "12345", 5, S("a12345cdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 1, "1234567890", 0, S("acdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 1, "1234567890", 1, S("a1cdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 1, "1234567890", 5, S("a12345cdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 1, "1234567890", 9, S("a123456789cdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 1, "1234567890", 10, S("a1234567890cdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 1, "12345678901234567890", 0, S("acdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 1, "12345678901234567890", 1, S("a1cdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 1, "12345678901234567890", 10, S("a1234567890cdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 1, "12345678901234567890", 19, S("a1234567890123456789cdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 1, "12345678901234567890", 20, S("a12345678901234567890cdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 9, "", 0, S("aklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 9, "12345", 0, S("aklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 9, "12345", 1, S("a1klmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 9, "12345", 2, S("a12klmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 9, "12345", 4, S("a1234klmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 9, "12345", 5, S("a12345klmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 9, "1234567890", 0, S("aklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 9, "1234567890", 1, S("a1klmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 9, "1234567890", 5, S("a12345klmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 9, "1234567890", 9, S("a123456789klmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 9, "1234567890", 10, S("a1234567890klmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 9, "12345678901234567890", 0, S("aklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 9, "12345678901234567890", 1, S("a1klmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 9, "12345678901234567890", 10, S("a1234567890klmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 9, "12345678901234567890", 19, S("a1234567890123456789klmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 9, "12345678901234567890", 20, S("a12345678901234567890klmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 18, "", 0, S("at"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 18, "12345", 0, S("at"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 18, "12345", 1, S("a1t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 18, "12345", 2, S("a12t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 18, "12345", 4, S("a1234t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 18, "12345", 5, S("a12345t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 18, "1234567890", 0, S("at"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 18, "1234567890", 1, S("a1t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 18, "1234567890", 5, S("a12345t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 18, "1234567890", 9, S("a123456789t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 18, "1234567890", 10, S("a1234567890t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 18, "12345678901234567890", 0, S("at"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 18, "12345678901234567890", 1, S("a1t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 18, "12345678901234567890", 10, S("a1234567890t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 18, "12345678901234567890", 19, S("a1234567890123456789t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 18, "12345678901234567890", 20, S("a12345678901234567890t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 19, "", 0, S("a"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 19, "12345", 0, S("a"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 19, "12345", 1, S("a1"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 19, "12345", 2, S("a12"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 19, "12345", 4, S("a1234"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 19, "12345", 5, S("a12345"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 19, "1234567890", 0, S("a"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 19, "1234567890", 1, S("a1"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 19, "1234567890", 5, S("a12345"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 19, "1234567890", 9, S("a123456789"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 19, "1234567890", 10, S("a1234567890"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 19, "12345678901234567890", 0, S("a"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 19, "12345678901234567890", 1, S("a1"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 19, "12345678901234567890", 10, S("a1234567890"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 19, "12345678901234567890", 19, S("a1234567890123456789"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 19, "12345678901234567890", 20, S("a12345678901234567890"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 20, "", 0, S("a"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 20, "12345", 0, S("a"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 20, "12345", 1, S("a1"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 20, "12345", 2, S("a12"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 20, "12345", 4, S("a1234"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 20, "12345", 5, S("a12345"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 20, "1234567890", 0, S("a"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 20, "1234567890", 1, S("a1"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 20, "1234567890", 5, S("a12345"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 20, "1234567890", 9, S("a123456789"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 20, "1234567890", 10, S("a1234567890"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 20, "12345678901234567890", 0, S("a"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 20, "12345678901234567890", 1, S("a1"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 20, "12345678901234567890", 10, S("a1234567890"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 20, "12345678901234567890", 19, S("a1234567890123456789"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 1, 20, "12345678901234567890", 20, S("a12345678901234567890"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 0, "", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 0, "12345", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 0, "12345", 1, S("abcdefghij1klmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 0, "12345", 2, S("abcdefghij12klmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 0, "12345", 4, S("abcdefghij1234klmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 0, "12345", 5, S("abcdefghij12345klmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 0, "1234567890", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 0, "1234567890", 1, S("abcdefghij1klmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 0, "1234567890", 5, S("abcdefghij12345klmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 0, "1234567890", 9, S("abcdefghij123456789klmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 0, "1234567890", 10, S("abcdefghij1234567890klmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 0, "12345678901234567890", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 0, "12345678901234567890", 1, S("abcdefghij1klmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 0, "12345678901234567890", 10, S("abcdefghij1234567890klmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 0, "12345678901234567890", 19, S("abcdefghij1234567890123456789klmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 0, "12345678901234567890", 20, S("abcdefghij12345678901234567890klmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 1, "", 0, S("abcdefghijlmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 1, "12345", 0, S("abcdefghijlmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 1, "12345", 1, S("abcdefghij1lmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 1, "12345", 2, S("abcdefghij12lmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 1, "12345", 4, S("abcdefghij1234lmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 1, "12345", 5, S("abcdefghij12345lmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 1, "1234567890", 0, S("abcdefghijlmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 1, "1234567890", 1, S("abcdefghij1lmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 1, "1234567890", 5, S("abcdefghij12345lmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 1, "1234567890", 9, S("abcdefghij123456789lmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 1, "1234567890", 10, S("abcdefghij1234567890lmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 1, "12345678901234567890", 0, S("abcdefghijlmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 1, "12345678901234567890", 1, S("abcdefghij1lmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 1, "12345678901234567890", 10, S("abcdefghij1234567890lmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 1, "12345678901234567890", 19, S("abcdefghij1234567890123456789lmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 1, "12345678901234567890", 20, S("abcdefghij12345678901234567890lmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 5, "", 0, S("abcdefghijpqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 5, "12345", 0, S("abcdefghijpqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 5, "12345", 1, S("abcdefghij1pqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 5, "12345", 2, S("abcdefghij12pqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 5, "12345", 4, S("abcdefghij1234pqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 5, "12345", 5, S("abcdefghij12345pqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 5, "1234567890", 0, S("abcdefghijpqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 5, "1234567890", 1, S("abcdefghij1pqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 5, "1234567890", 5, S("abcdefghij12345pqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 5, "1234567890", 9, S("abcdefghij123456789pqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 5, "1234567890", 10, S("abcdefghij1234567890pqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 5, "12345678901234567890", 0, S("abcdefghijpqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 5, "12345678901234567890", 1, S("abcdefghij1pqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 5, "12345678901234567890", 10, S("abcdefghij1234567890pqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 5, "12345678901234567890", 19, S("abcdefghij1234567890123456789pqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 5, "12345678901234567890", 20, S("abcdefghij12345678901234567890pqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 9, "", 0, S("abcdefghijt"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 9, "12345", 0, S("abcdefghijt"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 9, "12345", 1, S("abcdefghij1t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 9, "12345", 2, S("abcdefghij12t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 9, "12345", 4, S("abcdefghij1234t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 9, "12345", 5, S("abcdefghij12345t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 9, "1234567890", 0, S("abcdefghijt"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 9, "1234567890", 1, S("abcdefghij1t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 9, "1234567890", 5, S("abcdefghij12345t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 9, "1234567890", 9, S("abcdefghij123456789t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 9, "1234567890", 10, S("abcdefghij1234567890t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 9, "12345678901234567890", 0, S("abcdefghijt"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 9, "12345678901234567890", 1, S("abcdefghij1t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 9, "12345678901234567890", 10, S("abcdefghij1234567890t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 9, "12345678901234567890", 19, S("abcdefghij1234567890123456789t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 9, "12345678901234567890", 20, S("abcdefghij12345678901234567890t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 10, "", 0, S("abcdefghij"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 10, "12345", 0, S("abcdefghij"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 10, "12345", 1, S("abcdefghij1"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 10, "12345", 2, S("abcdefghij12"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 10, "12345", 4, S("abcdefghij1234"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 10, "12345", 5, S("abcdefghij12345"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 10, "1234567890", 0, S("abcdefghij"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 10, "1234567890", 1, S("abcdefghij1"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 10, "1234567890", 5, S("abcdefghij12345"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 10, "1234567890", 9, S("abcdefghij123456789"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 10, "1234567890", 10, S("abcdefghij1234567890"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 10, "12345678901234567890", 0, S("abcdefghij"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 10, "12345678901234567890", 1, S("abcdefghij1"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 10, "12345678901234567890", 10, S("abcdefghij1234567890"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 10, "12345678901234567890", 19, S("abcdefghij1234567890123456789"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 10, "12345678901234567890", 20, S("abcdefghij12345678901234567890"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 11, "", 0, S("abcdefghij"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 11, "12345", 0, S("abcdefghij"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 11, "12345", 1, S("abcdefghij1"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 11, "12345", 2, S("abcdefghij12"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 11, "12345", 4, S("abcdefghij1234"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 11, "12345", 5, S("abcdefghij12345"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 11, "1234567890", 0, S("abcdefghij"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 11, "1234567890", 1, S("abcdefghij1"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 11, "1234567890", 5, S("abcdefghij12345"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 11, "1234567890", 9, S("abcdefghij123456789"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 11, "1234567890", 10, S("abcdefghij1234567890"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 11, "12345678901234567890", 0, S("abcdefghij"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 11, "12345678901234567890", 1, S("abcdefghij1"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 11, "12345678901234567890", 10, S("abcdefghij1234567890"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 11, "12345678901234567890", 19, S("abcdefghij1234567890123456789"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 10, 11, "12345678901234567890", 20, S("abcdefghij12345678901234567890"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 0, "", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 0, "12345", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 0, "12345", 1, S("abcdefghijklmnopqrs1t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 0, "12345", 2, S("abcdefghijklmnopqrs12t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 0, "12345", 4, S("abcdefghijklmnopqrs1234t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 0, "12345", 5, S("abcdefghijklmnopqrs12345t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 0, "1234567890", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 0, "1234567890", 1, S("abcdefghijklmnopqrs1t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 0, "1234567890", 5, S("abcdefghijklmnopqrs12345t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 0, "1234567890", 9, S("abcdefghijklmnopqrs123456789t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 0, "1234567890", 10, S("abcdefghijklmnopqrs1234567890t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 0, "12345678901234567890", 0, S("abcdefghijklmnopqrst"))); +} + + +void +testMisc() +{ + auto c = "12345"; + fixed_string<40> fs = "helloworld!"; + BOOST_TEST(fs.substr(1) == "elloworld!"); +} + int runTests() { @@ -1520,7 +5142,12 @@ runTests() testGeneral(); testToStaticString(); - return report_errors(); + testFind(); + + testReplace(); + testMisc(); + + return report_errors(); } } // fixed_string @@ -1529,5 +5156,5 @@ runTests() int main() { - return boost::fixed_string::runTests(); -} + return boost::fixed_string::runTests(); +} \ No newline at end of file