diff --git a/include/boost/fixed_string/fixed_string.hpp b/include/boost/fixed_string/fixed_string.hpp index c400ca1..3b88077 100644 --- a/include/boost/fixed_string/fixed_string.hpp +++ b/include/boost/fixed_string/fixed_string.hpp @@ -1832,7 +1832,8 @@ public: starts_with( string_view_type s) const noexcept { - return starts_with(s.data()); + const size_type len = s.size(); + return n_ >= len && !Traits::compare(s_, s.data(), len); } bool @@ -1854,7 +1855,8 @@ public: ends_with( string_view_type s) const noexcept { - return ends_with(s.data()); + const size_type len = s.size(); + return n_ >= len && !Traits::compare(s_ + (n_ - len), s.data(), len); } bool diff --git a/include/boost/fixed_string/impl/fixed_string.hpp b/include/boost/fixed_string/impl/fixed_string.hpp index 0cfb7ae..1570dd7 100644 --- a/include/boost/fixed_string/impl/fixed_string.hpp +++ b/include/boost/fixed_string/impl/fixed_string.hpp @@ -597,9 +597,11 @@ replace( if (pos > size()) BOOST_FIXED_STRING_THROW(std::out_of_range{ "pos > size()"}); - if ((size() - n1 + n2) > max_size()) + if (size() - std::min(n1, size() - pos) >= max_size() - n2) BOOST_FIXED_STRING_THROW(std::length_error{ - "size() - n1 + n2 > max_size()"}); + "replaced string exceeds max_size()"}); + if (pos + n1 >= size()) + n1 = size() - pos; const bool inside = s <= &s_[size()] && s >= &s_[0]; if (inside && (s - &s_[0]) == pos && n1 == n2) return *this; @@ -640,9 +642,11 @@ replace( if (pos > size()) BOOST_FIXED_STRING_THROW(std::out_of_range{ "pos > size()"}); - if ((size() - n1 + n2) > max_size()) + if (size() - std::min(n1, size() - pos) >= max_size() - n2) BOOST_FIXED_STRING_THROW(std::length_error{ "replaced string exceeds max_size()"}); + if (pos + n1 >= size()) + n1 = size() - pos; Traits::move(&s_[pos + n2], &s_[pos + n1], size() - pos - n1 + 1); Traits::assign(&s_[pos], n2, c); n_ += (n2 - n1); @@ -675,12 +679,12 @@ rfind( size_type n) const -> size_type { - if (n > n_) + if (n_ < n) return npos; - if (n == 0) - return pos; if (pos > n_ - n) pos = n_ - n; + if (!n) + return pos; for (auto sub = &s_[pos]; sub >= s_; --sub) if (!Traits::compare(sub, s, n)) return std::distance(s_, sub); diff --git a/test/fixed_string.cpp b/test/fixed_string.cpp index c2804ae..91eda84 100644 --- a/test/fixed_string.cpp +++ b/test/fixed_string.cpp @@ -118,6 +118,14 @@ testConstruct() } } +template +bool +testAS(S s, const typename S::value_type* str, typename S::size_type n, S expected) +{ + s.assign(str, n); + return s == expected; +} + static void testAssignment() @@ -374,6 +382,54 @@ testAssignment() (s2.assign(std::string("12345"), 1, 3)), std::length_error); } + + using S = fixed_string<400>; + BOOST_TEST(testAS(S(), "", 0, S())); + BOOST_TEST(testAS(S(), "12345", 3, S("123"))); + BOOST_TEST(testAS(S(), "12345", 4, S("1234"))); + BOOST_TEST(testAS(S(), "12345678901234567890", 0, S())); + BOOST_TEST(testAS(S(), "12345678901234567890", 1, S("1"))); + BOOST_TEST(testAS(S(), "12345678901234567890", 3, S("123"))); + BOOST_TEST(testAS(S(), "12345678901234567890", 20, S("12345678901234567890"))); + + BOOST_TEST(testAS(S("12345"), "", 0, S())); + BOOST_TEST(testAS(S("12345"), "12345", 5, S("12345"))); + BOOST_TEST(testAS(S("12345"), "1234567890", 10, S("1234567890"))); + + BOOST_TEST(testAS(S("12345678901234567890"), "", 0, S())); + BOOST_TEST(testAS(S("12345678901234567890"), "12345", 5, S("12345"))); + BOOST_TEST(testAS(S("12345678901234567890"), "12345678901234567890", 20, + S("12345678901234567890"))); + BOOST_TEST(testAS(S(), "", 0, S())); + BOOST_TEST(testAS(S(), "12345", 3, S("123"))); + BOOST_TEST(testAS(S(), "12345", 4, S("1234"))); + BOOST_TEST(testAS(S(), "12345678901234567890", 0, S())); + BOOST_TEST(testAS(S(), "12345678901234567890", 1, S("1"))); + BOOST_TEST(testAS(S(), "12345678901234567890", 3, S("123"))); + BOOST_TEST(testAS(S(), "12345678901234567890", 20, S("12345678901234567890"))); + + BOOST_TEST(testAS(S("12345"), "", 0, S())); + BOOST_TEST(testAS(S("12345"), "12345", 5, S("12345"))); + BOOST_TEST(testAS(S("12345"), "1234567890", 10, S("1234567890"))); + + BOOST_TEST(testAS(S("12345678901234567890"), "", 0, S())); + BOOST_TEST(testAS(S("12345678901234567890"), "12345", 5, S("12345"))); + BOOST_TEST(testAS(S("12345678901234567890"), "12345678901234567890", 20, + S("12345678901234567890"))); + + S s_short = "123/"; + S s_long = "Lorem ipsum dolor sit amet, consectetur/"; + + s_short.assign(s_short.data(), s_short.size()); + BOOST_TEST(s_short == "123/"); + s_short.assign(s_short.data() + 2, s_short.size() - 2); + BOOST_TEST(s_short == "3/"); + + s_long.assign(s_long.data(), s_long.size()); + BOOST_TEST(s_long == "Lorem ipsum dolor sit amet, consectetur/"); + + s_long.assign(s_long.data() + 2, 8); + BOOST_TEST(s_long == "rem ipsu"); } static @@ -595,7 +651,6 @@ testClear() BOOST_TEST(*s.end() == 0); } - template bool testI(S s, typename S::size_type pos, const typename S::value_type* str, @@ -610,15 +665,8 @@ testI(S s, typename S::size_type pos, const typename S::value_type* str, } else { - try - { - s.insert(pos, str, n); - return s == expected; - } - catch (std::out_of_range&) - { - return true; - } + BOOST_TEST_THROWS((s.insert(pos, str, n)), std::out_of_range); + return true; } } @@ -891,120 +939,7 @@ testInsert() 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"))); @@ -1212,118 +1147,6 @@ testInsert() 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"))); @@ -1516,6 +1339,54 @@ testInsert() 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("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"), 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"), 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"))); } static @@ -1645,10 +1516,18 @@ testPopBack() } } +template +bool +testA(S s, const typename S::value_type* str, typename S::size_type n, S expected) +{ + return s.append(str, n) == expected; +} + static void testAppend() { + using S = fixed_string<400>; using sv = string_view; // append(size_type count, CharT ch) @@ -1826,6 +1705,32 @@ testAppend() (s2.append(std::string("PQR"), 1, 1)), std::length_error); } + BOOST_TEST(testA(S(), "", 0, S())); + BOOST_TEST(testA(S(), "12345", 3, S("123"))); + BOOST_TEST(testA(S(), "12345", 4, S("1234"))); + BOOST_TEST(testA(S(), "12345678901234567890", 0, S())); + BOOST_TEST(testA(S(), "12345678901234567890", 1, S("1"))); + BOOST_TEST(testA(S(), "12345678901234567890", 3, S("123"))); + BOOST_TEST(testA(S(), "12345678901234567890", 20, S("12345678901234567890"))); + + BOOST_TEST(testA(S("12345"), "", 0, S("12345"))); + BOOST_TEST(testA(S("12345"), "12345", 5, S("1234512345"))); + BOOST_TEST(testA(S("12345"), "1234567890", 10, S("123451234567890"))); + + BOOST_TEST(testA(S("12345678901234567890"), "", 0, S("12345678901234567890"))); + BOOST_TEST(testA(S("12345678901234567890"), "12345", 5, S("1234567890123456789012345"))); + BOOST_TEST(testA(S("12345678901234567890"), "12345678901234567890", 20, + S("1234567890123456789012345678901234567890"))); + + S s_short = "123/"; + S s_long = "Lorem ipsum dolor sit amet, consectetur/"; + + s_short.append(s_short.data(), s_short.size()); + BOOST_TEST(s_short == "123/123/"); + s_short.append(s_short.data(), s_short.size()); + BOOST_TEST(s_short == "123/123/123/123/"); + s_short.append(s_short.data(), s_short.size()); + BOOST_TEST(s_short == "123/123/123/123/123/123/123/123/"); } static @@ -1898,6 +1803,29 @@ testPlusEquals() } } +int sign(int x) +{ + if (x == 0) + return 0; + if (x < 0) + return -1; + return 1; +} + +template +bool +testC(const S& s, typename S::size_type pos, typename S::size_type n1, + const typename S::value_type* str, typename S::size_type n2, int x) +{ + if (pos <= s.size()) + return sign(s.compare(pos, n1, str, n2)) == sign(x); + else + { + BOOST_TEST_THROWS(s.compare(pos, n1, str, n2), std::out_of_range); + return true; + } +} + void testCompare() { @@ -1990,6 +1918,1192 @@ testCompare() BOOST_TEST(s1 < s2); BOOST_TEST(s2 > s1); } + + using S = fixed_string<400>; + BOOST_TEST(testC(S(""), 0, 0, "", 0, 0)); + BOOST_TEST(testC(S(""), 0, 0, "abcde", 0, 0)); + BOOST_TEST(testC(S(""), 0, 0, "abcde", 1, -1)); + BOOST_TEST(testC(S(""), 0, 0, "abcde", 2, -2)); + BOOST_TEST(testC(S(""), 0, 0, "abcde", 4, -4)); + BOOST_TEST(testC(S(""), 0, 0, "abcde", 5, -5)); + BOOST_TEST(testC(S(""), 0, 0, "abcdefghij", 0, 0)); + BOOST_TEST(testC(S(""), 0, 0, "abcdefghij", 1, -1)); + BOOST_TEST(testC(S(""), 0, 0, "abcdefghij", 5, -5)); + BOOST_TEST(testC(S(""), 0, 0, "abcdefghij", 9, -9)); + BOOST_TEST(testC(S(""), 0, 0, "abcdefghij", 10, -10)); + BOOST_TEST(testC(S(""), 0, 0, "abcdefghijklmnopqrst", 0, 0)); + BOOST_TEST(testC(S(""), 0, 0, "abcdefghijklmnopqrst", 1, -1)); + BOOST_TEST(testC(S(""), 0, 0, "abcdefghijklmnopqrst", 10, -10)); + BOOST_TEST(testC(S(""), 0, 0, "abcdefghijklmnopqrst", 19, -19)); + BOOST_TEST(testC(S(""), 0, 0, "abcdefghijklmnopqrst", 20, -20)); + BOOST_TEST(testC(S(""), 0, 1, "", 0, 0)); + BOOST_TEST(testC(S(""), 0, 1, "abcde", 0, 0)); + BOOST_TEST(testC(S(""), 0, 1, "abcde", 1, -1)); + BOOST_TEST(testC(S(""), 0, 1, "abcde", 2, -2)); + BOOST_TEST(testC(S(""), 0, 1, "abcde", 4, -4)); + BOOST_TEST(testC(S(""), 0, 1, "abcde", 5, -5)); + BOOST_TEST(testC(S(""), 0, 1, "abcdefghij", 0, 0)); + BOOST_TEST(testC(S(""), 0, 1, "abcdefghij", 1, -1)); + BOOST_TEST(testC(S(""), 0, 1, "abcdefghij", 5, -5)); + BOOST_TEST(testC(S(""), 0, 1, "abcdefghij", 9, -9)); + BOOST_TEST(testC(S(""), 0, 1, "abcdefghij", 10, -10)); + BOOST_TEST(testC(S(""), 0, 1, "abcdefghijklmnopqrst", 0, 0)); + BOOST_TEST(testC(S(""), 0, 1, "abcdefghijklmnopqrst", 1, -1)); + BOOST_TEST(testC(S(""), 0, 1, "abcdefghijklmnopqrst", 10, -10)); + BOOST_TEST(testC(S(""), 0, 1, "abcdefghijklmnopqrst", 19, -19)); + BOOST_TEST(testC(S(""), 0, 1, "abcdefghijklmnopqrst", 20, -20)); + BOOST_TEST(testC(S(""), 1, 0, "", 0, 0)); + BOOST_TEST(testC(S(""), 1, 0, "abcde", 0, 0)); + BOOST_TEST(testC(S(""), 1, 0, "abcde", 1, 0)); + BOOST_TEST(testC(S(""), 1, 0, "abcde", 2, 0)); + BOOST_TEST(testC(S(""), 1, 0, "abcde", 4, 0)); + BOOST_TEST(testC(S(""), 1, 0, "abcde", 5, 0)); + BOOST_TEST(testC(S(""), 1, 0, "abcdefghij", 0, 0)); + BOOST_TEST(testC(S(""), 1, 0, "abcdefghij", 1, 0)); + BOOST_TEST(testC(S(""), 1, 0, "abcdefghij", 5, 0)); + BOOST_TEST(testC(S(""), 1, 0, "abcdefghij", 9, 0)); + BOOST_TEST(testC(S(""), 1, 0, "abcdefghij", 10, 0)); + BOOST_TEST(testC(S(""), 1, 0, "abcdefghijklmnopqrst", 0, 0)); + BOOST_TEST(testC(S(""), 1, 0, "abcdefghijklmnopqrst", 1, 0)); + BOOST_TEST(testC(S(""), 1, 0, "abcdefghijklmnopqrst", 10, 0)); + BOOST_TEST(testC(S(""), 1, 0, "abcdefghijklmnopqrst", 19, 0)); + BOOST_TEST(testC(S(""), 1, 0, "abcdefghijklmnopqrst", 20, 0)); + BOOST_TEST(testC(S("abcde"), 0, 0, "", 0, 0)); + BOOST_TEST(testC(S("abcde"), 0, 0, "abcde", 0, 0)); + BOOST_TEST(testC(S("abcde"), 0, 0, "abcde", 1, -1)); + BOOST_TEST(testC(S("abcde"), 0, 0, "abcde", 2, -2)); + BOOST_TEST(testC(S("abcde"), 0, 0, "abcde", 4, -4)); + BOOST_TEST(testC(S("abcde"), 0, 0, "abcde", 5, -5)); + BOOST_TEST(testC(S("abcde"), 0, 0, "abcdefghij", 0, 0)); + BOOST_TEST(testC(S("abcde"), 0, 0, "abcdefghij", 1, -1)); + BOOST_TEST(testC(S("abcde"), 0, 0, "abcdefghij", 5, -5)); + BOOST_TEST(testC(S("abcde"), 0, 0, "abcdefghij", 9, -9)); + BOOST_TEST(testC(S("abcde"), 0, 0, "abcdefghij", 10, -10)); + BOOST_TEST(testC(S("abcde"), 0, 0, "abcdefghijklmnopqrst", 0, 0)); + BOOST_TEST(testC(S("abcde"), 0, 0, "abcdefghijklmnopqrst", 1, -1)); + BOOST_TEST(testC(S("abcde"), 0, 0, "abcdefghijklmnopqrst", 10, -10)); + BOOST_TEST(testC(S("abcde"), 0, 0, "abcdefghijklmnopqrst", 19, -19)); + BOOST_TEST(testC(S("abcde"), 0, 0, "abcdefghijklmnopqrst", 20, -20)); + BOOST_TEST(testC(S("abcde"), 0, 1, "", 0, 1)); + BOOST_TEST(testC(S("abcde"), 0, 1, "abcde", 0, 1)); + BOOST_TEST(testC(S("abcde"), 0, 1, "abcde", 1, 0)); + BOOST_TEST(testC(S("abcde"), 0, 1, "abcde", 2, -1)); + BOOST_TEST(testC(S("abcde"), 0, 1, "abcde", 4, -3)); + BOOST_TEST(testC(S("abcde"), 0, 1, "abcde", 5, -4)); + BOOST_TEST(testC(S("abcde"), 0, 1, "abcdefghij", 0, 1)); + BOOST_TEST(testC(S("abcde"), 0, 1, "abcdefghij", 1, 0)); + BOOST_TEST(testC(S("abcde"), 0, 1, "abcdefghij", 5, -4)); + BOOST_TEST(testC(S("abcde"), 0, 1, "abcdefghij", 9, -8)); + BOOST_TEST(testC(S("abcde"), 0, 1, "abcdefghij", 10, -9)); + BOOST_TEST(testC(S("abcde"), 0, 1, "abcdefghijklmnopqrst", 0, 1)); + BOOST_TEST(testC(S("abcde"), 0, 1, "abcdefghijklmnopqrst", 1, 0)); + BOOST_TEST(testC(S("abcde"), 0, 1, "abcdefghijklmnopqrst", 10, -9)); + BOOST_TEST(testC(S("abcde"), 0, 1, "abcdefghijklmnopqrst", 19, -18)); + BOOST_TEST(testC(S("abcde"), 0, 1, "abcdefghijklmnopqrst", 20, -19)); + BOOST_TEST(testC(S("abcde"), 0, 2, "", 0, 2)); + BOOST_TEST(testC(S("abcde"), 0, 2, "abcde", 0, 2)); + BOOST_TEST(testC(S("abcde"), 0, 2, "abcde", 1, 1)); + BOOST_TEST(testC(S("abcde"), 0, 2, "abcde", 2, 0)); + BOOST_TEST(testC(S("abcde"), 0, 2, "abcde", 4, -2)); + BOOST_TEST(testC(S("abcde"), 0, 2, "abcde", 5, -3)); + BOOST_TEST(testC(S("abcde"), 0, 2, "abcdefghij", 0, 2)); + BOOST_TEST(testC(S("abcde"), 0, 2, "abcdefghij", 1, 1)); + BOOST_TEST(testC(S("abcde"), 0, 2, "abcdefghij", 5, -3)); + BOOST_TEST(testC(S("abcde"), 0, 2, "abcdefghij", 9, -7)); + BOOST_TEST(testC(S("abcde"), 0, 2, "abcdefghij", 10, -8)); + BOOST_TEST(testC(S("abcde"), 0, 2, "abcdefghijklmnopqrst", 0, 2)); + BOOST_TEST(testC(S("abcde"), 0, 2, "abcdefghijklmnopqrst", 1, 1)); + BOOST_TEST(testC(S("abcde"), 0, 2, "abcdefghijklmnopqrst", 10, -8)); + BOOST_TEST(testC(S("abcde"), 0, 2, "abcdefghijklmnopqrst", 19, -17)); + BOOST_TEST(testC(S("abcde"), 0, 2, "abcdefghijklmnopqrst", 20, -18)); + BOOST_TEST(testC(S("abcde"), 0, 4, "", 0, 4)); + BOOST_TEST(testC(S("abcde"), 0, 4, "abcde", 0, 4)); + BOOST_TEST(testC(S("abcde"), 0, 4, "abcde", 1, 3)); + BOOST_TEST(testC(S("abcde"), 0, 4, "abcde", 2, 2)); + BOOST_TEST(testC(S("abcde"), 0, 4, "abcde", 4, 0)); + BOOST_TEST(testC(S("abcde"), 0, 4, "abcde", 5, -1)); + BOOST_TEST(testC(S("abcde"), 0, 4, "abcdefghij", 0, 4)); + BOOST_TEST(testC(S("abcde"), 0, 4, "abcdefghij", 1, 3)); + BOOST_TEST(testC(S("abcde"), 0, 4, "abcdefghij", 5, -1)); + BOOST_TEST(testC(S("abcde"), 0, 4, "abcdefghij", 9, -5)); + BOOST_TEST(testC(S("abcde"), 0, 4, "abcdefghij", 10, -6)); + BOOST_TEST(testC(S("abcde"), 0, 4, "abcdefghijklmnopqrst", 0, 4)); + BOOST_TEST(testC(S("abcde"), 0, 4, "abcdefghijklmnopqrst", 1, 3)); + BOOST_TEST(testC(S("abcde"), 0, 4, "abcdefghijklmnopqrst", 10, -6)); + BOOST_TEST(testC(S("abcde"), 0, 4, "abcdefghijklmnopqrst", 19, -15)); + BOOST_TEST(testC(S("abcde"), 0, 4, "abcdefghijklmnopqrst", 20, -16)); + BOOST_TEST(testC(S("abcde"), 0, 5, "", 0, 5)); + BOOST_TEST(testC(S("abcde"), 0, 5, "abcde", 0, 5)); + BOOST_TEST(testC(S("abcde"), 0, 5, "abcde", 1, 4)); + BOOST_TEST(testC(S("abcde"), 0, 5, "abcde", 2, 3)); + BOOST_TEST(testC(S("abcde"), 0, 5, "abcde", 4, 1)); + BOOST_TEST(testC(S("abcde"), 0, 5, "abcde", 5, 0)); + BOOST_TEST(testC(S("abcde"), 0, 5, "abcdefghij", 0, 5)); + BOOST_TEST(testC(S("abcde"), 0, 5, "abcdefghij", 1, 4)); + BOOST_TEST(testC(S("abcde"), 0, 5, "abcdefghij", 5, 0)); + BOOST_TEST(testC(S("abcde"), 0, 5, "abcdefghij", 9, -4)); + BOOST_TEST(testC(S("abcde"), 0, 5, "abcdefghij", 10, -5)); + BOOST_TEST(testC(S("abcde"), 0, 5, "abcdefghijklmnopqrst", 0, 5)); + BOOST_TEST(testC(S("abcde"), 0, 5, "abcdefghijklmnopqrst", 1, 4)); + BOOST_TEST(testC(S("abcde"), 0, 5, "abcdefghijklmnopqrst", 10, -5)); + BOOST_TEST(testC(S("abcde"), 0, 5, "abcdefghijklmnopqrst", 19, -14)); + BOOST_TEST(testC(S("abcde"), 0, 5, "abcdefghijklmnopqrst", 20, -15)); + BOOST_TEST(testC(S("abcde"), 0, 6, "", 0, 5)); + BOOST_TEST(testC(S("abcde"), 0, 6, "abcde", 0, 5)); + BOOST_TEST(testC(S("abcde"), 0, 6, "abcde", 1, 4)); + BOOST_TEST(testC(S("abcde"), 0, 6, "abcde", 2, 3)); + BOOST_TEST(testC(S("abcde"), 0, 6, "abcde", 4, 1)); + BOOST_TEST(testC(S("abcde"), 0, 6, "abcde", 5, 0)); + BOOST_TEST(testC(S("abcde"), 0, 6, "abcdefghij", 0, 5)); + BOOST_TEST(testC(S("abcde"), 0, 6, "abcdefghij", 1, 4)); + BOOST_TEST(testC(S("abcde"), 0, 6, "abcdefghij", 5, 0)); + BOOST_TEST(testC(S("abcde"), 0, 6, "abcdefghij", 9, -4)); + BOOST_TEST(testC(S("abcde"), 0, 6, "abcdefghij", 10, -5)); + BOOST_TEST(testC(S("abcde"), 0, 6, "abcdefghijklmnopqrst", 0, 5)); + BOOST_TEST(testC(S("abcde"), 0, 6, "abcdefghijklmnopqrst", 1, 4)); + BOOST_TEST(testC(S("abcde"), 0, 6, "abcdefghijklmnopqrst", 10, -5)); + BOOST_TEST(testC(S("abcde"), 0, 6, "abcdefghijklmnopqrst", 19, -14)); + BOOST_TEST(testC(S("abcde"), 0, 6, "abcdefghijklmnopqrst", 20, -15)); + BOOST_TEST(testC(S("abcde"), 1, 0, "", 0, 0)); + BOOST_TEST(testC(S("abcde"), 1, 0, "abcde", 0, 0)); + BOOST_TEST(testC(S("abcde"), 1, 0, "abcde", 1, -1)); + BOOST_TEST(testC(S("abcde"), 1, 0, "abcde", 2, -2)); + BOOST_TEST(testC(S("abcde"), 1, 0, "abcde", 4, -4)); + BOOST_TEST(testC(S("abcde"), 1, 0, "abcde", 5, -5)); + BOOST_TEST(testC(S("abcde"), 1, 0, "abcdefghij", 0, 0)); + BOOST_TEST(testC(S("abcde"), 1, 0, "abcdefghij", 1, -1)); + BOOST_TEST(testC(S("abcde"), 1, 0, "abcdefghij", 5, -5)); + BOOST_TEST(testC(S("abcde"), 1, 0, "abcdefghij", 9, -9)); + BOOST_TEST(testC(S("abcde"), 1, 0, "abcdefghij", 10, -10)); + BOOST_TEST(testC(S("abcde"), 1, 0, "abcdefghijklmnopqrst", 0, 0)); + BOOST_TEST(testC(S("abcde"), 1, 0, "abcdefghijklmnopqrst", 1, -1)); + BOOST_TEST(testC(S("abcde"), 1, 0, "abcdefghijklmnopqrst", 10, -10)); + BOOST_TEST(testC(S("abcde"), 1, 0, "abcdefghijklmnopqrst", 19, -19)); + BOOST_TEST(testC(S("abcde"), 1, 0, "abcdefghijklmnopqrst", 20, -20)); + BOOST_TEST(testC(S("abcde"), 1, 1, "", 0, 1)); + BOOST_TEST(testC(S("abcde"), 1, 1, "abcde", 0, 1)); + BOOST_TEST(testC(S("abcde"), 1, 1, "abcde", 1, 1)); + BOOST_TEST(testC(S("abcde"), 1, 1, "abcde", 2, 1)); + BOOST_TEST(testC(S("abcde"), 1, 1, "abcde", 4, 1)); + BOOST_TEST(testC(S("abcde"), 1, 1, "abcde", 5, 1)); + BOOST_TEST(testC(S("abcde"), 1, 1, "abcdefghij", 0, 1)); + BOOST_TEST(testC(S("abcde"), 1, 1, "abcdefghij", 1, 1)); + BOOST_TEST(testC(S("abcde"), 1, 1, "abcdefghij", 5, 1)); + BOOST_TEST(testC(S("abcde"), 1, 1, "abcdefghij", 9, 1)); + BOOST_TEST(testC(S("abcde"), 1, 1, "abcdefghij", 10, 1)); + BOOST_TEST(testC(S("abcde"), 1, 1, "abcdefghijklmnopqrst", 0, 1)); + BOOST_TEST(testC(S("abcde"), 1, 1, "abcdefghijklmnopqrst", 1, 1)); + BOOST_TEST(testC(S("abcde"), 1, 1, "abcdefghijklmnopqrst", 10, 1)); + BOOST_TEST(testC(S("abcde"), 1, 1, "abcdefghijklmnopqrst", 19, 1)); + BOOST_TEST(testC(S("abcde"), 1, 1, "abcdefghijklmnopqrst", 20, 1)); + BOOST_TEST(testC(S("abcde"), 1, 2, "", 0, 2)); + BOOST_TEST(testC(S("abcde"), 1, 2, "abcde", 0, 2)); + BOOST_TEST(testC(S("abcde"), 1, 2, "abcde", 1, 1)); + BOOST_TEST(testC(S("abcde"), 1, 2, "abcde", 2, 1)); + BOOST_TEST(testC(S("abcde"), 1, 2, "abcde", 4, 1)); + BOOST_TEST(testC(S("abcde"), 1, 2, "abcde", 5, 1)); + BOOST_TEST(testC(S("abcde"), 1, 2, "abcdefghij", 0, 2)); + BOOST_TEST(testC(S("abcde"), 1, 2, "abcdefghij", 1, 1)); + BOOST_TEST(testC(S("abcde"), 1, 2, "abcdefghij", 5, 1)); + BOOST_TEST(testC(S("abcde"), 1, 2, "abcdefghij", 9, 1)); + BOOST_TEST(testC(S("abcde"), 1, 2, "abcdefghij", 10, 1)); + BOOST_TEST(testC(S("abcde"), 1, 2, "abcdefghijklmnopqrst", 0, 2)); + BOOST_TEST(testC(S("abcde"), 1, 2, "abcdefghijklmnopqrst", 1, 1)); + BOOST_TEST(testC(S("abcde"), 1, 2, "abcdefghijklmnopqrst", 10, 1)); + BOOST_TEST(testC(S("abcde"), 1, 2, "abcdefghijklmnopqrst", 19, 1)); + BOOST_TEST(testC(S("abcde"), 1, 2, "abcdefghijklmnopqrst", 20, 1)); + BOOST_TEST(testC(S("abcde"), 1, 3, "", 0, 3)); + BOOST_TEST(testC(S("abcde"), 1, 3, "abcde", 0, 3)); + BOOST_TEST(testC(S("abcde"), 1, 3, "abcde", 1, 1)); + BOOST_TEST(testC(S("abcde"), 1, 3, "abcde", 2, 1)); + BOOST_TEST(testC(S("abcde"), 1, 3, "abcde", 4, 1)); + BOOST_TEST(testC(S("abcde"), 1, 3, "abcde", 5, 1)); + BOOST_TEST(testC(S("abcde"), 1, 3, "abcdefghij", 0, 3)); + BOOST_TEST(testC(S("abcde"), 1, 3, "abcdefghij", 1, 1)); + BOOST_TEST(testC(S("abcde"), 1, 3, "abcdefghij", 5, 1)); + BOOST_TEST(testC(S("abcde"), 1, 3, "abcdefghij", 9, 1)); + BOOST_TEST(testC(S("abcde"), 1, 3, "abcdefghij", 10, 1)); + BOOST_TEST(testC(S("abcde"), 1, 3, "abcdefghijklmnopqrst", 0, 3)); + BOOST_TEST(testC(S("abcde"), 1, 3, "abcdefghijklmnopqrst", 1, 1)); + BOOST_TEST(testC(S("abcde"), 1, 3, "abcdefghijklmnopqrst", 10, 1)); + BOOST_TEST(testC(S("abcde"), 1, 3, "abcdefghijklmnopqrst", 19, 1)); + BOOST_TEST(testC(S("abcde"), 1, 3, "abcdefghijklmnopqrst", 20, 1)); + BOOST_TEST(testC(S("abcde"), 1, 4, "", 0, 4)); + BOOST_TEST(testC(S("abcde"), 1, 4, "abcde", 0, 4)); + BOOST_TEST(testC(S("abcde"), 1, 4, "abcde", 1, 1)); + BOOST_TEST(testC(S("abcde"), 1, 4, "abcde", 2, 1)); + BOOST_TEST(testC(S("abcde"), 1, 4, "abcde", 4, 1)); + BOOST_TEST(testC(S("abcde"), 1, 4, "abcde", 5, 1)); + BOOST_TEST(testC(S("abcde"), 1, 4, "abcdefghij", 0, 4)); + BOOST_TEST(testC(S("abcde"), 1, 4, "abcdefghij", 1, 1)); + BOOST_TEST(testC(S("abcde"), 1, 4, "abcdefghij", 5, 1)); + BOOST_TEST(testC(S("abcde"), 1, 4, "abcdefghij", 9, 1)); + BOOST_TEST(testC(S("abcde"), 1, 4, "abcdefghij", 10, 1)); + BOOST_TEST(testC(S("abcde"), 1, 4, "abcdefghijklmnopqrst", 0, 4)); + BOOST_TEST(testC(S("abcde"), 1, 4, "abcdefghijklmnopqrst", 1, 1)); + BOOST_TEST(testC(S("abcde"), 1, 4, "abcdefghijklmnopqrst", 10, 1)); + BOOST_TEST(testC(S("abcde"), 1, 4, "abcdefghijklmnopqrst", 19, 1)); + BOOST_TEST(testC(S("abcde"), 1, 4, "abcdefghijklmnopqrst", 20, 1)); + BOOST_TEST(testC(S("abcde"), 1, 5, "", 0, 4)); + BOOST_TEST(testC(S("abcde"), 1, 5, "abcde", 0, 4)); + BOOST_TEST(testC(S("abcde"), 1, 5, "abcde", 1, 1)); + BOOST_TEST(testC(S("abcde"), 1, 5, "abcde", 2, 1)); + BOOST_TEST(testC(S("abcde"), 1, 5, "abcde", 4, 1)); + BOOST_TEST(testC(S("abcde"), 1, 5, "abcde", 5, 1)); + BOOST_TEST(testC(S("abcde"), 1, 5, "abcdefghij", 0, 4)); + BOOST_TEST(testC(S("abcde"), 1, 5, "abcdefghij", 1, 1)); + BOOST_TEST(testC(S("abcde"), 1, 5, "abcdefghij", 5, 1)); + BOOST_TEST(testC(S("abcde"), 1, 5, "abcdefghij", 9, 1)); + BOOST_TEST(testC(S("abcde"), 1, 5, "abcdefghij", 10, 1)); + BOOST_TEST(testC(S("abcde"), 1, 5, "abcdefghijklmnopqrst", 0, 4)); + BOOST_TEST(testC(S("abcde"), 1, 5, "abcdefghijklmnopqrst", 1, 1)); + BOOST_TEST(testC(S("abcde"), 1, 5, "abcdefghijklmnopqrst", 10, 1)); + BOOST_TEST(testC(S("abcde"), 1, 5, "abcdefghijklmnopqrst", 19, 1)); + BOOST_TEST(testC(S("abcde"), 1, 5, "abcdefghijklmnopqrst", 20, 1)); + BOOST_TEST(testC(S("abcde"), 2, 0, "", 0, 0)); + BOOST_TEST(testC(S("abcde"), 2, 0, "abcde", 0, 0)); + BOOST_TEST(testC(S("abcde"), 2, 0, "abcde", 1, -1)); + BOOST_TEST(testC(S("abcde"), 2, 0, "abcde", 2, -2)); + BOOST_TEST(testC(S("abcde"), 2, 0, "abcde", 4, -4)); + BOOST_TEST(testC(S("abcde"), 2, 0, "abcde", 5, -5)); + BOOST_TEST(testC(S("abcde"), 2, 0, "abcdefghij", 0, 0)); + BOOST_TEST(testC(S("abcde"), 2, 0, "abcdefghij", 1, -1)); + BOOST_TEST(testC(S("abcde"), 2, 0, "abcdefghij", 5, -5)); + BOOST_TEST(testC(S("abcde"), 2, 0, "abcdefghij", 9, -9)); + BOOST_TEST(testC(S("abcde"), 2, 0, "abcdefghij", 10, -10)); + BOOST_TEST(testC(S("abcde"), 2, 0, "abcdefghijklmnopqrst", 0, 0)); + BOOST_TEST(testC(S("abcde"), 2, 0, "abcdefghijklmnopqrst", 1, -1)); + BOOST_TEST(testC(S("abcde"), 2, 0, "abcdefghijklmnopqrst", 10, -10)); + BOOST_TEST(testC(S("abcde"), 2, 0, "abcdefghijklmnopqrst", 19, -19)); + BOOST_TEST(testC(S("abcde"), 2, 0, "abcdefghijklmnopqrst", 20, -20)); + BOOST_TEST(testC(S("abcde"), 2, 1, "", 0, 1)); + BOOST_TEST(testC(S("abcde"), 2, 1, "abcde", 0, 1)); + BOOST_TEST(testC(S("abcde"), 2, 1, "abcde", 1, 2)); + BOOST_TEST(testC(S("abcde"), 2, 1, "abcde", 2, 2)); + BOOST_TEST(testC(S("abcde"), 2, 1, "abcde", 4, 2)); + BOOST_TEST(testC(S("abcde"), 2, 1, "abcde", 5, 2)); + BOOST_TEST(testC(S("abcde"), 2, 1, "abcdefghij", 0, 1)); + BOOST_TEST(testC(S("abcde"), 2, 1, "abcdefghij", 1, 2)); + BOOST_TEST(testC(S("abcde"), 2, 1, "abcdefghij", 5, 2)); + BOOST_TEST(testC(S("abcde"), 2, 1, "abcdefghij", 9, 2)); + BOOST_TEST(testC(S("abcde"), 2, 1, "abcdefghij", 10, 2)); + BOOST_TEST(testC(S("abcde"), 2, 1, "abcdefghijklmnopqrst", 0, 1)); + BOOST_TEST(testC(S("abcde"), 2, 1, "abcdefghijklmnopqrst", 1, 2)); + BOOST_TEST(testC(S("abcde"), 2, 1, "abcdefghijklmnopqrst", 10, 2)); + BOOST_TEST(testC(S("abcde"), 2, 1, "abcdefghijklmnopqrst", 19, 2)); + BOOST_TEST(testC(S("abcde"), 2, 1, "abcdefghijklmnopqrst", 20, 2)); + BOOST_TEST(testC(S("abcde"), 2, 2, "", 0, 2)); + BOOST_TEST(testC(S("abcde"), 2, 2, "abcde", 0, 2)); + BOOST_TEST(testC(S("abcde"), 2, 2, "abcde", 1, 2)); + BOOST_TEST(testC(S("abcde"), 2, 2, "abcde", 2, 2)); + BOOST_TEST(testC(S("abcde"), 2, 2, "abcde", 4, 2)); + BOOST_TEST(testC(S("abcde"), 2, 2, "abcde", 5, 2)); + BOOST_TEST(testC(S("abcde"), 2, 2, "abcdefghij", 0, 2)); + BOOST_TEST(testC(S("abcde"), 2, 2, "abcdefghij", 1, 2)); + BOOST_TEST(testC(S("abcde"), 2, 2, "abcdefghij", 5, 2)); + BOOST_TEST(testC(S("abcde"), 2, 2, "abcdefghij", 9, 2)); + BOOST_TEST(testC(S("abcde"), 2, 2, "abcdefghij", 10, 2)); + BOOST_TEST(testC(S("abcde"), 2, 2, "abcdefghijklmnopqrst", 0, 2)); + BOOST_TEST(testC(S("abcde"), 2, 2, "abcdefghijklmnopqrst", 1, 2)); + BOOST_TEST(testC(S("abcde"), 2, 2, "abcdefghijklmnopqrst", 10, 2)); + BOOST_TEST(testC(S("abcde"), 2, 2, "abcdefghijklmnopqrst", 19, 2)); + BOOST_TEST(testC(S("abcde"), 2, 2, "abcdefghijklmnopqrst", 20, 2)); + BOOST_TEST(testC(S("abcde"), 2, 3, "", 0, 3)); + BOOST_TEST(testC(S("abcde"), 2, 3, "abcde", 0, 3)); + BOOST_TEST(testC(S("abcde"), 2, 3, "abcde", 1, 2)); + BOOST_TEST(testC(S("abcde"), 2, 3, "abcde", 2, 2)); + BOOST_TEST(testC(S("abcde"), 2, 3, "abcde", 4, 2)); + BOOST_TEST(testC(S("abcde"), 2, 3, "abcde", 5, 2)); + BOOST_TEST(testC(S("abcde"), 2, 3, "abcdefghij", 0, 3)); + BOOST_TEST(testC(S("abcde"), 2, 3, "abcdefghij", 1, 2)); + BOOST_TEST(testC(S("abcde"), 2, 3, "abcdefghij", 5, 2)); + BOOST_TEST(testC(S("abcde"), 2, 3, "abcdefghij", 9, 2)); + BOOST_TEST(testC(S("abcde"), 2, 3, "abcdefghij", 10, 2)); + BOOST_TEST(testC(S("abcde"), 2, 3, "abcdefghijklmnopqrst", 0, 3)); + BOOST_TEST(testC(S("abcde"), 2, 3, "abcdefghijklmnopqrst", 1, 2)); + BOOST_TEST(testC(S("abcde"), 2, 3, "abcdefghijklmnopqrst", 10, 2)); + BOOST_TEST(testC(S("abcde"), 2, 3, "abcdefghijklmnopqrst", 19, 2)); + BOOST_TEST(testC(S("abcde"), 2, 3, "abcdefghijklmnopqrst", 20, 2)); + BOOST_TEST(testC(S("abcde"), 2, 4, "", 0, 3)); + BOOST_TEST(testC(S("abcde"), 2, 4, "abcde", 0, 3)); + BOOST_TEST(testC(S("abcde"), 2, 4, "abcde", 1, 2)); + BOOST_TEST(testC(S("abcde"), 2, 4, "abcde", 2, 2)); + BOOST_TEST(testC(S("abcde"), 2, 4, "abcde", 4, 2)); + BOOST_TEST(testC(S("abcde"), 2, 4, "abcde", 5, 2)); + BOOST_TEST(testC(S("abcde"), 2, 4, "abcdefghij", 0, 3)); + BOOST_TEST(testC(S("abcde"), 2, 4, "abcdefghij", 1, 2)); + BOOST_TEST(testC(S("abcde"), 2, 4, "abcdefghij", 5, 2)); + BOOST_TEST(testC(S("abcde"), 2, 4, "abcdefghij", 9, 2)); + BOOST_TEST(testC(S("abcde"), 2, 4, "abcdefghij", 10, 2)); + BOOST_TEST(testC(S("abcde"), 2, 4, "abcdefghijklmnopqrst", 0, 3)); + BOOST_TEST(testC(S("abcde"), 2, 4, "abcdefghijklmnopqrst", 1, 2)); + BOOST_TEST(testC(S("abcde"), 2, 4, "abcdefghijklmnopqrst", 10, 2)); + BOOST_TEST(testC(S("abcde"), 2, 4, "abcdefghijklmnopqrst", 19, 2)); + BOOST_TEST(testC(S("abcde"), 2, 4, "abcdefghijklmnopqrst", 20, 2)); + BOOST_TEST(testC(S("abcde"), 4, 0, "", 0, 0)); + BOOST_TEST(testC(S("abcde"), 4, 0, "abcde", 0, 0)); + BOOST_TEST(testC(S("abcde"), 4, 0, "abcde", 1, -1)); + BOOST_TEST(testC(S("abcde"), 4, 0, "abcde", 2, -2)); + BOOST_TEST(testC(S("abcde"), 4, 0, "abcde", 4, -4)); + BOOST_TEST(testC(S("abcde"), 4, 0, "abcde", 5, -5)); + BOOST_TEST(testC(S("abcde"), 4, 0, "abcdefghij", 0, 0)); + BOOST_TEST(testC(S("abcde"), 4, 0, "abcdefghij", 1, -1)); + BOOST_TEST(testC(S("abcde"), 4, 0, "abcdefghij", 5, -5)); + BOOST_TEST(testC(S("abcde"), 4, 0, "abcdefghij", 9, -9)); + BOOST_TEST(testC(S("abcde"), 4, 0, "abcdefghij", 10, -10)); + BOOST_TEST(testC(S("abcde"), 4, 0, "abcdefghijklmnopqrst", 0, 0)); + BOOST_TEST(testC(S("abcde"), 4, 0, "abcdefghijklmnopqrst", 1, -1)); + BOOST_TEST(testC(S("abcde"), 4, 0, "abcdefghijklmnopqrst", 10, -10)); + BOOST_TEST(testC(S("abcde"), 4, 0, "abcdefghijklmnopqrst", 19, -19)); + BOOST_TEST(testC(S("abcde"), 4, 0, "abcdefghijklmnopqrst", 20, -20)); + BOOST_TEST(testC(S("abcde"), 4, 1, "", 0, 1)); + BOOST_TEST(testC(S("abcde"), 4, 1, "abcde", 0, 1)); + BOOST_TEST(testC(S("abcde"), 4, 1, "abcde", 1, 4)); + BOOST_TEST(testC(S("abcde"), 4, 1, "abcde", 2, 4)); + BOOST_TEST(testC(S("abcde"), 4, 1, "abcde", 4, 4)); + BOOST_TEST(testC(S("abcde"), 4, 1, "abcde", 5, 4)); + BOOST_TEST(testC(S("abcde"), 4, 1, "abcdefghij", 0, 1)); + BOOST_TEST(testC(S("abcde"), 4, 1, "abcdefghij", 1, 4)); + BOOST_TEST(testC(S("abcde"), 4, 1, "abcdefghij", 5, 4)); + BOOST_TEST(testC(S("abcde"), 4, 1, "abcdefghij", 9, 4)); + BOOST_TEST(testC(S("abcde"), 4, 1, "abcdefghij", 10, 4)); + BOOST_TEST(testC(S("abcde"), 4, 1, "abcdefghijklmnopqrst", 0, 1)); + BOOST_TEST(testC(S("abcde"), 4, 1, "abcdefghijklmnopqrst", 1, 4)); + BOOST_TEST(testC(S("abcde"), 4, 1, "abcdefghijklmnopqrst", 10, 4)); + BOOST_TEST(testC(S("abcde"), 4, 1, "abcdefghijklmnopqrst", 19, 4)); + BOOST_TEST(testC(S("abcde"), 4, 1, "abcdefghijklmnopqrst", 20, 4)); + BOOST_TEST(testC(S("abcde"), 4, 2, "", 0, 1)); + BOOST_TEST(testC(S("abcde"), 4, 2, "abcde", 0, 1)); + BOOST_TEST(testC(S("abcde"), 4, 2, "abcde", 1, 4)); + BOOST_TEST(testC(S("abcde"), 4, 2, "abcde", 2, 4)); + BOOST_TEST(testC(S("abcde"), 4, 2, "abcde", 4, 4)); + BOOST_TEST(testC(S("abcde"), 4, 2, "abcde", 5, 4)); + BOOST_TEST(testC(S("abcde"), 4, 2, "abcdefghij", 0, 1)); + BOOST_TEST(testC(S("abcde"), 4, 2, "abcdefghij", 1, 4)); + BOOST_TEST(testC(S("abcde"), 4, 2, "abcdefghij", 5, 4)); + BOOST_TEST(testC(S("abcde"), 4, 2, "abcdefghij", 9, 4)); + BOOST_TEST(testC(S("abcde"), 4, 2, "abcdefghij", 10, 4)); + BOOST_TEST(testC(S("abcde"), 4, 2, "abcdefghijklmnopqrst", 0, 1)); + BOOST_TEST(testC(S("abcde"), 4, 2, "abcdefghijklmnopqrst", 1, 4)); + BOOST_TEST(testC(S("abcde"), 4, 2, "abcdefghijklmnopqrst", 10, 4)); + BOOST_TEST(testC(S("abcde"), 4, 2, "abcdefghijklmnopqrst", 19, 4)); + BOOST_TEST(testC(S("abcde"), 4, 2, "abcdefghijklmnopqrst", 20, 4)); + BOOST_TEST(testC(S("abcde"), 5, 0, "", 0, 0)); + BOOST_TEST(testC(S("abcde"), 5, 0, "abcde", 0, 0)); + BOOST_TEST(testC(S("abcde"), 5, 0, "abcde", 1, -1)); + BOOST_TEST(testC(S("abcde"), 5, 0, "abcde", 2, -2)); + BOOST_TEST(testC(S("abcde"), 5, 0, "abcde", 4, -4)); + BOOST_TEST(testC(S("abcde"), 5, 0, "abcde", 5, -5)); + BOOST_TEST(testC(S("abcde"), 5, 0, "abcdefghij", 0, 0)); + BOOST_TEST(testC(S("abcde"), 5, 0, "abcdefghij", 1, -1)); + BOOST_TEST(testC(S("abcde"), 5, 0, "abcdefghij", 5, -5)); + BOOST_TEST(testC(S("abcde"), 5, 0, "abcdefghij", 9, -9)); + BOOST_TEST(testC(S("abcde"), 5, 0, "abcdefghij", 10, -10)); + BOOST_TEST(testC(S("abcde"), 5, 0, "abcdefghijklmnopqrst", 0, 0)); + BOOST_TEST(testC(S("abcde"), 5, 0, "abcdefghijklmnopqrst", 1, -1)); + BOOST_TEST(testC(S("abcde"), 5, 0, "abcdefghijklmnopqrst", 10, -10)); + BOOST_TEST(testC(S("abcde"), 5, 0, "abcdefghijklmnopqrst", 19, -19)); + BOOST_TEST(testC(S("abcde"), 5, 0, "abcdefghijklmnopqrst", 20, -20)); + BOOST_TEST(testC(S("abcde"), 5, 1, "", 0, 0)); + BOOST_TEST(testC(S("abcde"), 5, 1, "abcde", 0, 0)); + BOOST_TEST(testC(S("abcde"), 5, 1, "abcde", 1, -1)); + BOOST_TEST(testC(S("abcde"), 5, 1, "abcde", 2, -2)); + BOOST_TEST(testC(S("abcde"), 5, 1, "abcde", 4, -4)); + BOOST_TEST(testC(S("abcde"), 5, 1, "abcde", 5, -5)); + BOOST_TEST(testC(S("abcde"), 5, 1, "abcdefghij", 0, 0)); + BOOST_TEST(testC(S("abcde"), 5, 1, "abcdefghij", 1, -1)); + BOOST_TEST(testC(S("abcde"), 5, 1, "abcdefghij", 5, -5)); + BOOST_TEST(testC(S("abcde"), 5, 1, "abcdefghij", 9, -9)); + BOOST_TEST(testC(S("abcde"), 5, 1, "abcdefghij", 10, -10)); + BOOST_TEST(testC(S("abcde"), 5, 1, "abcdefghijklmnopqrst", 0, 0)); + BOOST_TEST(testC(S("abcde"), 5, 1, "abcdefghijklmnopqrst", 1, -1)); + BOOST_TEST(testC(S("abcde"), 5, 1, "abcdefghijklmnopqrst", 10, -10)); + BOOST_TEST(testC(S("abcde"), 5, 1, "abcdefghijklmnopqrst", 19, -19)); + BOOST_TEST(testC(S("abcde"), 5, 1, "abcdefghijklmnopqrst", 20, -20)); + BOOST_TEST(testC(S("abcde"), 6, 0, "", 0, 0)); + BOOST_TEST(testC(S("abcde"), 6, 0, "abcde", 0, 0)); + BOOST_TEST(testC(S("abcde"), 6, 0, "abcde", 1, 0)); + BOOST_TEST(testC(S("abcde"), 6, 0, "abcde", 2, 0)); + BOOST_TEST(testC(S("abcde"), 6, 0, "abcde", 4, 0)); + BOOST_TEST(testC(S("abcde"), 6, 0, "abcde", 5, 0)); + BOOST_TEST(testC(S("abcde"), 6, 0, "abcdefghij", 0, 0)); + BOOST_TEST(testC(S("abcde"), 6, 0, "abcdefghij", 1, 0)); + BOOST_TEST(testC(S("abcde"), 6, 0, "abcdefghij", 5, 0)); + BOOST_TEST(testC(S("abcde"), 6, 0, "abcdefghij", 9, 0)); + BOOST_TEST(testC(S("abcde"), 6, 0, "abcdefghij", 10, 0)); + BOOST_TEST(testC(S("abcde"), 6, 0, "abcdefghijklmnopqrst", 0, 0)); + BOOST_TEST(testC(S("abcde"), 6, 0, "abcdefghijklmnopqrst", 1, 0)); + BOOST_TEST(testC(S("abcde"), 6, 0, "abcdefghijklmnopqrst", 10, 0)); + BOOST_TEST(testC(S("abcde"), 6, 0, "abcdefghijklmnopqrst", 19, 0)); + BOOST_TEST(testC(S("abcde"), 6, 0, "abcdefghijklmnopqrst", 20, 0)); + BOOST_TEST(testC(S("abcdefghij"), 0, 0, "", 0, 0)); + BOOST_TEST(testC(S("abcdefghij"), 0, 0, "abcde", 0, 0)); + BOOST_TEST(testC(S("abcdefghij"), 0, 0, "abcde", 1, -1)); + BOOST_TEST(testC(S("abcdefghij"), 0, 0, "abcde", 2, -2)); + BOOST_TEST(testC(S("abcdefghij"), 0, 0, "abcde", 4, -4)); + BOOST_TEST(testC(S("abcdefghij"), 0, 0, "abcde", 5, -5)); + BOOST_TEST(testC(S("abcdefghij"), 0, 0, "abcdefghij", 0, 0)); + BOOST_TEST(testC(S("abcdefghij"), 0, 0, "abcdefghij", 1, -1)); + BOOST_TEST(testC(S("abcdefghij"), 0, 0, "abcdefghij", 5, -5)); + BOOST_TEST(testC(S("abcdefghij"), 0, 0, "abcdefghij", 9, -9)); + BOOST_TEST(testC(S("abcdefghij"), 0, 0, "abcdefghij", 10, -10)); + BOOST_TEST(testC(S("abcdefghij"), 0, 0, "abcdefghijklmnopqrst", 0, 0)); + BOOST_TEST(testC(S("abcdefghij"), 0, 0, "abcdefghijklmnopqrst", 1, -1)); + BOOST_TEST(testC(S("abcdefghij"), 0, 0, "abcdefghijklmnopqrst", 10, -10)); + BOOST_TEST(testC(S("abcdefghij"), 0, 0, "abcdefghijklmnopqrst", 19, -19)); + BOOST_TEST(testC(S("abcdefghij"), 0, 0, "abcdefghijklmnopqrst", 20, -20)); + BOOST_TEST(testC(S("abcdefghij"), 0, 1, "", 0, 1)); + BOOST_TEST(testC(S("abcdefghij"), 0, 1, "abcde", 0, 1)); + BOOST_TEST(testC(S("abcdefghij"), 0, 1, "abcde", 1, 0)); + BOOST_TEST(testC(S("abcdefghij"), 0, 1, "abcde", 2, -1)); + BOOST_TEST(testC(S("abcdefghij"), 0, 1, "abcde", 4, -3)); + BOOST_TEST(testC(S("abcdefghij"), 0, 1, "abcde", 5, -4)); + BOOST_TEST(testC(S("abcdefghij"), 0, 1, "abcdefghij", 0, 1)); + BOOST_TEST(testC(S("abcdefghij"), 0, 1, "abcdefghij", 1, 0)); + BOOST_TEST(testC(S("abcdefghij"), 0, 1, "abcdefghij", 5, -4)); + BOOST_TEST(testC(S("abcdefghij"), 0, 1, "abcdefghij", 9, -8)); + BOOST_TEST(testC(S("abcdefghij"), 0, 1, "abcdefghij", 10, -9)); + BOOST_TEST(testC(S("abcdefghij"), 0, 1, "abcdefghijklmnopqrst", 0, 1)); + BOOST_TEST(testC(S("abcdefghij"), 0, 1, "abcdefghijklmnopqrst", 1, 0)); + BOOST_TEST(testC(S("abcdefghij"), 0, 1, "abcdefghijklmnopqrst", 10, -9)); + BOOST_TEST(testC(S("abcdefghij"), 0, 1, "abcdefghijklmnopqrst", 19, -18)); + BOOST_TEST(testC(S("abcdefghij"), 0, 1, "abcdefghijklmnopqrst", 20, -19)); + BOOST_TEST(testC(S("abcdefghij"), 0, 5, "", 0, 5)); + BOOST_TEST(testC(S("abcdefghij"), 0, 5, "abcde", 0, 5)); + BOOST_TEST(testC(S("abcdefghij"), 0, 5, "abcde", 1, 4)); + BOOST_TEST(testC(S("abcdefghij"), 0, 5, "abcde", 2, 3)); + BOOST_TEST(testC(S("abcdefghij"), 0, 5, "abcde", 4, 1)); + BOOST_TEST(testC(S("abcdefghij"), 0, 5, "abcde", 5, 0)); + BOOST_TEST(testC(S("abcdefghij"), 0, 5, "abcdefghij", 0, 5)); + BOOST_TEST(testC(S("abcdefghij"), 0, 5, "abcdefghij", 1, 4)); + BOOST_TEST(testC(S("abcdefghij"), 0, 5, "abcdefghij", 5, 0)); + BOOST_TEST(testC(S("abcdefghij"), 0, 5, "abcdefghij", 9, -4)); + BOOST_TEST(testC(S("abcdefghij"), 0, 5, "abcdefghij", 10, -5)); + BOOST_TEST(testC(S("abcdefghij"), 0, 5, "abcdefghijklmnopqrst", 0, 5)); + BOOST_TEST(testC(S("abcdefghij"), 0, 5, "abcdefghijklmnopqrst", 1, 4)); + BOOST_TEST(testC(S("abcdefghij"), 0, 5, "abcdefghijklmnopqrst", 10, -5)); + BOOST_TEST(testC(S("abcdefghij"), 0, 5, "abcdefghijklmnopqrst", 19, -14)); + BOOST_TEST(testC(S("abcdefghij"), 0, 5, "abcdefghijklmnopqrst", 20, -15)); + BOOST_TEST(testC(S("abcdefghij"), 0, 9, "", 0, 9)); + BOOST_TEST(testC(S("abcdefghij"), 0, 9, "abcde", 0, 9)); + BOOST_TEST(testC(S("abcdefghij"), 0, 9, "abcde", 1, 8)); + BOOST_TEST(testC(S("abcdefghij"), 0, 9, "abcde", 2, 7)); + BOOST_TEST(testC(S("abcdefghij"), 0, 9, "abcde", 4, 5)); + BOOST_TEST(testC(S("abcdefghij"), 0, 9, "abcde", 5, 4)); + BOOST_TEST(testC(S("abcdefghij"), 0, 9, "abcdefghij", 0, 9)); + BOOST_TEST(testC(S("abcdefghij"), 0, 9, "abcdefghij", 1, 8)); + BOOST_TEST(testC(S("abcdefghij"), 0, 9, "abcdefghij", 5, 4)); + BOOST_TEST(testC(S("abcdefghij"), 0, 9, "abcdefghij", 9, 0)); + BOOST_TEST(testC(S("abcdefghij"), 0, 9, "abcdefghij", 10, -1)); + BOOST_TEST(testC(S("abcdefghij"), 0, 9, "abcdefghijklmnopqrst", 0, 9)); + BOOST_TEST(testC(S("abcdefghij"), 0, 9, "abcdefghijklmnopqrst", 1, 8)); + BOOST_TEST(testC(S("abcdefghij"), 0, 9, "abcdefghijklmnopqrst", 10, -1)); + BOOST_TEST(testC(S("abcdefghij"), 0, 9, "abcdefghijklmnopqrst", 19, -10)); + BOOST_TEST(testC(S("abcdefghij"), 0, 9, "abcdefghijklmnopqrst", 20, -11)); + BOOST_TEST(testC(S("abcdefghij"), 0, 10, "", 0, 10)); + BOOST_TEST(testC(S("abcdefghij"), 0, 10, "abcde", 0, 10)); + BOOST_TEST(testC(S("abcdefghij"), 0, 10, "abcde", 1, 9)); + BOOST_TEST(testC(S("abcdefghij"), 0, 10, "abcde", 2, 8)); + BOOST_TEST(testC(S("abcdefghij"), 0, 10, "abcde", 4, 6)); + BOOST_TEST(testC(S("abcdefghij"), 0, 10, "abcde", 5, 5)); + BOOST_TEST(testC(S("abcdefghij"), 0, 10, "abcdefghij", 0, 10)); + BOOST_TEST(testC(S("abcdefghij"), 0, 10, "abcdefghij", 1, 9)); + BOOST_TEST(testC(S("abcdefghij"), 0, 10, "abcdefghij", 5, 5)); + BOOST_TEST(testC(S("abcdefghij"), 0, 10, "abcdefghij", 9, 1)); + BOOST_TEST(testC(S("abcdefghij"), 0, 10, "abcdefghij", 10, 0)); + BOOST_TEST(testC(S("abcdefghij"), 0, 10, "abcdefghijklmnopqrst", 0, 10)); + BOOST_TEST(testC(S("abcdefghij"), 0, 10, "abcdefghijklmnopqrst", 1, 9)); + BOOST_TEST(testC(S("abcdefghij"), 0, 10, "abcdefghijklmnopqrst", 10, 0)); + BOOST_TEST(testC(S("abcdefghij"), 0, 10, "abcdefghijklmnopqrst", 19, -9)); + BOOST_TEST(testC(S("abcdefghij"), 0, 10, "abcdefghijklmnopqrst", 20, -10)); + BOOST_TEST(testC(S("abcdefghij"), 0, 11, "", 0, 10)); + BOOST_TEST(testC(S("abcdefghij"), 0, 11, "abcde", 0, 10)); + BOOST_TEST(testC(S("abcdefghij"), 0, 11, "abcde", 1, 9)); + BOOST_TEST(testC(S("abcdefghij"), 0, 11, "abcde", 2, 8)); + BOOST_TEST(testC(S("abcdefghij"), 0, 11, "abcde", 4, 6)); + BOOST_TEST(testC(S("abcdefghij"), 0, 11, "abcde", 5, 5)); + BOOST_TEST(testC(S("abcdefghij"), 0, 11, "abcdefghij", 0, 10)); + BOOST_TEST(testC(S("abcdefghij"), 0, 11, "abcdefghij", 1, 9)); + BOOST_TEST(testC(S("abcdefghij"), 0, 11, "abcdefghij", 5, 5)); + BOOST_TEST(testC(S("abcdefghij"), 0, 11, "abcdefghij", 9, 1)); + BOOST_TEST(testC(S("abcdefghij"), 0, 11, "abcdefghij", 10, 0)); + BOOST_TEST(testC(S("abcdefghij"), 0, 11, "abcdefghijklmnopqrst", 0, 10)); + BOOST_TEST(testC(S("abcdefghij"), 0, 11, "abcdefghijklmnopqrst", 1, 9)); + BOOST_TEST(testC(S("abcdefghij"), 0, 11, "abcdefghijklmnopqrst", 10, 0)); + BOOST_TEST(testC(S("abcdefghij"), 0, 11, "abcdefghijklmnopqrst", 19, -9)); + BOOST_TEST(testC(S("abcdefghij"), 0, 11, "abcdefghijklmnopqrst", 20, -10)); + BOOST_TEST(testC(S("abcdefghij"), 1, 0, "", 0, 0)); + BOOST_TEST(testC(S("abcdefghij"), 1, 0, "abcde", 0, 0)); + BOOST_TEST(testC(S("abcdefghij"), 1, 0, "abcde", 1, -1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 0, "abcde", 2, -2)); + BOOST_TEST(testC(S("abcdefghij"), 1, 0, "abcde", 4, -4)); + BOOST_TEST(testC(S("abcdefghij"), 1, 0, "abcde", 5, -5)); + BOOST_TEST(testC(S("abcdefghij"), 1, 0, "abcdefghij", 0, 0)); + BOOST_TEST(testC(S("abcdefghij"), 1, 0, "abcdefghij", 1, -1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 0, "abcdefghij", 5, -5)); + BOOST_TEST(testC(S("abcdefghij"), 1, 0, "abcdefghij", 9, -9)); + BOOST_TEST(testC(S("abcdefghij"), 1, 0, "abcdefghij", 10, -10)); + BOOST_TEST(testC(S("abcdefghij"), 1, 0, "abcdefghijklmnopqrst", 0, 0)); + BOOST_TEST(testC(S("abcdefghij"), 1, 0, "abcdefghijklmnopqrst", 1, -1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 0, "abcdefghijklmnopqrst", 10, -10)); + BOOST_TEST(testC(S("abcdefghij"), 1, 0, "abcdefghijklmnopqrst", 19, -19)); + BOOST_TEST(testC(S("abcdefghij"), 1, 0, "abcdefghijklmnopqrst", 20, -20)); + BOOST_TEST(testC(S("abcdefghij"), 1, 1, "", 0, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 1, "abcde", 0, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 1, "abcde", 1, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 1, "abcde", 2, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 1, "abcde", 4, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 1, "abcde", 5, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 1, "abcdefghij", 0, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 1, "abcdefghij", 1, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 1, "abcdefghij", 5, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 1, "abcdefghij", 9, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 1, "abcdefghij", 10, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 1, "abcdefghijklmnopqrst", 0, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 1, "abcdefghijklmnopqrst", 1, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 1, "abcdefghijklmnopqrst", 10, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 1, "abcdefghijklmnopqrst", 19, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 1, "abcdefghijklmnopqrst", 20, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 4, "", 0, 4)); + BOOST_TEST(testC(S("abcdefghij"), 1, 4, "abcde", 0, 4)); + BOOST_TEST(testC(S("abcdefghij"), 1, 4, "abcde", 1, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 4, "abcde", 2, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 4, "abcde", 4, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 4, "abcde", 5, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 4, "abcdefghij", 0, 4)); + BOOST_TEST(testC(S("abcdefghij"), 1, 4, "abcdefghij", 1, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 4, "abcdefghij", 5, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 4, "abcdefghij", 9, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 4, "abcdefghij", 10, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 4, "abcdefghijklmnopqrst", 0, 4)); + BOOST_TEST(testC(S("abcdefghij"), 1, 4, "abcdefghijklmnopqrst", 1, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 4, "abcdefghijklmnopqrst", 10, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 4, "abcdefghijklmnopqrst", 19, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 4, "abcdefghijklmnopqrst", 20, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 8, "", 0, 8)); + BOOST_TEST(testC(S("abcdefghij"), 1, 8, "abcde", 0, 8)); + BOOST_TEST(testC(S("abcdefghij"), 1, 8, "abcde", 1, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 8, "abcde", 2, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 8, "abcde", 4, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 8, "abcde", 5, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 8, "abcdefghij", 0, 8)); + BOOST_TEST(testC(S("abcdefghij"), 1, 8, "abcdefghij", 1, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 8, "abcdefghij", 5, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 8, "abcdefghij", 9, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 8, "abcdefghij", 10, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 8, "abcdefghijklmnopqrst", 0, 8)); + BOOST_TEST(testC(S("abcdefghij"), 1, 8, "abcdefghijklmnopqrst", 1, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 8, "abcdefghijklmnopqrst", 10, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 8, "abcdefghijklmnopqrst", 19, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 8, "abcdefghijklmnopqrst", 20, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 9, "", 0, 9)); + BOOST_TEST(testC(S("abcdefghij"), 1, 9, "abcde", 0, 9)); + BOOST_TEST(testC(S("abcdefghij"), 1, 9, "abcde", 1, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 9, "abcde", 2, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 9, "abcde", 4, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 9, "abcde", 5, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 9, "abcdefghij", 0, 9)); + BOOST_TEST(testC(S("abcdefghij"), 1, 9, "abcdefghij", 1, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 9, "abcdefghij", 5, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 9, "abcdefghij", 9, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 9, "abcdefghij", 10, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 9, "abcdefghijklmnopqrst", 0, 9)); + BOOST_TEST(testC(S("abcdefghij"), 1, 9, "abcdefghijklmnopqrst", 1, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 9, "abcdefghijklmnopqrst", 10, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 9, "abcdefghijklmnopqrst", 19, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 9, "abcdefghijklmnopqrst", 20, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 10, "", 0, 9)); + BOOST_TEST(testC(S("abcdefghij"), 1, 10, "abcde", 0, 9)); + BOOST_TEST(testC(S("abcdefghij"), 1, 10, "abcde", 1, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 10, "abcde", 2, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 10, "abcde", 4, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 10, "abcde", 5, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 10, "abcdefghij", 0, 9)); + BOOST_TEST(testC(S("abcdefghij"), 1, 10, "abcdefghij", 1, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 10, "abcdefghij", 5, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 10, "abcdefghij", 9, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 10, "abcdefghij", 10, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 10, "abcdefghijklmnopqrst", 0, 9)); + BOOST_TEST(testC(S("abcdefghij"), 1, 10, "abcdefghijklmnopqrst", 1, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 10, "abcdefghijklmnopqrst", 10, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 10, "abcdefghijklmnopqrst", 19, 1)); + BOOST_TEST(testC(S("abcdefghij"), 1, 10, "abcdefghijklmnopqrst", 20, 1)); + BOOST_TEST(testC(S("abcdefghij"), 5, 0, "", 0, 0)); + BOOST_TEST(testC(S("abcdefghij"), 5, 0, "abcde", 0, 0)); + BOOST_TEST(testC(S("abcdefghij"), 5, 0, "abcde", 1, -1)); + BOOST_TEST(testC(S("abcdefghij"), 5, 0, "abcde", 2, -2)); + BOOST_TEST(testC(S("abcdefghij"), 5, 0, "abcde", 4, -4)); + BOOST_TEST(testC(S("abcdefghij"), 5, 0, "abcde", 5, -5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 0, "abcdefghij", 0, 0)); + BOOST_TEST(testC(S("abcdefghij"), 5, 0, "abcdefghij", 1, -1)); + BOOST_TEST(testC(S("abcdefghij"), 5, 0, "abcdefghij", 5, -5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 0, "abcdefghij", 9, -9)); + BOOST_TEST(testC(S("abcdefghij"), 5, 0, "abcdefghij", 10, -10)); + BOOST_TEST(testC(S("abcdefghij"), 5, 0, "abcdefghijklmnopqrst", 0, 0)); + BOOST_TEST(testC(S("abcdefghij"), 5, 0, "abcdefghijklmnopqrst", 1, -1)); + BOOST_TEST(testC(S("abcdefghij"), 5, 0, "abcdefghijklmnopqrst", 10, -10)); + BOOST_TEST(testC(S("abcdefghij"), 5, 0, "abcdefghijklmnopqrst", 19, -19)); + BOOST_TEST(testC(S("abcdefghij"), 5, 0, "abcdefghijklmnopqrst", 20, -20)); + BOOST_TEST(testC(S("abcdefghij"), 5, 1, "", 0, 1)); + BOOST_TEST(testC(S("abcdefghij"), 5, 1, "abcde", 0, 1)); + BOOST_TEST(testC(S("abcdefghij"), 5, 1, "abcde", 1, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 1, "abcde", 2, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 1, "abcde", 4, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 1, "abcde", 5, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 1, "abcdefghij", 0, 1)); + BOOST_TEST(testC(S("abcdefghij"), 5, 1, "abcdefghij", 1, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 1, "abcdefghij", 5, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 1, "abcdefghij", 9, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 1, "abcdefghij", 10, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 1, "abcdefghijklmnopqrst", 0, 1)); + BOOST_TEST(testC(S("abcdefghij"), 5, 1, "abcdefghijklmnopqrst", 1, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 1, "abcdefghijklmnopqrst", 10, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 1, "abcdefghijklmnopqrst", 19, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 1, "abcdefghijklmnopqrst", 20, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 2, "", 0, 2)); + BOOST_TEST(testC(S("abcdefghij"), 5, 2, "abcde", 0, 2)); + BOOST_TEST(testC(S("abcdefghij"), 5, 2, "abcde", 1, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 2, "abcde", 2, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 2, "abcde", 4, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 2, "abcde", 5, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 2, "abcdefghij", 0, 2)); + BOOST_TEST(testC(S("abcdefghij"), 5, 2, "abcdefghij", 1, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 2, "abcdefghij", 5, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 2, "abcdefghij", 9, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 2, "abcdefghij", 10, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 2, "abcdefghijklmnopqrst", 0, 2)); + BOOST_TEST(testC(S("abcdefghij"), 5, 2, "abcdefghijklmnopqrst", 1, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 2, "abcdefghijklmnopqrst", 10, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 2, "abcdefghijklmnopqrst", 19, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 2, "abcdefghijklmnopqrst", 20, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 4, "", 0, 4)); + BOOST_TEST(testC(S("abcdefghij"), 5, 4, "abcde", 0, 4)); + BOOST_TEST(testC(S("abcdefghij"), 5, 4, "abcde", 1, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 4, "abcde", 2, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 4, "abcde", 4, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 4, "abcde", 5, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 4, "abcdefghij", 0, 4)); + BOOST_TEST(testC(S("abcdefghij"), 5, 4, "abcdefghij", 1, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 4, "abcdefghij", 5, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 4, "abcdefghij", 9, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 4, "abcdefghij", 10, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 4, "abcdefghijklmnopqrst", 0, 4)); + BOOST_TEST(testC(S("abcdefghij"), 5, 4, "abcdefghijklmnopqrst", 1, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 4, "abcdefghijklmnopqrst", 10, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 4, "abcdefghijklmnopqrst", 19, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 4, "abcdefghijklmnopqrst", 20, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 5, "", 0, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 5, "abcde", 0, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 5, "abcde", 1, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 5, "abcde", 2, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 5, "abcde", 4, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 5, "abcde", 5, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 5, "abcdefghij", 0, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 5, "abcdefghij", 1, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 5, "abcdefghij", 5, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 5, "abcdefghij", 9, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 5, "abcdefghij", 10, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 5, "abcdefghijklmnopqrst", 0, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 5, "abcdefghijklmnopqrst", 1, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 5, "abcdefghijklmnopqrst", 10, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 5, "abcdefghijklmnopqrst", 19, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 5, "abcdefghijklmnopqrst", 20, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 6, "", 0, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 6, "abcde", 0, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 6, "abcde", 1, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 6, "abcde", 2, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 6, "abcde", 4, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 6, "abcde", 5, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 6, "abcdefghij", 0, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 6, "abcdefghij", 1, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 6, "abcdefghij", 5, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 6, "abcdefghij", 9, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 6, "abcdefghij", 10, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 6, "abcdefghijklmnopqrst", 0, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 6, "abcdefghijklmnopqrst", 1, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 6, "abcdefghijklmnopqrst", 10, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 6, "abcdefghijklmnopqrst", 19, 5)); + BOOST_TEST(testC(S("abcdefghij"), 5, 6, "abcdefghijklmnopqrst", 20, 5)); + BOOST_TEST(testC(S("abcdefghij"), 9, 0, "", 0, 0)); + BOOST_TEST(testC(S("abcdefghij"), 9, 0, "abcde", 0, 0)); + BOOST_TEST(testC(S("abcdefghij"), 9, 0, "abcde", 1, -1)); + BOOST_TEST(testC(S("abcdefghij"), 9, 0, "abcde", 2, -2)); + BOOST_TEST(testC(S("abcdefghij"), 9, 0, "abcde", 4, -4)); + BOOST_TEST(testC(S("abcdefghij"), 9, 0, "abcde", 5, -5)); + BOOST_TEST(testC(S("abcdefghij"), 9, 0, "abcdefghij", 0, 0)); + BOOST_TEST(testC(S("abcdefghij"), 9, 0, "abcdefghij", 1, -1)); + BOOST_TEST(testC(S("abcdefghij"), 9, 0, "abcdefghij", 5, -5)); + BOOST_TEST(testC(S("abcdefghij"), 9, 0, "abcdefghij", 9, -9)); + BOOST_TEST(testC(S("abcdefghij"), 9, 0, "abcdefghij", 10, -10)); + BOOST_TEST(testC(S("abcdefghij"), 9, 0, "abcdefghijklmnopqrst", 0, 0)); + BOOST_TEST(testC(S("abcdefghij"), 9, 0, "abcdefghijklmnopqrst", 1, -1)); + BOOST_TEST(testC(S("abcdefghij"), 9, 0, "abcdefghijklmnopqrst", 10, -10)); + BOOST_TEST(testC(S("abcdefghij"), 9, 0, "abcdefghijklmnopqrst", 19, -19)); + BOOST_TEST(testC(S("abcdefghij"), 9, 0, "abcdefghijklmnopqrst", 20, -20)); + BOOST_TEST(testC(S("abcdefghij"), 9, 1, "", 0, 1)); + BOOST_TEST(testC(S("abcdefghij"), 9, 1, "abcde", 0, 1)); + BOOST_TEST(testC(S("abcdefghij"), 9, 1, "abcde", 1, 9)); + BOOST_TEST(testC(S("abcdefghij"), 9, 1, "abcde", 2, 9)); + BOOST_TEST(testC(S("abcdefghij"), 9, 1, "abcde", 4, 9)); + BOOST_TEST(testC(S("abcdefghij"), 9, 1, "abcde", 5, 9)); + BOOST_TEST(testC(S("abcdefghij"), 9, 1, "abcdefghij", 0, 1)); + BOOST_TEST(testC(S("abcdefghij"), 9, 1, "abcdefghij", 1, 9)); + BOOST_TEST(testC(S("abcdefghij"), 9, 1, "abcdefghij", 5, 9)); + BOOST_TEST(testC(S("abcdefghij"), 9, 1, "abcdefghij", 9, 9)); + BOOST_TEST(testC(S("abcdefghij"), 9, 1, "abcdefghij", 10, 9)); + BOOST_TEST(testC(S("abcdefghij"), 9, 1, "abcdefghijklmnopqrst", 0, 1)); + BOOST_TEST(testC(S("abcdefghij"), 9, 1, "abcdefghijklmnopqrst", 1, 9)); + BOOST_TEST(testC(S("abcdefghij"), 9, 1, "abcdefghijklmnopqrst", 10, 9)); + BOOST_TEST(testC(S("abcdefghij"), 9, 1, "abcdefghijklmnopqrst", 19, 9)); + BOOST_TEST(testC(S("abcdefghij"), 9, 1, "abcdefghijklmnopqrst", 20, 9)); + BOOST_TEST(testC(S("abcdefghij"), 9, 2, "", 0, 1)); + BOOST_TEST(testC(S("abcdefghij"), 9, 2, "abcde", 0, 1)); + BOOST_TEST(testC(S("abcdefghij"), 9, 2, "abcde", 1, 9)); + BOOST_TEST(testC(S("abcdefghij"), 9, 2, "abcde", 2, 9)); + BOOST_TEST(testC(S("abcdefghij"), 9, 2, "abcde", 4, 9)); + BOOST_TEST(testC(S("abcdefghij"), 9, 2, "abcde", 5, 9)); + BOOST_TEST(testC(S("abcdefghij"), 9, 2, "abcdefghij", 0, 1)); + BOOST_TEST(testC(S("abcdefghij"), 9, 2, "abcdefghij", 1, 9)); + BOOST_TEST(testC(S("abcdefghij"), 9, 2, "abcdefghij", 5, 9)); + BOOST_TEST(testC(S("abcdefghij"), 9, 2, "abcdefghij", 9, 9)); + BOOST_TEST(testC(S("abcdefghij"), 9, 2, "abcdefghij", 10, 9)); + BOOST_TEST(testC(S("abcdefghij"), 9, 2, "abcdefghijklmnopqrst", 0, 1)); + BOOST_TEST(testC(S("abcdefghij"), 9, 2, "abcdefghijklmnopqrst", 1, 9)); + BOOST_TEST(testC(S("abcdefghij"), 9, 2, "abcdefghijklmnopqrst", 10, 9)); + BOOST_TEST(testC(S("abcdefghij"), 9, 2, "abcdefghijklmnopqrst", 19, 9)); + BOOST_TEST(testC(S("abcdefghij"), 9, 2, "abcdefghijklmnopqrst", 20, 9)); + BOOST_TEST(testC(S("abcdefghij"), 10, 0, "", 0, 0)); + BOOST_TEST(testC(S("abcdefghij"), 10, 0, "abcde", 0, 0)); + BOOST_TEST(testC(S("abcdefghij"), 10, 0, "abcde", 1, -1)); + BOOST_TEST(testC(S("abcdefghij"), 10, 0, "abcde", 2, -2)); + BOOST_TEST(testC(S("abcdefghij"), 10, 0, "abcde", 4, -4)); + BOOST_TEST(testC(S("abcdefghij"), 10, 0, "abcde", 5, -5)); + BOOST_TEST(testC(S("abcdefghij"), 10, 0, "abcdefghij", 0, 0)); + BOOST_TEST(testC(S("abcdefghij"), 10, 0, "abcdefghij", 1, -1)); + BOOST_TEST(testC(S("abcdefghij"), 10, 0, "abcdefghij", 5, -5)); + BOOST_TEST(testC(S("abcdefghij"), 10, 0, "abcdefghij", 9, -9)); + BOOST_TEST(testC(S("abcdefghij"), 10, 0, "abcdefghij", 10, -10)); + BOOST_TEST(testC(S("abcdefghij"), 10, 0, "abcdefghijklmnopqrst", 0, 0)); + BOOST_TEST(testC(S("abcdefghij"), 10, 0, "abcdefghijklmnopqrst", 1, -1)); + BOOST_TEST(testC(S("abcdefghij"), 10, 0, "abcdefghijklmnopqrst", 10, -10)); + BOOST_TEST(testC(S("abcdefghij"), 10, 0, "abcdefghijklmnopqrst", 19, -19)); + BOOST_TEST(testC(S("abcdefghij"), 10, 0, "abcdefghijklmnopqrst", 20, -20)); + BOOST_TEST(testC(S("abcdefghij"), 10, 1, "", 0, 0)); + BOOST_TEST(testC(S("abcdefghij"), 10, 1, "abcde", 0, 0)); + BOOST_TEST(testC(S("abcdefghij"), 10, 1, "abcde", 1, -1)); + BOOST_TEST(testC(S("abcdefghij"), 10, 1, "abcde", 2, -2)); + BOOST_TEST(testC(S("abcdefghij"), 10, 1, "abcde", 4, -4)); + BOOST_TEST(testC(S("abcdefghij"), 10, 1, "abcde", 5, -5)); + BOOST_TEST(testC(S("abcdefghij"), 10, 1, "abcdefghij", 0, 0)); + BOOST_TEST(testC(S("abcdefghij"), 10, 1, "abcdefghij", 1, -1)); + BOOST_TEST(testC(S("abcdefghij"), 10, 1, "abcdefghij", 5, -5)); + BOOST_TEST(testC(S("abcdefghij"), 10, 1, "abcdefghij", 9, -9)); + BOOST_TEST(testC(S("abcdefghij"), 10, 1, "abcdefghij", 10, -10)); + BOOST_TEST(testC(S("abcdefghij"), 10, 1, "abcdefghijklmnopqrst", 0, 0)); + BOOST_TEST(testC(S("abcdefghij"), 10, 1, "abcdefghijklmnopqrst", 1, -1)); + BOOST_TEST(testC(S("abcdefghij"), 10, 1, "abcdefghijklmnopqrst", 10, -10)); + BOOST_TEST(testC(S("abcdefghij"), 10, 1, "abcdefghijklmnopqrst", 19, -19)); + BOOST_TEST(testC(S("abcdefghij"), 10, 1, "abcdefghijklmnopqrst", 20, -20)); + BOOST_TEST(testC(S("abcdefghij"), 11, 0, "", 0, 0)); + BOOST_TEST(testC(S("abcdefghij"), 11, 0, "abcde", 0, 0)); + BOOST_TEST(testC(S("abcdefghij"), 11, 0, "abcde", 1, 0)); + BOOST_TEST(testC(S("abcdefghij"), 11, 0, "abcde", 2, 0)); + BOOST_TEST(testC(S("abcdefghij"), 11, 0, "abcde", 4, 0)); + BOOST_TEST(testC(S("abcdefghij"), 11, 0, "abcde", 5, 0)); + BOOST_TEST(testC(S("abcdefghij"), 11, 0, "abcdefghij", 0, 0)); + BOOST_TEST(testC(S("abcdefghij"), 11, 0, "abcdefghij", 1, 0)); + BOOST_TEST(testC(S("abcdefghij"), 11, 0, "abcdefghij", 5, 0)); + BOOST_TEST(testC(S("abcdefghij"), 11, 0, "abcdefghij", 9, 0)); + BOOST_TEST(testC(S("abcdefghij"), 11, 0, "abcdefghij", 10, 0)); + BOOST_TEST(testC(S("abcdefghij"), 11, 0, "abcdefghijklmnopqrst", 0, 0)); + BOOST_TEST(testC(S("abcdefghij"), 11, 0, "abcdefghijklmnopqrst", 1, 0)); + BOOST_TEST(testC(S("abcdefghij"), 11, 0, "abcdefghijklmnopqrst", 10, 0)); + BOOST_TEST(testC(S("abcdefghij"), 11, 0, "abcdefghijklmnopqrst", 19, 0)); + BOOST_TEST(testC(S("abcdefghij"), 11, 0, "abcdefghijklmnopqrst", 20, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 0, "", 0, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 0, "abcde", 0, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 0, "abcde", 1, -1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 0, "abcde", 2, -2)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 0, "abcde", 4, -4)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 0, "abcde", 5, -5)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghij", 0, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghij", 1, -1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghij", 5, -5)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghij", 9, -9)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghij", 10, -10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghijklmnopqrst", 0, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghijklmnopqrst", 1, -1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghijklmnopqrst", 10, -10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghijklmnopqrst", 19, -19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghijklmnopqrst", 20, -20)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 1, "", 0, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 1, "abcde", 0, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 1, "abcde", 1, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 1, "abcde", 2, -1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 1, "abcde", 4, -3)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 1, "abcde", 5, -4)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghij", 0, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghij", 1, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghij", 5, -4)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghij", 9, -8)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghij", 10, -9)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghijklmnopqrst", 0, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghijklmnopqrst", 1, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghijklmnopqrst", 10, -9)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghijklmnopqrst", 19, -18)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghijklmnopqrst", 20, -19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 10, "", 0, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 10, "abcde", 0, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 10, "abcde", 1, 9)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 10, "abcde", 2, 8)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 10, "abcde", 4, 6)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 10, "abcde", 5, 5)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghij", 0, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghij", 1, 9)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghij", 5, 5)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghij", 9, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghij", 10, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghijklmnopqrst", 0, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghijklmnopqrst", 1, 9)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghijklmnopqrst", 10, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghijklmnopqrst", 19, -9)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghijklmnopqrst", 20, -10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 19, "", 0, 19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 19, "abcde", 0, 19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 19, "abcde", 1, 18)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 19, "abcde", 2, 17)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 19, "abcde", 4, 15)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 19, "abcde", 5, 14)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghij", 0, 19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghij", 1, 18)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghij", 5, 14)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghij", 9, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghij", 10, 9)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghijklmnopqrst", 0, 19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghijklmnopqrst", 1, 18)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghijklmnopqrst", 10, 9)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghijklmnopqrst", 19, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghijklmnopqrst", 20, -1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 20, "", 0, 20)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 20, "abcde", 0, 20)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 20, "abcde", 1, 19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 20, "abcde", 2, 18)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 20, "abcde", 4, 16)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 20, "abcde", 5, 15)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghij", 0, 20)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghij", 1, 19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghij", 5, 15)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghij", 9, 11)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghij", 10, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghijklmnopqrst", 0, 20)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghijklmnopqrst", 1, 19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghijklmnopqrst", 10, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghijklmnopqrst", 19, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghijklmnopqrst", 20, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 21, "", 0, 20)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 21, "abcde", 0, 20)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 21, "abcde", 1, 19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 21, "abcde", 2, 18)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 21, "abcde", 4, 16)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 21, "abcde", 5, 15)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghij", 0, 20)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghij", 1, 19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghij", 5, 15)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghij", 9, 11)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghij", 10, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghijklmnopqrst", 0, 20)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghijklmnopqrst", 1, 19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghijklmnopqrst", 10, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghijklmnopqrst", 19, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghijklmnopqrst", 20, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 0, "", 0, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 0, "abcde", 0, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 0, "abcde", 1, -1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 0, "abcde", 2, -2)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 0, "abcde", 4, -4)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 0, "abcde", 5, -5)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghij", 0, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghij", 1, -1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghij", 5, -5)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghij", 9, -9)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghij", 10, -10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghijklmnopqrst", 0, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghijklmnopqrst", 1, -1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghijklmnopqrst", 10, -10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghijklmnopqrst", 19, -19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghijklmnopqrst", 20, -20)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 1, "", 0, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 1, "abcde", 0, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 1, "abcde", 1, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 1, "abcde", 2, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 1, "abcde", 4, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 1, "abcde", 5, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghij", 0, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghij", 1, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghij", 5, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghij", 9, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghij", 10, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghijklmnopqrst", 0, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghijklmnopqrst", 1, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghijklmnopqrst", 10, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghijklmnopqrst", 19, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghijklmnopqrst", 20, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 9, "", 0, 9)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 9, "abcde", 0, 9)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 9, "abcde", 1, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 9, "abcde", 2, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 9, "abcde", 4, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 9, "abcde", 5, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghij", 0, 9)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghij", 1, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghij", 5, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghij", 9, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghij", 10, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghijklmnopqrst", 0, 9)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghijklmnopqrst", 1, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghijklmnopqrst", 10, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghijklmnopqrst", 19, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghijklmnopqrst", 20, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 18, "", 0, 18)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 18, "abcde", 0, 18)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 18, "abcde", 1, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 18, "abcde", 2, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 18, "abcde", 4, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 18, "abcde", 5, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghij", 0, 18)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghij", 1, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghij", 5, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghij", 9, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghij", 10, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghijklmnopqrst", 0, 18)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghijklmnopqrst", 1, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghijklmnopqrst", 10, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghijklmnopqrst", 19, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghijklmnopqrst", 20, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 19, "", 0, 19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 19, "abcde", 0, 19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 19, "abcde", 1, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 19, "abcde", 2, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 19, "abcde", 4, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 19, "abcde", 5, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghij", 0, 19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghij", 1, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghij", 5, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghij", 9, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghij", 10, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghijklmnopqrst", 0, 19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghijklmnopqrst", 1, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghijklmnopqrst", 10, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghijklmnopqrst", 19, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghijklmnopqrst", 20, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 20, "", 0, 19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 20, "abcde", 0, 19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 20, "abcde", 1, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 20, "abcde", 2, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 20, "abcde", 4, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 20, "abcde", 5, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghij", 0, 19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghij", 1, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghij", 5, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghij", 9, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghij", 10, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghijklmnopqrst", 0, 19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghijklmnopqrst", 1, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghijklmnopqrst", 10, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghijklmnopqrst", 19, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghijklmnopqrst", 20, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 0, "", 0, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 0, "abcde", 0, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 0, "abcde", 1, -1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 0, "abcde", 2, -2)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 0, "abcde", 4, -4)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 0, "abcde", 5, -5)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghij", 0, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghij", 1, -1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghij", 5, -5)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghij", 9, -9)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghij", 10, -10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghijklmnopqrst", 0, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghijklmnopqrst", 1, -1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghijklmnopqrst", 10, -10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghijklmnopqrst", 19, -19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghijklmnopqrst", 20, -20)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 1, "", 0, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 1, "abcde", 0, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 1, "abcde", 1, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 1, "abcde", 2, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 1, "abcde", 4, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 1, "abcde", 5, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghij", 0, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghij", 1, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghij", 5, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghij", 9, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghij", 10, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghijklmnopqrst", 0, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghijklmnopqrst", 1, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghijklmnopqrst", 10, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghijklmnopqrst", 19, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghijklmnopqrst", 20, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 5, "", 0, 5)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 5, "abcde", 0, 5)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 5, "abcde", 1, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 5, "abcde", 2, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 5, "abcde", 4, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 5, "abcde", 5, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghij", 0, 5)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghij", 1, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghij", 5, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghij", 9, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghij", 10, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghijklmnopqrst", 0, 5)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghijklmnopqrst", 1, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghijklmnopqrst", 10, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghijklmnopqrst", 19, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghijklmnopqrst", 20, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 9, "", 0, 9)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 9, "abcde", 0, 9)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 9, "abcde", 1, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 9, "abcde", 2, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 9, "abcde", 4, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 9, "abcde", 5, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghij", 0, 9)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghij", 1, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghij", 5, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghij", 9, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghij", 10, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghijklmnopqrst", 0, 9)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghijklmnopqrst", 1, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghijklmnopqrst", 10, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghijklmnopqrst", 19, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghijklmnopqrst", 20, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 10, "", 0, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 10, "abcde", 0, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 10, "abcde", 1, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 10, "abcde", 2, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 10, "abcde", 4, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 10, "abcde", 5, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghij", 0, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghij", 1, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghij", 5, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghij", 9, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghij", 10, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghijklmnopqrst", 0, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghijklmnopqrst", 1, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghijklmnopqrst", 10, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghijklmnopqrst", 19, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghijklmnopqrst", 20, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 11, "", 0, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 11, "abcde", 0, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 11, "abcde", 1, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 11, "abcde", 2, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 11, "abcde", 4, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 11, "abcde", 5, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghij", 0, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghij", 1, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghij", 5, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghij", 9, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghij", 10, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghijklmnopqrst", 0, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghijklmnopqrst", 1, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghijklmnopqrst", 10, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghijklmnopqrst", 19, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghijklmnopqrst", 20, 10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 0, "", 0, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 0, "abcde", 0, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 0, "abcde", 1, -1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 0, "abcde", 2, -2)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 0, "abcde", 4, -4)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 0, "abcde", 5, -5)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghij", 0, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghij", 1, -1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghij", 5, -5)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghij", 9, -9)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghij", 10, -10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghijklmnopqrst", 0, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghijklmnopqrst", 1, -1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghijklmnopqrst", 10, -10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghijklmnopqrst", 19, -19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghijklmnopqrst", 20, -20)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 1, "", 0, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 1, "abcde", 0, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 1, "abcde", 1, 19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 1, "abcde", 2, 19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 1, "abcde", 4, 19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 1, "abcde", 5, 19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghij", 0, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghij", 1, 19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghij", 5, 19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghij", 9, 19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghij", 10, 19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghijklmnopqrst", 0, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghijklmnopqrst", 1, 19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghijklmnopqrst", 10, 19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghijklmnopqrst", 19, 19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghijklmnopqrst", 20, 19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 2, "", 0, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 2, "abcde", 0, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 2, "abcde", 1, 19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 2, "abcde", 2, 19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 2, "abcde", 4, 19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 2, "abcde", 5, 19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghij", 0, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghij", 1, 19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghij", 5, 19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghij", 9, 19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghij", 10, 19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghijklmnopqrst", 0, 1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghijklmnopqrst", 1, 19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghijklmnopqrst", 10, 19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghijklmnopqrst", 19, 19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghijklmnopqrst", 20, 19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 0, "", 0, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 0, "abcde", 0, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 0, "abcde", 1, -1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 0, "abcde", 2, -2)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 0, "abcde", 4, -4)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 0, "abcde", 5, -5)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghij", 0, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghij", 1, -1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghij", 5, -5)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghij", 9, -9)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghij", 10, -10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghijklmnopqrst", 0, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghijklmnopqrst", 1, -1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghijklmnopqrst", 10, -10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghijklmnopqrst", 19, -19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghijklmnopqrst", 20, -20)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 1, "", 0, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 1, "abcde", 0, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 1, "abcde", 1, -1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 1, "abcde", 2, -2)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 1, "abcde", 4, -4)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 1, "abcde", 5, -5)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghij", 0, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghij", 1, -1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghij", 5, -5)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghij", 9, -9)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghij", 10, -10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghijklmnopqrst", 0, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghijklmnopqrst", 1, -1)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghijklmnopqrst", 10, -10)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghijklmnopqrst", 19, -19)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghijklmnopqrst", 20, -20)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 21, 0, "", 0, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 21, 0, "abcde", 0, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 21, 0, "abcde", 1, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 21, 0, "abcde", 2, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 21, 0, "abcde", 4, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 21, 0, "abcde", 5, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghij", 0, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghij", 1, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghij", 5, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghij", 9, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghij", 10, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghijklmnopqrst", 0, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghijklmnopqrst", 1, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghijklmnopqrst", 10, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghijklmnopqrst", 19, 0)); + BOOST_TEST(testC(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghijklmnopqrst", 20, 0)); } void @@ -4281,10 +5395,8 @@ 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; } @@ -4304,15 +5416,7 @@ testR(S s, typename S::size_type pos, typename S::size_type n1, } else { - try - { - s.replace(pos, n1, n2, c); - return s == expected; - } - catch (std::out_of_range&) - { - return true; - } + BOOST_TEST_THROWS((s.replace(pos, n1, n2, c)), std::out_of_range); } } @@ -4331,15 +5435,7 @@ testR(S s, typename S::size_type pos, typename S::size_type n1, } else { - try - { - s.replace(pos, n1, str, n2); - return s == expected; - } - catch (std::out_of_range&) - { - return true; - } + BOOST_TEST_THROWS((s.replace(pos, n1, str, n2)), std::out_of_range); } } @@ -5105,17 +6201,297 @@ testReplace() 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"))); + BOOST_TEST(testR(S(""), 1, 0, "12345", 0, S("can't happen"))); + BOOST_TEST(testR(S(""), 1, 0, "12345", 1, S("can't happen"))); + BOOST_TEST(testR(S(""), 1, 0, "12345", 2, S("can't happen"))); + BOOST_TEST(testR(S(""), 1, 0, "12345", 4, S("can't happen"))); + BOOST_TEST(testR(S(""), 1, 0, "12345", 5, S("can't happen"))); + BOOST_TEST(testR(S(""), 1, 0, "1234567890", 0, S("can't happen"))); + BOOST_TEST(testR(S(""), 1, 0, "1234567890", 1, S("can't happen"))); + BOOST_TEST(testR(S(""), 1, 0, "1234567890", 5, S("can't happen"))); + BOOST_TEST(testR(S(""), 1, 0, "1234567890", 9, S("can't happen"))); + BOOST_TEST(testR(S(""), 1, 0, "1234567890", 10, S("can't happen"))); + BOOST_TEST(testR(S(""), 1, 0, "12345678901234567890", 0, S("can't happen"))); + BOOST_TEST(testR(S(""), 1, 0, "12345678901234567890", 1, S("can't happen"))); + BOOST_TEST(testR(S(""), 1, 0, "12345678901234567890", 10, S("can't happen"))); + BOOST_TEST(testR(S(""), 1, 0, "12345678901234567890", 19, S("can't happen"))); + BOOST_TEST(testR(S(""), 1, 0, "12345678901234567890", 20, S("can't happen"))); + BOOST_TEST(testR(S("abcde"), 6, 0, "", 0, S("can't happen"))); + BOOST_TEST(testR(S("abcde"), 6, 0, "12345", 0, S("can't happen"))); + BOOST_TEST(testR(S("abcde"), 6, 0, "12345", 1, S("can't happen"))); + BOOST_TEST(testR(S("abcde"), 6, 0, "12345", 2, S("can't happen"))); + BOOST_TEST(testR(S("abcde"), 6, 0, "12345", 4, S("can't happen"))); + BOOST_TEST(testR(S("abcde"), 6, 0, "12345", 5, S("can't happen"))); + BOOST_TEST(testR(S("abcde"), 6, 0, "1234567890", 0, S("can't happen"))); + BOOST_TEST(testR(S("abcde"), 6, 0, "1234567890", 1, S("can't happen"))); + BOOST_TEST(testR(S("abcde"), 6, 0, "1234567890", 5, S("can't happen"))); + BOOST_TEST(testR(S("abcde"), 6, 0, "1234567890", 9, S("can't happen"))); + BOOST_TEST(testR(S("abcde"), 6, 0, "1234567890", 10, S("can't happen"))); + BOOST_TEST(testR(S("abcde"), 6, 0, "12345678901234567890", 0, S("can't happen"))); + BOOST_TEST(testR(S("abcde"), 6, 0, "12345678901234567890", 1, S("can't happen"))); + BOOST_TEST(testR(S("abcde"), 6, 0, "12345678901234567890", 10, S("can't happen"))); + BOOST_TEST(testR(S("abcde"), 6, 0, "12345678901234567890", 19, S("can't happen"))); + BOOST_TEST(testR(S("abcde"), 6, 0, "12345678901234567890", 20, S("can't happen"))); + BOOST_TEST(testR(S("abcdefghij"), 11, 0, "", 0, S("can't happen"))); + BOOST_TEST(testR(S("abcdefghij"), 11, 0, "12345", 0, S("can't happen"))); + BOOST_TEST(testR(S("abcdefghij"), 11, 0, "12345", 1, S("can't happen"))); + BOOST_TEST(testR(S("abcdefghij"), 11, 0, "12345", 2, S("can't happen"))); + BOOST_TEST(testR(S("abcdefghij"), 11, 0, "12345", 4, S("can't happen"))); + BOOST_TEST(testR(S("abcdefghij"), 11, 0, "12345", 5, S("can't happen"))); + BOOST_TEST(testR(S("abcdefghij"), 11, 0, "1234567890", 0, S("can't happen"))); + BOOST_TEST(testR(S("abcdefghij"), 11, 0, "1234567890", 1, S("can't happen"))); + BOOST_TEST(testR(S("abcdefghij"), 11, 0, "1234567890", 5, S("can't happen"))); + BOOST_TEST(testR(S("abcdefghij"), 11, 0, "1234567890", 9, S("can't happen"))); + BOOST_TEST(testR(S("abcdefghij"), 11, 0, "1234567890", 10, S("can't happen"))); + BOOST_TEST(testR(S("abcdefghij"), 11, 0, "12345678901234567890", 0, S("can't happen"))); + BOOST_TEST(testR(S("abcdefghij"), 11, 0, "12345678901234567890", 1, S("can't happen"))); + BOOST_TEST(testR(S("abcdefghij"), 11, 0, "12345678901234567890", 10, S("can't happen"))); + BOOST_TEST(testR(S("abcdefghij"), 11, 0, "12345678901234567890", 19, S("can't happen"))); + BOOST_TEST(testR(S("abcdefghij"), 11, 0, "12345678901234567890", 20, S("can't happen"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 21, 0, "", 0, S("can't happen"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 21, 0, "12345", 0, S("can't happen"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 21, 0, "12345", 1, S("can't happen"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 21, 0, "12345", 2, S("can't happen"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 21, 0, "12345", 4, S("can't happen"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 21, 0, "12345", 5, S("can't happen"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 21, 0, "1234567890", 0, S("can't happen"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 21, 0, "1234567890", 1, S("can't happen"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 21, 0, "1234567890", 5, S("can't happen"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 21, 0, "1234567890", 9, S("can't happen"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 21, 0, "1234567890", 10, S("can't happen"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 21, 0, "12345678901234567890", 0, S("can't happen"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 21, 0, "12345678901234567890", 1, S("can't happen"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 21, 0, "12345678901234567890", 10, S("can't happen"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 21, 0, "12345678901234567890", 19, S("can't happen"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 21, 0, "12345678901234567890", 20, S("can't happen"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 0, "12345678901234567890", 1, S("abcdefghijklmnopqrs1t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 0, "12345678901234567890", 10, S("abcdefghijklmnopqrs1234567890t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 0, "12345678901234567890", 19, S("abcdefghijklmnopqrs1234567890123456789t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 0, "12345678901234567890", 20, S("abcdefghijklmnopqrs12345678901234567890t"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 1, "", 0, S("abcdefghijklmnopqrs"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 1, "12345", 0, S("abcdefghijklmnopqrs"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 1, "12345", 1, S("abcdefghijklmnopqrs1"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 1, "12345", 2, S("abcdefghijklmnopqrs12"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 1, "12345", 4, S("abcdefghijklmnopqrs1234"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 1, "12345", 5, S("abcdefghijklmnopqrs12345"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 1, "1234567890", 0, S("abcdefghijklmnopqrs"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 1, "1234567890", 1, S("abcdefghijklmnopqrs1"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 1, "1234567890", 5, S("abcdefghijklmnopqrs12345"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 1, "1234567890", 9, S("abcdefghijklmnopqrs123456789"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 1, "1234567890", 10, S("abcdefghijklmnopqrs1234567890"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 1, "12345678901234567890", 0, S("abcdefghijklmnopqrs"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 1, "12345678901234567890", 1, S("abcdefghijklmnopqrs1"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 1, "12345678901234567890", 10, S("abcdefghijklmnopqrs1234567890"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 1, "12345678901234567890", 19, S("abcdefghijklmnopqrs1234567890123456789"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 1, "12345678901234567890", 20, S("abcdefghijklmnopqrs12345678901234567890"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 2, "", 0, S("abcdefghijklmnopqrs"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 2, "12345", 0, S("abcdefghijklmnopqrs"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 2, "12345", 1, S("abcdefghijklmnopqrs1"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 2, "12345", 2, S("abcdefghijklmnopqrs12"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 2, "12345", 4, S("abcdefghijklmnopqrs1234"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 2, "12345", 5, S("abcdefghijklmnopqrs12345"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 2, "1234567890", 0, S("abcdefghijklmnopqrs"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 2, "1234567890", 1, S("abcdefghijklmnopqrs1"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 2, "1234567890", 5, S("abcdefghijklmnopqrs12345"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 2, "1234567890", 9, S("abcdefghijklmnopqrs123456789"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 2, "1234567890", 10, S("abcdefghijklmnopqrs1234567890"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 2, "12345678901234567890", 0, S("abcdefghijklmnopqrs"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 2, "12345678901234567890", 1, S("abcdefghijklmnopqrs1"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 2, "12345678901234567890", 10, S("abcdefghijklmnopqrs1234567890"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 2, "12345678901234567890", 19, S("abcdefghijklmnopqrs1234567890123456789"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 19, 2, "12345678901234567890", 20, S("abcdefghijklmnopqrs12345678901234567890"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 0, "", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 0, "12345", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 0, "12345", 1, S("abcdefghijklmnopqrst1"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 0, "12345", 2, S("abcdefghijklmnopqrst12"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 0, "12345", 4, S("abcdefghijklmnopqrst1234"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 0, "12345", 5, S("abcdefghijklmnopqrst12345"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 0, "1234567890", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 0, "1234567890", 1, S("abcdefghijklmnopqrst1"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 0, "1234567890", 5, S("abcdefghijklmnopqrst12345"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 0, "1234567890", 9, S("abcdefghijklmnopqrst123456789"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 0, "1234567890", 10, S("abcdefghijklmnopqrst1234567890"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 0, "12345678901234567890", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 0, "12345678901234567890", 1, S("abcdefghijklmnopqrst1"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 0, "12345678901234567890", 10, S("abcdefghijklmnopqrst1234567890"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 0, "12345678901234567890", 19, S("abcdefghijklmnopqrst1234567890123456789"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 0, "12345678901234567890", 20, S("abcdefghijklmnopqrst12345678901234567890"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 1, "", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 1, "12345", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 1, "12345", 1, S("abcdefghijklmnopqrst1"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 1, "12345", 2, S("abcdefghijklmnopqrst12"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 1, "12345", 4, S("abcdefghijklmnopqrst1234"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 1, "12345", 5, S("abcdefghijklmnopqrst12345"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 1, "1234567890", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 1, "1234567890", 1, S("abcdefghijklmnopqrst1"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 1, "1234567890", 5, S("abcdefghijklmnopqrst12345"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 1, "1234567890", 9, S("abcdefghijklmnopqrst123456789"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 1, "1234567890", 10, S("abcdefghijklmnopqrst1234567890"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 1, "12345678901234567890", 0, S("abcdefghijklmnopqrst"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 1, "12345678901234567890", 1, S("abcdefghijklmnopqrst1"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 1, "12345678901234567890", 10, S("abcdefghijklmnopqrst1234567890"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 1, "12345678901234567890", 19, S("abcdefghijklmnopqrst1234567890123456789"))); + BOOST_TEST(testR(S("abcdefghijklmnopqrst"), 20, 1, "12345678901234567890", 20, S("abcdefghijklmnopqrst12345678901234567890"))); } +template +bool +testS(const S& s, typename S::size_type pos, typename S::size_type n) +{ + if (pos <= s.size()) + { + typename S::string_view_type str = s.substr(pos, n); + typename S::size_type rlen = std::min(n, s.size() - pos); + return (S::traits_type::compare(s.data() + pos, str.data(), rlen) == 0); + } + else + { + BOOST_TEST_THROWS((s.substr(pos, n)), std::out_of_range); + return true; + } +} void -testMisc() +testSubstr() { - auto c = "12345"; - fixed_string<40> fs = "helloworld!"; - BOOST_TEST(fs.substr(1) == "elloworld!"); + using S = fixed_string<400>; + BOOST_TEST(testS(S(""), 0, 0)); + BOOST_TEST(testS(S(""), 1, 0)); + BOOST_TEST(testS(S("pniot"), 0, 0)); + BOOST_TEST(testS(S("htaob"), 0, 1)); + BOOST_TEST(testS(S("fodgq"), 0, 2)); + BOOST_TEST(testS(S("hpqia"), 0, 4)); + BOOST_TEST(testS(S("qanej"), 0, 5)); + BOOST_TEST(testS(S("dfkap"), 1, 0)); + BOOST_TEST(testS(S("clbao"), 1, 1)); + BOOST_TEST(testS(S("ihqrf"), 1, 2)); + BOOST_TEST(testS(S("mekdn"), 1, 3)); + BOOST_TEST(testS(S("ngtjf"), 1, 4)); + BOOST_TEST(testS(S("srdfq"), 2, 0)); + BOOST_TEST(testS(S("qkdrs"), 2, 1)); + BOOST_TEST(testS(S("ikcrq"), 2, 2)); + BOOST_TEST(testS(S("cdaih"), 2, 3)); + BOOST_TEST(testS(S("dmajb"), 4, 0)); + BOOST_TEST(testS(S("karth"), 4, 1)); + BOOST_TEST(testS(S("lhcdo"), 5, 0)); + BOOST_TEST(testS(S("acbsj"), 6, 0)); + BOOST_TEST(testS(S("pbsjikaole"), 0, 0)); + BOOST_TEST(testS(S("pcbahntsje"), 0, 1)); + BOOST_TEST(testS(S("mprdjbeiak"), 0, 5)); + BOOST_TEST(testS(S("fhepcrntko"), 0, 9)); + BOOST_TEST(testS(S("eqmpaidtls"), 0, 10)); + BOOST_TEST(testS(S("joidhalcmq"), 1, 0)); + BOOST_TEST(testS(S("omigsphflj"), 1, 1)); + BOOST_TEST(testS(S("kocgbphfji"), 1, 4)); + BOOST_TEST(testS(S("onmjekafbi"), 1, 8)); + BOOST_TEST(testS(S("fbslrjiqkm"), 1, 9)); + BOOST_TEST(testS(S("oqmrjahnkg"), 5, 0)); + BOOST_TEST(testS(S("jeidpcmalh"), 5, 1)); + BOOST_TEST(testS(S("schfalibje"), 5, 2)); + BOOST_TEST(testS(S("crliponbqe"), 5, 4)); + BOOST_TEST(testS(S("igdscopqtm"), 5, 5)); + BOOST_TEST(testS(S("qngpdkimlc"), 9, 0)); + BOOST_TEST(testS(S("thdjgafrlb"), 9, 1)); + BOOST_TEST(testS(S("hcjitbfapl"), 10, 0)); + BOOST_TEST(testS(S("mgojkldsqh"), 11, 0)); + BOOST_TEST(testS(S("gfshlcmdjreqipbontak"), 0, 0)); + BOOST_TEST(testS(S("nadkhpfemgclosibtjrq"), 0, 1)); + BOOST_TEST(testS(S("nkodajteqplrbifhmcgs"), 0, 10)); + BOOST_TEST(testS(S("ofdrqmkeblthacpgijsn"), 0, 19)); + BOOST_TEST(testS(S("gbmetiprqdoasckjfhln"), 0, 20)); + BOOST_TEST(testS(S("bdfjqgatlksriohemnpc"), 1, 0)); + BOOST_TEST(testS(S("crnklpmegdqfiashtojb"), 1, 1)); + BOOST_TEST(testS(S("ejqcnahdrkfsmptilgbo"), 1, 9)); + BOOST_TEST(testS(S("jsbtafedocnirgpmkhql"), 1, 18)); + BOOST_TEST(testS(S("prqgnlbaejsmkhdctoif"), 1, 19)); + BOOST_TEST(testS(S("qnmodrtkebhpasifgcjl"), 10, 0)); + BOOST_TEST(testS(S("pejafmnokrqhtisbcdgl"), 10, 1)); + BOOST_TEST(testS(S("cpebqsfmnjdolhkratgi"), 10, 5)); + BOOST_TEST(testS(S("odnqkgijrhabfmcestlp"), 10, 9)); + BOOST_TEST(testS(S("lmofqdhpkibagnrcjste"), 10, 10)); + BOOST_TEST(testS(S("lgjqketopbfahrmnsicd"), 19, 0)); + BOOST_TEST(testS(S("ktsrmnqagdecfhijpobl"), 19, 1)); + BOOST_TEST(testS(S("lsaijeqhtrbgcdmpfkno"), 20, 0)); + BOOST_TEST(testS(S("dplqartnfgejichmoskb"), 21, 0)); + BOOST_TEST(testS(S(""), 0, 0)); + BOOST_TEST(testS(S(""), 1, 0)); + BOOST_TEST(testS(S("pniot"), 0, 0)); + BOOST_TEST(testS(S("htaob"), 0, 1)); + BOOST_TEST(testS(S("fodgq"), 0, 2)); + BOOST_TEST(testS(S("hpqia"), 0, 4)); + BOOST_TEST(testS(S("qanej"), 0, 5)); + BOOST_TEST(testS(S("dfkap"), 1, 0)); + BOOST_TEST(testS(S("clbao"), 1, 1)); + BOOST_TEST(testS(S("ihqrf"), 1, 2)); + BOOST_TEST(testS(S("mekdn"), 1, 3)); + BOOST_TEST(testS(S("ngtjf"), 1, 4)); + BOOST_TEST(testS(S("srdfq"), 2, 0)); + BOOST_TEST(testS(S("qkdrs"), 2, 1)); + BOOST_TEST(testS(S("ikcrq"), 2, 2)); + BOOST_TEST(testS(S("cdaih"), 2, 3)); + BOOST_TEST(testS(S("dmajb"), 4, 0)); + BOOST_TEST(testS(S("karth"), 4, 1)); + BOOST_TEST(testS(S("lhcdo"), 5, 0)); + BOOST_TEST(testS(S("acbsj"), 6, 0)); + BOOST_TEST(testS(S("pbsjikaole"), 0, 0)); + BOOST_TEST(testS(S("pcbahntsje"), 0, 1)); + BOOST_TEST(testS(S("mprdjbeiak"), 0, 5)); + BOOST_TEST(testS(S("fhepcrntko"), 0, 9)); + BOOST_TEST(testS(S("eqmpaidtls"), 0, 10)); + BOOST_TEST(testS(S("joidhalcmq"), 1, 0)); + BOOST_TEST(testS(S("omigsphflj"), 1, 1)); + BOOST_TEST(testS(S("kocgbphfji"), 1, 4)); + BOOST_TEST(testS(S("onmjekafbi"), 1, 8)); + BOOST_TEST(testS(S("fbslrjiqkm"), 1, 9)); + BOOST_TEST(testS(S("oqmrjahnkg"), 5, 0)); + BOOST_TEST(testS(S("jeidpcmalh"), 5, 1)); + BOOST_TEST(testS(S("schfalibje"), 5, 2)); + BOOST_TEST(testS(S("crliponbqe"), 5, 4)); + BOOST_TEST(testS(S("igdscopqtm"), 5, 5)); + BOOST_TEST(testS(S("qngpdkimlc"), 9, 0)); + BOOST_TEST(testS(S("thdjgafrlb"), 9, 1)); + BOOST_TEST(testS(S("hcjitbfapl"), 10, 0)); + BOOST_TEST(testS(S("mgojkldsqh"), 11, 0)); + BOOST_TEST(testS(S("gfshlcmdjreqipbontak"), 0, 0)); + BOOST_TEST(testS(S("nadkhpfemgclosibtjrq"), 0, 1)); + BOOST_TEST(testS(S("nkodajteqplrbifhmcgs"), 0, 10)); + BOOST_TEST(testS(S("ofdrqmkeblthacpgijsn"), 0, 19)); + BOOST_TEST(testS(S("gbmetiprqdoasckjfhln"), 0, 20)); + BOOST_TEST(testS(S("bdfjqgatlksriohemnpc"), 1, 0)); + BOOST_TEST(testS(S("crnklpmegdqfiashtojb"), 1, 1)); + BOOST_TEST(testS(S("ejqcnahdrkfsmptilgbo"), 1, 9)); + BOOST_TEST(testS(S("jsbtafedocnirgpmkhql"), 1, 18)); + BOOST_TEST(testS(S("prqgnlbaejsmkhdctoif"), 1, 19)); + BOOST_TEST(testS(S("qnmodrtkebhpasifgcjl"), 10, 0)); + BOOST_TEST(testS(S("pejafmnokrqhtisbcdgl"), 10, 1)); + BOOST_TEST(testS(S("cpebqsfmnjdolhkratgi"), 10, 5)); + BOOST_TEST(testS(S("odnqkgijrhabfmcestlp"), 10, 9)); + BOOST_TEST(testS(S("lmofqdhpkibagnrcjste"), 10, 10)); + BOOST_TEST(testS(S("lgjqketopbfahrmnsicd"), 19, 0)); + BOOST_TEST(testS(S("ktsrmnqagdecfhijpobl"), 19, 1)); + BOOST_TEST(testS(S("lsaijeqhtrbgcdmpfkno"), 20, 0)); + BOOST_TEST(testS(S("dplqartnfgejichmoskb"), 21, 0)); } +void +testStartsEnds() +{ + using S = fixed_string<400>; + BOOST_TEST(S("1234567890").starts_with('1')); + BOOST_TEST(S("1234567890").starts_with("123")); + BOOST_TEST(S("1234567890").starts_with("1234567890")); + BOOST_TEST(!S("1234567890").starts_with("234")); + BOOST_TEST(!S("1234567890").starts_with("12345678900")); + + BOOST_TEST(S("1234567890").ends_with('0')); + BOOST_TEST(S("1234567890").ends_with("890")); + BOOST_TEST(S("1234567890").ends_with("1234567890")); + BOOST_TEST(!S("1234567890").ends_with("234")); + BOOST_TEST(!S("1234567890").ends_with("12345678900")); +} + + + int runTests() { @@ -5145,8 +6521,8 @@ runTests() testFind(); testReplace(); - testMisc(); - + testSubstr(); + testStartsEnds(); return report_errors(); }