blob: f6a21d0f141d846f2af94804a76b421614369346 [file] [log] [blame]
//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
// <string_view>
// constexpr int compare(size_type pos1, size_type n1, basic_string_view str,
// size_type pos2, size_type n2) const;
#include <string_view>
#include <cassert>
#include <stdexcept>
#include "test_macros.h"
#include "constexpr_char_traits.hpp"
int sign ( int x ) { return x > 0 ? 1 : ( x < 0 ? -1 : 0 ); }
template<typename CharT>
void test1 ( std::basic_string_view<CharT> sv1, size_t pos1, size_t n1,
std::basic_string_view<CharT> sv2, size_t pos2, size_t n2,
int expected ) {
#ifdef TEST_HAS_NO_EXCEPTIONS
if (pos1 <= sv1.size() && pos2 <= sv2.size())
assert (sign( sv1.compare(pos1, n1, sv2, pos2, n2)) == sign(expected));
#else
try {
assert (sign( sv1.compare(pos1, n1, sv2, pos2, n2)) == sign(expected));
assert(pos1 <= sv1.size() && pos2 <= sv2.size());
}
catch (const std::out_of_range&) {
assert(pos1 > sv1.size() || pos2 > sv2.size());
}
#endif
}
template<typename CharT>
void test ( const CharT *s1, size_t pos1, size_t n1,
const CharT *s2, size_t pos2, size_t n2,
int expected ) {
typedef std::basic_string_view<CharT> string_view_t;
string_view_t sv1 ( s1 );
string_view_t sv2 ( s2 );
test1(sv1, pos1, n1, sv2, pos2, n2, expected);
}
void test0()
{
test("", 0, 0, "", 0, 0, 0);
test("", 0, 0, "", 0, 1, 0);
test("", 0, 0, "", 1, 0, 0);
test("", 0, 0, "abcde", 0, 0, 0);
test("", 0, 0, "abcde", 0, 1, -1);
test("", 0, 0, "abcde", 0, 2, -2);
test("", 0, 0, "abcde", 0, 4, -4);
test("", 0, 0, "abcde", 0, 5, -5);
test("", 0, 0, "abcde", 0, 6, -5);
test("", 0, 0, "abcde", 1, 0, 0);
test("", 0, 0, "abcde", 1, 1, -1);
test("", 0, 0, "abcde", 1, 2, -2);
test("", 0, 0, "abcde", 1, 3, -3);
test("", 0, 0, "abcde", 1, 4, -4);
test("", 0, 0, "abcde", 1, 5, -4);
test("", 0, 0, "abcde", 2, 0, 0);
test("", 0, 0, "abcde", 2, 1, -1);
test("", 0, 0, "abcde", 2, 2, -2);
test("", 0, 0, "abcde", 2, 3, -3);
test("", 0, 0, "abcde", 2, 4, -3);
test("", 0, 0, "abcde", 4, 0, 0);
test("", 0, 0, "abcde", 4, 1, -1);
test("", 0, 0, "abcde", 4, 2, -1);
test("", 0, 0, "abcde", 5, 0, 0);
test("", 0, 0, "abcde", 5, 1, 0);
test("", 0, 0, "abcde", 6, 0, 0);
test("", 0, 0, "abcdefghij", 0, 0, 0);
test("", 0, 0, "abcdefghij", 0, 1, -1);
test("", 0, 0, "abcdefghij", 0, 5, -5);
test("", 0, 0, "abcdefghij", 0, 9, -9);
test("", 0, 0, "abcdefghij", 0, 10, -10);
test("", 0, 0, "abcdefghij", 0, 11, -10);
test("", 0, 0, "abcdefghij", 1, 0, 0);
test("", 0, 0, "abcdefghij", 1, 1, -1);
test("", 0, 0, "abcdefghij", 1, 4, -4);
test("", 0, 0, "abcdefghij", 1, 8, -8);
test("", 0, 0, "abcdefghij", 1, 9, -9);
test("", 0, 0, "abcdefghij", 1, 10, -9);
test("", 0, 0, "abcdefghij", 5, 0, 0);
test("", 0, 0, "abcdefghij", 5, 1, -1);
test("", 0, 0, "abcdefghij", 5, 2, -2);
test("", 0, 0, "abcdefghij", 5, 4, -4);
test("", 0, 0, "abcdefghij", 5, 5, -5);
test("", 0, 0, "abcdefghij", 5, 6, -5);
test("", 0, 0, "abcdefghij", 9, 0, 0);
test("", 0, 0, "abcdefghij", 9, 1, -1);
test("", 0, 0, "abcdefghij", 9, 2, -1);
test("", 0, 0, "abcdefghij", 10, 0, 0);
test("", 0, 0, "abcdefghij", 10, 1, 0);
test("", 0, 0, "abcdefghij", 11, 0, 0);
test("", 0, 0, "abcdefghijklmnopqrst", 0, 0, 0);
test("", 0, 0, "abcdefghijklmnopqrst", 0, 1, -1);
test("", 0, 0, "abcdefghijklmnopqrst", 0, 10, -10);
test("", 0, 0, "abcdefghijklmnopqrst", 0, 19, -19);
test("", 0, 0, "abcdefghijklmnopqrst", 0, 20, -20);
test("", 0, 0, "abcdefghijklmnopqrst", 0, 21, -20);
test("", 0, 0, "abcdefghijklmnopqrst", 1, 0, 0);
test("", 0, 0, "abcdefghijklmnopqrst", 1, 1, -1);
test("", 0, 0, "abcdefghijklmnopqrst", 1, 9, -9);
test("", 0, 0, "abcdefghijklmnopqrst", 1, 18, -18);
test("", 0, 0, "abcdefghijklmnopqrst", 1, 19, -19);
test("", 0, 0, "abcdefghijklmnopqrst", 1, 20, -19);
test("", 0, 0, "abcdefghijklmnopqrst", 10, 0, 0);
test("", 0, 0, "abcdefghijklmnopqrst", 10, 1, -1);
test("", 0, 0, "abcdefghijklmnopqrst", 10, 5, -5);
test("", 0, 0, "abcdefghijklmnopqrst", 10, 9, -9);
test("", 0, 0, "abcdefghijklmnopqrst", 10, 10, -10);
test("", 0, 0, "abcdefghijklmnopqrst", 10, 11, -10);
test("", 0, 0, "abcdefghijklmnopqrst", 19, 0, 0);
test("", 0, 0, "abcdefghijklmnopqrst", 19, 1, -1);
test("", 0, 0, "abcdefghijklmnopqrst", 19, 2, -1);
test("", 0, 0, "abcdefghijklmnopqrst", 20, 0, 0);
test("", 0, 0, "abcdefghijklmnopqrst", 20, 1, 0);
test("", 0, 0, "abcdefghijklmnopqrst", 21, 0, 0);
test("", 0, 1, "", 0, 0, 0);
test("", 0, 1, "", 0, 1, 0);
test("", 0, 1, "", 1, 0, 0);
test("", 0, 1, "abcde", 0, 0, 0);
test("", 0, 1, "abcde", 0, 1, -1);
test("", 0, 1, "abcde", 0, 2, -2);
test("", 0, 1, "abcde", 0, 4, -4);
test("", 0, 1, "abcde", 0, 5, -5);
test("", 0, 1, "abcde", 0, 6, -5);
test("", 0, 1, "abcde", 1, 0, 0);
test("", 0, 1, "abcde", 1, 1, -1);
test("", 0, 1, "abcde", 1, 2, -2);
test("", 0, 1, "abcde", 1, 3, -3);
test("", 0, 1, "abcde", 1, 4, -4);
test("", 0, 1, "abcde", 1, 5, -4);
test("", 0, 1, "abcde", 2, 0, 0);
test("", 0, 1, "abcde", 2, 1, -1);
test("", 0, 1, "abcde", 2, 2, -2);
test("", 0, 1, "abcde", 2, 3, -3);
test("", 0, 1, "abcde", 2, 4, -3);
test("", 0, 1, "abcde", 4, 0, 0);
test("", 0, 1, "abcde", 4, 1, -1);
test("", 0, 1, "abcde", 4, 2, -1);
test("", 0, 1, "abcde", 5, 0, 0);
test("", 0, 1, "abcde", 5, 1, 0);
test("", 0, 1, "abcde", 6, 0, 0);
}
void test1()
{
test("", 0, 1, "abcdefghij", 0, 0, 0);
test("", 0, 1, "abcdefghij", 0, 1, -1);
test("", 0, 1, "abcdefghij", 0, 5, -5);
test("", 0, 1, "abcdefghij", 0, 9, -9);
test("", 0, 1, "abcdefghij", 0, 10, -10);
test("", 0, 1, "abcdefghij", 0, 11, -10);
test("", 0, 1, "abcdefghij", 1, 0, 0);
test("", 0, 1, "abcdefghij", 1, 1, -1);
test("", 0, 1, "abcdefghij", 1, 4, -4);
test("", 0, 1, "abcdefghij", 1, 8, -8);
test("", 0, 1, "abcdefghij", 1, 9, -9);
test("", 0, 1, "abcdefghij", 1, 10, -9);
test("", 0, 1, "abcdefghij", 5, 0, 0);
test("", 0, 1, "abcdefghij", 5, 1, -1);
test("", 0, 1, "abcdefghij", 5, 2, -2);
test("", 0, 1, "abcdefghij", 5, 4, -4);
test("", 0, 1, "abcdefghij", 5, 5, -5);
test("", 0, 1, "abcdefghij", 5, 6, -5);
test("", 0, 1, "abcdefghij", 9, 0, 0);
test("", 0, 1, "abcdefghij", 9, 1, -1);
test("", 0, 1, "abcdefghij", 9, 2, -1);
test("", 0, 1, "abcdefghij", 10, 0, 0);
test("", 0, 1, "abcdefghij", 10, 1, 0);
test("", 0, 1, "abcdefghij", 11, 0, 0);
test("", 0, 1, "abcdefghijklmnopqrst", 0, 0, 0);
test("", 0, 1, "abcdefghijklmnopqrst", 0, 1, -1);
test("", 0, 1, "abcdefghijklmnopqrst", 0, 10, -10);
test("", 0, 1, "abcdefghijklmnopqrst", 0, 19, -19);
test("", 0, 1, "abcdefghijklmnopqrst", 0, 20, -20);
test("", 0, 1, "abcdefghijklmnopqrst", 0, 21, -20);
test("", 0, 1, "abcdefghijklmnopqrst", 1, 0, 0);
test("", 0, 1, "abcdefghijklmnopqrst", 1, 1, -1);
test("", 0, 1, "abcdefghijklmnopqrst", 1, 9, -9);
test("", 0, 1, "abcdefghijklmnopqrst", 1, 18, -18);
test("", 0, 1, "abcdefghijklmnopqrst", 1, 19, -19);
test("", 0, 1, "abcdefghijklmnopqrst", 1, 20, -19);
test("", 0, 1, "abcdefghijklmnopqrst", 10, 0, 0);
test("", 0, 1, "abcdefghijklmnopqrst", 10, 1, -1);
test("", 0, 1, "abcdefghijklmnopqrst", 10, 5, -5);
test("", 0, 1, "abcdefghijklmnopqrst", 10, 9, -9);
test("", 0, 1, "abcdefghijklmnopqrst", 10, 10, -10);
test("", 0, 1, "abcdefghijklmnopqrst", 10, 11, -10);
test("", 0, 1, "abcdefghijklmnopqrst", 19, 0, 0);
test("", 0, 1, "abcdefghijklmnopqrst", 19, 1, -1);
test("", 0, 1, "abcdefghijklmnopqrst", 19, 2, -1);
test("", 0, 1, "abcdefghijklmnopqrst", 20, 0, 0);
test("", 0, 1, "abcdefghijklmnopqrst", 20, 1, 0);
test("", 0, 1, "abcdefghijklmnopqrst", 21, 0, 0);
test("", 1, 0, "", 0, 0, 0);
test("", 1, 0, "", 0, 1, 0);
test("", 1, 0, "", 1, 0, 0);
test("", 1, 0, "abcde", 0, 0, 0);
test("", 1, 0, "abcde", 0, 1, 0);
test("", 1, 0, "abcde", 0, 2, 0);
test("", 1, 0, "abcde", 0, 4, 0);
test("", 1, 0, "abcde", 0, 5, 0);
test("", 1, 0, "abcde", 0, 6, 0);
test("", 1, 0, "abcde", 1, 0, 0);
test("", 1, 0, "abcde", 1, 1, 0);
test("", 1, 0, "abcde", 1, 2, 0);
test("", 1, 0, "abcde", 1, 3, 0);
test("", 1, 0, "abcde", 1, 4, 0);
test("", 1, 0, "abcde", 1, 5, 0);
test("", 1, 0, "abcde", 2, 0, 0);
test("", 1, 0, "abcde", 2, 1, 0);
test("", 1, 0, "abcde", 2, 2, 0);
test("", 1, 0, "abcde", 2, 3, 0);
test("", 1, 0, "abcde", 2, 4, 0);
test("", 1, 0, "abcde", 4, 0, 0);
test("", 1, 0, "abcde", 4, 1, 0);
test("", 1, 0, "abcde", 4, 2, 0);
test("", 1, 0, "abcde", 5, 0, 0);
test("", 1, 0, "abcde", 5, 1, 0);
test("", 1, 0, "abcde", 6, 0, 0);
test("", 1, 0, "abcdefghij", 0, 0, 0);
test("", 1, 0, "abcdefghij", 0, 1, 0);
test("", 1, 0, "abcdefghij", 0, 5, 0);
test("", 1, 0, "abcdefghij", 0, 9, 0);
test("", 1, 0, "abcdefghij", 0, 10, 0);
test("", 1, 0, "abcdefghij", 0, 11, 0);
test("", 1, 0, "abcdefghij", 1, 0, 0);
test("", 1, 0, "abcdefghij", 1, 1, 0);
test("", 1, 0, "abcdefghij", 1, 4, 0);
test("", 1, 0, "abcdefghij", 1, 8, 0);
test("", 1, 0, "abcdefghij", 1, 9, 0);
test("", 1, 0, "abcdefghij", 1, 10, 0);
test("", 1, 0, "abcdefghij", 5, 0, 0);
test("", 1, 0, "abcdefghij", 5, 1, 0);
test("", 1, 0, "abcdefghij", 5, 2, 0);
test("", 1, 0, "abcdefghij", 5, 4, 0);
test("", 1, 0, "abcdefghij", 5, 5, 0);
test("", 1, 0, "abcdefghij", 5, 6, 0);
test("", 1, 0, "abcdefghij", 9, 0, 0);
test("", 1, 0, "abcdefghij", 9, 1, 0);
test("", 1, 0, "abcdefghij", 9, 2, 0);
test("", 1, 0, "abcdefghij", 10, 0, 0);
test("", 1, 0, "abcdefghij", 10, 1, 0);
test("", 1, 0, "abcdefghij", 11, 0, 0);
test("", 1, 0, "abcdefghijklmnopqrst", 0, 0, 0);
test("", 1, 0, "abcdefghijklmnopqrst", 0, 1, 0);
}
void test2()
{
test("", 1, 0, "abcdefghijklmnopqrst", 0, 10, 0);
test("", 1, 0, "abcdefghijklmnopqrst", 0, 19, 0);
test("", 1, 0, "abcdefghijklmnopqrst", 0, 20, 0);
test("", 1, 0, "abcdefghijklmnopqrst", 0, 21, 0);
test("", 1, 0, "abcdefghijklmnopqrst", 1, 0, 0);
test("", 1, 0, "abcdefghijklmnopqrst", 1, 1, 0);
test("", 1, 0, "abcdefghijklmnopqrst", 1, 9, 0);
test("", 1, 0, "abcdefghijklmnopqrst", 1, 18, 0);
test("", 1, 0, "abcdefghijklmnopqrst", 1, 19, 0);
test("", 1, 0, "abcdefghijklmnopqrst", 1, 20, 0);
test("", 1, 0, "abcdefghijklmnopqrst", 10, 0, 0);
test("", 1, 0, "abcdefghijklmnopqrst", 10, 1, 0);
test("", 1, 0, "abcdefghijklmnopqrst", 10, 5, 0);
test("", 1, 0, "abcdefghijklmnopqrst", 10, 9, 0);
test("", 1, 0, "abcdefghijklmnopqrst", 10, 10, 0);
test("", 1, 0, "abcdefghijklmnopqrst", 10, 11, 0);
test("", 1, 0, "abcdefghijklmnopqrst", 19, 0, 0);
test("", 1, 0, "abcdefghijklmnopqrst", 19, 1, 0);
test("", 1, 0, "abcdefghijklmnopqrst", 19, 2, 0);
test("", 1, 0, "abcdefghijklmnopqrst", 20, 0, 0);
test("", 1, 0, "abcdefghijklmnopqrst", 20, 1, 0);
test("", 1, 0, "abcdefghijklmnopqrst", 21, 0, 0);
test("abcde", 0, 0, "", 0, 0, 0);
test("abcde", 0, 0, "", 0, 1, 0);
test("abcde", 0, 0, "", 1, 0, 0);
test("abcde", 0, 0, "abcde", 0, 0, 0);
test("abcde", 0, 0, "abcde", 0, 1, -1);
test("abcde", 0, 0, "abcde", 0, 2, -2);
test("abcde", 0, 0, "abcde", 0, 4, -4);
test("abcde", 0, 0, "abcde", 0, 5, -5);
test("abcde", 0, 0, "abcde", 0, 6, -5);
test("abcde", 0, 0, "abcde", 1, 0, 0);
test("abcde", 0, 0, "abcde", 1, 1, -1);
test("abcde", 0, 0, "abcde", 1, 2, -2);
test("abcde", 0, 0, "abcde", 1, 3, -3);
test("abcde", 0, 0, "abcde", 1, 4, -4);
test("abcde", 0, 0, "abcde", 1, 5, -4);
test("abcde", 0, 0, "abcde", 2, 0, 0);
test("abcde", 0, 0, "abcde", 2, 1, -1);
test("abcde", 0, 0, "abcde", 2, 2, -2);
test("abcde", 0, 0, "abcde", 2, 3, -3);
test("abcde", 0, 0, "abcde", 2, 4, -3);
test("abcde", 0, 0, "abcde", 4, 0, 0);
test("abcde", 0, 0, "abcde", 4, 1, -1);
test("abcde", 0, 0, "abcde", 4, 2, -1);
test("abcde", 0, 0, "abcde", 5, 0, 0);
test("abcde", 0, 0, "abcde", 5, 1, 0);
test("abcde", 0, 0, "abcde", 6, 0, 0);
test("abcde", 0, 0, "abcdefghij", 0, 0, 0);
test("abcde", 0, 0, "abcdefghij", 0, 1, -1);
test("abcde", 0, 0, "abcdefghij", 0, 5, -5);
test("abcde", 0, 0, "abcdefghij", 0, 9, -9);
test("abcde", 0, 0, "abcdefghij", 0, 10, -10);
test("abcde", 0, 0, "abcdefghij", 0, 11, -10);
test("abcde", 0, 0, "abcdefghij", 1, 0, 0);
test("abcde", 0, 0, "abcdefghij", 1, 1, -1);
test("abcde", 0, 0, "abcdefghij", 1, 4, -4);
test("abcde", 0, 0, "abcdefghij", 1, 8, -8);
test("abcde", 0, 0, "abcdefghij", 1, 9, -9);
test("abcde", 0, 0, "abcdefghij", 1, 10, -9);
test("abcde", 0, 0, "abcdefghij", 5, 0, 0);
test("abcde", 0, 0, "abcdefghij", 5, 1, -1);
test("abcde", 0, 0, "abcdefghij", 5, 2, -2);
test("abcde", 0, 0, "abcdefghij", 5, 4, -4);
test("abcde", 0, 0, "abcdefghij", 5, 5, -5);
test("abcde", 0, 0, "abcdefghij", 5, 6, -5);
test("abcde", 0, 0, "abcdefghij", 9, 0, 0);
test("abcde", 0, 0, "abcdefghij", 9, 1, -1);
test("abcde", 0, 0, "abcdefghij", 9, 2, -1);
test("abcde", 0, 0, "abcdefghij", 10, 0, 0);
test("abcde", 0, 0, "abcdefghij", 10, 1, 0);
test("abcde", 0, 0, "abcdefghij", 11, 0, 0);
test("abcde", 0, 0, "abcdefghijklmnopqrst", 0, 0, 0);
test("abcde", 0, 0, "abcdefghijklmnopqrst", 0, 1, -1);
test("abcde", 0, 0, "abcdefghijklmnopqrst", 0, 10, -10);
test("abcde", 0, 0, "abcdefghijklmnopqrst", 0, 19, -19);
test("abcde", 0, 0, "abcdefghijklmnopqrst", 0, 20, -20);
test("abcde", 0, 0, "abcdefghijklmnopqrst", 0, 21, -20);
test("abcde", 0, 0, "abcdefghijklmnopqrst", 1, 0, 0);
test("abcde", 0, 0, "abcdefghijklmnopqrst", 1, 1, -1);
test("abcde", 0, 0, "abcdefghijklmnopqrst", 1, 9, -9);
test("abcde", 0, 0, "abcdefghijklmnopqrst", 1, 18, -18);
test("abcde", 0, 0, "abcdefghijklmnopqrst", 1, 19, -19);
test("abcde", 0, 0, "abcdefghijklmnopqrst", 1, 20, -19);
test("abcde", 0, 0, "abcdefghijklmnopqrst", 10, 0, 0);
test("abcde", 0, 0, "abcdefghijklmnopqrst", 10, 1, -1);
test("abcde", 0, 0, "abcdefghijklmnopqrst", 10, 5, -5);
test("abcde", 0, 0, "abcdefghijklmnopqrst", 10, 9, -9);
test("abcde", 0, 0, "abcdefghijklmnopqrst", 10, 10, -10);
test("abcde", 0, 0, "abcdefghijklmnopqrst", 10, 11, -10);
test("abcde", 0, 0, "abcdefghijklmnopqrst", 19, 0, 0);
test("abcde", 0, 0, "abcdefghijklmnopqrst", 19, 1, -1);
test("abcde", 0, 0, "abcdefghijklmnopqrst", 19, 2, -1);
test("abcde", 0, 0, "abcdefghijklmnopqrst", 20, 0, 0);
test("abcde", 0, 0, "abcdefghijklmnopqrst", 20, 1, 0);
test("abcde", 0, 0, "abcdefghijklmnopqrst", 21, 0, 0);
test("abcde", 0, 1, "", 0, 0, 1);
test("abcde", 0, 1, "", 0, 1, 1);
test("abcde", 0, 1, "", 1, 0, 0);
test("abcde", 0, 1, "abcde", 0, 0, 1);
}
void test3()
{
test("abcde", 0, 1, "abcde", 0, 1, 0);
test("abcde", 0, 1, "abcde", 0, 2, -1);
test("abcde", 0, 1, "abcde", 0, 4, -3);
test("abcde", 0, 1, "abcde", 0, 5, -4);
test("abcde", 0, 1, "abcde", 0, 6, -4);
test("abcde", 0, 1, "abcde", 1, 0, 1);
test("abcde", 0, 1, "abcde", 1, 1, -1);
test("abcde", 0, 1, "abcde", 1, 2, -1);
test("abcde", 0, 1, "abcde", 1, 3, -1);
test("abcde", 0, 1, "abcde", 1, 4, -1);
test("abcde", 0, 1, "abcde", 1, 5, -1);
test("abcde", 0, 1, "abcde", 2, 0, 1);
test("abcde", 0, 1, "abcde", 2, 1, -2);
test("abcde", 0, 1, "abcde", 2, 2, -2);
test("abcde", 0, 1, "abcde", 2, 3, -2);
test("abcde", 0, 1, "abcde", 2, 4, -2);
test("abcde", 0, 1, "abcde", 4, 0, 1);
test("abcde", 0, 1, "abcde", 4, 1, -4);
test("abcde", 0, 1, "abcde", 4, 2, -4);
test("abcde", 0, 1, "abcde", 5, 0, 1);
test("abcde", 0, 1, "abcde", 5, 1, 1);
test("abcde", 0, 1, "abcde", 6, 0, 0);
test("abcde", 0, 1, "abcdefghij", 0, 0, 1);
test("abcde", 0, 1, "abcdefghij", 0, 1, 0);
test("abcde", 0, 1, "abcdefghij", 0, 5, -4);
test("abcde", 0, 1, "abcdefghij", 0, 9, -8);
test("abcde", 0, 1, "abcdefghij", 0, 10, -9);
test("abcde", 0, 1, "abcdefghij", 0, 11, -9);
test("abcde", 0, 1, "abcdefghij", 1, 0, 1);
test("abcde", 0, 1, "abcdefghij", 1, 1, -1);
test("abcde", 0, 1, "abcdefghij", 1, 4, -1);
test("abcde", 0, 1, "abcdefghij", 1, 8, -1);
test("abcde", 0, 1, "abcdefghij", 1, 9, -1);
test("abcde", 0, 1, "abcdefghij", 1, 10, -1);
test("abcde", 0, 1, "abcdefghij", 5, 0, 1);
test("abcde", 0, 1, "abcdefghij", 5, 1, -5);
test("abcde", 0, 1, "abcdefghij", 5, 2, -5);
test("abcde", 0, 1, "abcdefghij", 5, 4, -5);
test("abcde", 0, 1, "abcdefghij", 5, 5, -5);
test("abcde", 0, 1, "abcdefghij", 5, 6, -5);
test("abcde", 0, 1, "abcdefghij", 9, 0, 1);
test("abcde", 0, 1, "abcdefghij", 9, 1, -9);
test("abcde", 0, 1, "abcdefghij", 9, 2, -9);
test("abcde", 0, 1, "abcdefghij", 10, 0, 1);
test("abcde", 0, 1, "abcdefghij", 10, 1, 1);
test("abcde", 0, 1, "abcdefghij", 11, 0, 0);
test("abcde", 0, 1, "abcdefghijklmnopqrst", 0, 0, 1);
test("abcde", 0, 1, "abcdefghijklmnopqrst", 0, 1, 0);
test("abcde", 0, 1, "abcdefghijklmnopqrst", 0, 10, -9);
test("abcde", 0, 1, "abcdefghijklmnopqrst", 0, 19, -18);
test("abcde", 0, 1, "abcdefghijklmnopqrst", 0, 20, -19);
test("abcde", 0, 1, "abcdefghijklmnopqrst", 0, 21, -19);
test("abcde", 0, 1, "abcdefghijklmnopqrst", 1, 0, 1);
test("abcde", 0, 1, "abcdefghijklmnopqrst", 1, 1, -1);
test("abcde", 0, 1, "abcdefghijklmnopqrst", 1, 9, -1);
test("abcde", 0, 1, "abcdefghijklmnopqrst", 1, 18, -1);
test("abcde", 0, 1, "abcdefghijklmnopqrst", 1, 19, -1);
test("abcde", 0, 1, "abcdefghijklmnopqrst", 1, 20, -1);
test("abcde", 0, 1, "abcdefghijklmnopqrst", 10, 0, 1);
test("abcde", 0, 1, "abcdefghijklmnopqrst", 10, 1, -10);
test("abcde", 0, 1, "abcdefghijklmnopqrst", 10, 5, -10);
test("abcde", 0, 1, "abcdefghijklmnopqrst", 10, 9, -10);
test("abcde", 0, 1, "abcdefghijklmnopqrst", 10, 10, -10);
test("abcde", 0, 1, "abcdefghijklmnopqrst", 10, 11, -10);
test("abcde", 0, 1, "abcdefghijklmnopqrst", 19, 0, 1);
test("abcde", 0, 1, "abcdefghijklmnopqrst", 19, 1, -19);
test("abcde", 0, 1, "abcdefghijklmnopqrst", 19, 2, -19);
test("abcde", 0, 1, "abcdefghijklmnopqrst", 20, 0, 1);
test("abcde", 0, 1, "abcdefghijklmnopqrst", 20, 1, 1);
test("abcde", 0, 1, "abcdefghijklmnopqrst", 21, 0, 0);
test("abcde", 0, 2, "", 0, 0, 2);
test("abcde", 0, 2, "", 0, 1, 2);
test("abcde", 0, 2, "", 1, 0, 0);
test("abcde", 0, 2, "abcde", 0, 0, 2);
test("abcde", 0, 2, "abcde", 0, 1, 1);
test("abcde", 0, 2, "abcde", 0, 2, 0);
test("abcde", 0, 2, "abcde", 0, 4, -2);
test("abcde", 0, 2, "abcde", 0, 5, -3);
test("abcde", 0, 2, "abcde", 0, 6, -3);
test("abcde", 0, 2, "abcde", 1, 0, 2);
test("abcde", 0, 2, "abcde", 1, 1, -1);
test("abcde", 0, 2, "abcde", 1, 2, -1);
test("abcde", 0, 2, "abcde", 1, 3, -1);
test("abcde", 0, 2, "abcde", 1, 4, -1);
test("abcde", 0, 2, "abcde", 1, 5, -1);
test("abcde", 0, 2, "abcde", 2, 0, 2);
test("abcde", 0, 2, "abcde", 2, 1, -2);
test("abcde", 0, 2, "abcde", 2, 2, -2);
test("abcde", 0, 2, "abcde", 2, 3, -2);
test("abcde", 0, 2, "abcde", 2, 4, -2);
test("abcde", 0, 2, "abcde", 4, 0, 2);
test("abcde", 0, 2, "abcde", 4, 1, -4);
test("abcde", 0, 2, "abcde", 4, 2, -4);
test("abcde", 0, 2, "abcde", 5, 0, 2);
test("abcde", 0, 2, "abcde", 5, 1, 2);
test("abcde", 0, 2, "abcde", 6, 0, 0);
test("abcde", 0, 2, "abcdefghij", 0, 0, 2);
test("abcde", 0, 2, "abcdefghij", 0, 1, 1);
test("abcde", 0, 2, "abcdefghij", 0, 5, -3);
test("abcde", 0, 2, "abcdefghij", 0, 9, -7);
}
void test4()
{
test("abcde", 0, 2, "abcdefghij", 0, 10, -8);
test("abcde", 0, 2, "abcdefghij", 0, 11, -8);
test("abcde", 0, 2, "abcdefghij", 1, 0, 2);
test("abcde", 0, 2, "abcdefghij", 1, 1, -1);
test("abcde", 0, 2, "abcdefghij", 1, 4, -1);
test("abcde", 0, 2, "abcdefghij", 1, 8, -1);
test("abcde", 0, 2, "abcdefghij", 1, 9, -1);
test("abcde", 0, 2, "abcdefghij", 1, 10, -1);
test("abcde", 0, 2, "abcdefghij", 5, 0, 2);
test("abcde", 0, 2, "abcdefghij", 5, 1, -5);
test("abcde", 0, 2, "abcdefghij", 5, 2, -5);
test("abcde", 0, 2, "abcdefghij", 5, 4, -5);
test("abcde", 0, 2, "abcdefghij", 5, 5, -5);
test("abcde", 0, 2, "abcdefghij", 5, 6, -5);
test("abcde", 0, 2, "abcdefghij", 9, 0, 2);
test("abcde", 0, 2, "abcdefghij", 9, 1, -9);
test("abcde", 0, 2, "abcdefghij", 9, 2, -9);
test("abcde", 0, 2, "abcdefghij", 10, 0, 2);
test("abcde", 0, 2, "abcdefghij", 10, 1, 2);
test("abcde", 0, 2, "abcdefghij", 11, 0, 0);
test("abcde", 0, 2, "abcdefghijklmnopqrst", 0, 0, 2);
test("abcde", 0, 2, "abcdefghijklmnopqrst", 0, 1, 1);
test("abcde", 0, 2, "abcdefghijklmnopqrst", 0, 10, -8);
test("abcde", 0, 2, "abcdefghijklmnopqrst", 0, 19, -17);
test("abcde", 0, 2, "abcdefghijklmnopqrst", 0, 20, -18);
test("abcde", 0, 2, "abcdefghijklmnopqrst", 0, 21, -18);
test("abcde", 0, 2, "abcdefghijklmnopqrst", 1, 0, 2);
test("abcde", 0, 2, "abcdefghijklmnopqrst", 1, 1, -1);
test("abcde", 0, 2, "abcdefghijklmnopqrst", 1, 9, -1);
test("abcde", 0, 2, "abcdefghijklmnopqrst", 1, 18, -1);
test("abcde", 0, 2, "abcdefghijklmnopqrst", 1, 19, -1);
test("abcde", 0, 2, "abcdefghijklmnopqrst", 1, 20, -1);
test("abcde", 0, 2, "abcdefghijklmnopqrst", 10, 0, 2);
test("abcde", 0, 2, "abcdefghijklmnopqrst", 10, 1, -10);
test("abcde", 0, 2, "abcdefghijklmnopqrst", 10, 5, -10);
test("abcde", 0, 2, "abcdefghijklmnopqrst", 10, 9, -10);
test("abcde", 0, 2, "abcdefghijklmnopqrst", 10, 10, -10);
test("abcde", 0, 2, "abcdefghijklmnopqrst", 10, 11, -10);
test("abcde", 0, 2, "abcdefghijklmnopqrst", 19, 0, 2);
test("abcde", 0, 2, "abcdefghijklmnopqrst", 19, 1, -19);
test("abcde", 0, 2, "abcdefghijklmnopqrst", 19, 2, -19);
test("abcde", 0, 2, "abcdefghijklmnopqrst", 20, 0, 2);
test("abcde", 0, 2, "abcdefghijklmnopqrst", 20, 1, 2);
test("abcde", 0, 2, "abcdefghijklmnopqrst", 21, 0, 0);
test("abcde", 0, 4, "", 0, 0, 4);
test("abcde", 0, 4, "", 0, 1, 4);
test("abcde", 0, 4, "", 1, 0, 0);
test("abcde", 0, 4, "abcde", 0, 0, 4);
test("abcde", 0, 4, "abcde", 0, 1, 3);
test("abcde", 0, 4, "abcde", 0, 2, 2);
test("abcde", 0, 4, "abcde", 0, 4, 0);
test("abcde", 0, 4, "abcde", 0, 5, -1);
test("abcde", 0, 4, "abcde", 0, 6, -1);
test("abcde", 0, 4, "abcde", 1, 0, 4);
test("abcde", 0, 4, "abcde", 1, 1, -1);
test("abcde", 0, 4, "abcde", 1, 2, -1);
test("abcde", 0, 4, "abcde", 1, 3, -1);
test("abcde", 0, 4, "abcde", 1, 4, -1);
test("abcde", 0, 4, "abcde", 1, 5, -1);
test("abcde", 0, 4, "abcde", 2, 0, 4);
test("abcde", 0, 4, "abcde", 2, 1, -2);
test("abcde", 0, 4, "abcde", 2, 2, -2);
test("abcde", 0, 4, "abcde", 2, 3, -2);
test("abcde", 0, 4, "abcde", 2, 4, -2);
test("abcde", 0, 4, "abcde", 4, 0, 4);
test("abcde", 0, 4, "abcde", 4, 1, -4);
test("abcde", 0, 4, "abcde", 4, 2, -4);
test("abcde", 0, 4, "abcde", 5, 0, 4);
test("abcde", 0, 4, "abcde", 5, 1, 4);
test("abcde", 0, 4, "abcde", 6, 0, 0);
test("abcde", 0, 4, "abcdefghij", 0, 0, 4);
test("abcde", 0, 4, "abcdefghij", 0, 1, 3);
test("abcde", 0, 4, "abcdefghij", 0, 5, -1);
test("abcde", 0, 4, "abcdefghij", 0, 9, -5);
test("abcde", 0, 4, "abcdefghij", 0, 10, -6);
test("abcde", 0, 4, "abcdefghij", 0, 11, -6);
test("abcde", 0, 4, "abcdefghij", 1, 0, 4);
test("abcde", 0, 4, "abcdefghij", 1, 1, -1);
test("abcde", 0, 4, "abcdefghij", 1, 4, -1);
test("abcde", 0, 4, "abcdefghij", 1, 8, -1);
test("abcde", 0, 4, "abcdefghij", 1, 9, -1);
test("abcde", 0, 4, "abcdefghij", 1, 10, -1);
test("abcde", 0, 4, "abcdefghij", 5, 0, 4);
test("abcde", 0, 4, "abcdefghij", 5, 1, -5);
test("abcde", 0, 4, "abcdefghij", 5, 2, -5);
test("abcde", 0, 4, "abcdefghij", 5, 4, -5);
test("abcde", 0, 4, "abcdefghij", 5, 5, -5);
test("abcde", 0, 4, "abcdefghij", 5, 6, -5);
test("abcde", 0, 4, "abcdefghij", 9, 0, 4);
test("abcde", 0, 4, "abcdefghij", 9, 1, -9);
test("abcde", 0, 4, "abcdefghij", 9, 2, -9);
test("abcde", 0, 4, "abcdefghij", 10, 0, 4);
test("abcde", 0, 4, "abcdefghij", 10, 1, 4);
test("abcde", 0, 4, "abcdefghij", 11, 0, 0);
test("abcde", 0, 4, "abcdefghijklmnopqrst", 0, 0, 4);
test("abcde", 0, 4, "abcdefghijklmnopqrst", 0, 1, 3);
test("abcde", 0, 4, "abcdefghijklmnopqrst", 0, 10, -6);
test("abcde", 0, 4, "abcdefghijklmnopqrst", 0, 19, -15);
test("abcde", 0, 4, "abcdefghijklmnopqrst", 0, 20, -16);
test("abcde", 0, 4, "abcdefghijklmnopqrst", 0, 21, -16);
}
void test5()
{
test("abcde", 0, 4, "abcdefghijklmnopqrst", 1, 0, 4);
test("abcde", 0, 4, "abcdefghijklmnopqrst", 1, 1, -1);
test("abcde", 0, 4, "abcdefghijklmnopqrst", 1, 9, -1);
test("abcde", 0, 4, "abcdefghijklmnopqrst", 1, 18, -1);
test("abcde", 0, 4, "abcdefghijklmnopqrst", 1, 19, -1);
test("abcde", 0, 4, "abcdefghijklmnopqrst", 1, 20, -1);
test("abcde", 0, 4, "abcdefghijklmnopqrst", 10, 0, 4);
test("abcde", 0, 4, "abcdefghijklmnopqrst", 10, 1, -10);
test("abcde", 0, 4, "abcdefghijklmnopqrst", 10, 5, -10);
test("abcde", 0, 4, "abcdefghijklmnopqrst", 10, 9, -10);
test("abcde", 0, 4, "abcdefghijklmnopqrst", 10, 10, -10);
test("abcde", 0, 4, "abcdefghijklmnopqrst", 10, 11, -10);
test("abcde", 0, 4, "abcdefghijklmnopqrst", 19, 0, 4);
test("abcde", 0, 4, "abcdefghijklmnopqrst", 19, 1, -19);
test("abcde", 0, 4, "abcdefghijklmnopqrst", 19, 2, -19);
test("abcde", 0, 4, "abcdefghijklmnopqrst", 20, 0, 4);
test("abcde", 0, 4, "abcdefghijklmnopqrst", 20, 1, 4);
test("abcde", 0, 4, "abcdefghijklmnopqrst", 21, 0, 0);
test("abcde", 0, 5, "", 0, 0, 5);
test("abcde", 0, 5, "", 0, 1, 5);
test("abcde", 0, 5, "", 1, 0, 0);
test("abcde", 0, 5, "abcde", 0, 0, 5);
test("abcde", 0, 5, "abcde", 0, 1, 4);
test("abcde", 0, 5, "abcde", 0, 2, 3);
test("abcde", 0, 5, "abcde", 0, 4, 1);
test("abcde", 0, 5, "abcde", 0, 5, 0);
test("abcde", 0, 5, "abcde", 0, 6, 0);
test("abcde", 0, 5, "abcde", 1, 0, 5);
test("abcde", 0, 5, "abcde", 1, 1, -1);
test("abcde", 0, 5, "abcde", 1, 2, -1);
test("abcde", 0, 5, "abcde", 1, 3, -1);
test("abcde", 0, 5, "abcde", 1, 4, -1);
test("abcde", 0, 5, "abcde", 1, 5, -1);
test("abcde", 0, 5, "abcde", 2, 0, 5);
test("abcde", 0, 5, "abcde", 2, 1, -2);
test("abcde", 0, 5, "abcde", 2, 2, -2);
test("abcde", 0, 5, "abcde", 2, 3, -2);
test("abcde", 0, 5, "abcde", 2, 4, -2);
test("abcde", 0, 5, "abcde", 4, 0, 5);
test("abcde", 0, 5, "abcde", 4, 1, -4);
test("abcde", 0, 5, "abcde", 4, 2, -4);
test("abcde", 0, 5, "abcde", 5, 0, 5);
test("abcde", 0, 5, "abcde", 5, 1, 5);
test("abcde", 0, 5, "abcde", 6, 0, 0);
test("abcde", 0, 5, "abcdefghij", 0, 0, 5);
test("abcde", 0, 5, "abcdefghij", 0, 1, 4);
test("abcde", 0, 5, "abcdefghij", 0, 5, 0);
test("abcde", 0, 5, "abcdefghij", 0, 9, -4);
test("abcde", 0, 5, "abcdefghij", 0, 10, -5);
test("abcde", 0, 5, "abcdefghij", 0, 11, -5);
test("abcde", 0, 5, "abcdefghij", 1, 0, 5);
test("abcde", 0, 5, "abcdefghij", 1, 1, -1);
test("abcde", 0, 5, "abcdefghij", 1, 4, -1);
test("abcde", 0, 5, "abcdefghij", 1, 8, -1);
test("abcde", 0, 5, "abcdefghij", 1, 9, -1);
test("abcde", 0, 5, "abcdefghij", 1, 10, -1);
test("abcde", 0, 5, "abcdefghij", 5, 0, 5);
test("abcde", 0, 5, "abcdefghij", 5, 1, -5);
test("abcde", 0, 5, "abcdefghij", 5, 2, -5);
test("abcde", 0, 5, "abcdefghij", 5, 4, -5);
test("abcde", 0, 5, "abcdefghij", 5, 5, -5);
test("abcde", 0, 5, "abcdefghij", 5, 6, -5);
test("abcde", 0, 5, "abcdefghij", 9, 0, 5);
test("abcde", 0, 5, "abcdefghij", 9, 1, -9);
test("abcde", 0, 5, "abcdefghij", 9, 2, -9);
test("abcde", 0, 5, "abcdefghij", 10, 0, 5);
test("abcde", 0, 5, "abcdefghij", 10, 1, 5);
test("abcde", 0, 5, "abcdefghij", 11, 0, 0);
test("abcde", 0, 5, "abcdefghijklmnopqrst", 0, 0, 5);
test("abcde", 0, 5, "abcdefghijklmnopqrst", 0, 1, 4);
test("abcde", 0, 5, "abcdefghijklmnopqrst", 0, 10, -5);
test("abcde", 0, 5, "abcdefghijklmnopqrst", 0, 19, -14);
test("abcde", 0, 5, "abcdefghijklmnopqrst", 0, 20, -15);
test("abcde", 0, 5, "abcdefghijklmnopqrst", 0, 21, -15);
test("abcde", 0, 5, "abcdefghijklmnopqrst", 1, 0, 5);
test("abcde", 0, 5, "abcdefghijklmnopqrst", 1, 1, -1);
test("abcde", 0, 5, "abcdefghijklmnopqrst", 1, 9, -1);
test("abcde", 0, 5, "abcdefghijklmnopqrst", 1, 18, -1);
test("abcde", 0, 5, "abcdefghijklmnopqrst", 1, 19, -1);
test("abcde", 0, 5, "abcdefghijklmnopqrst", 1, 20, -1);
test("abcde", 0, 5, "abcdefghijklmnopqrst", 10, 0, 5);
test("abcde", 0, 5, "abcdefghijklmnopqrst", 10, 1, -10);
test("abcde", 0, 5, "abcdefghijklmnopqrst", 10, 5, -10);
test("abcde", 0, 5, "abcdefghijklmnopqrst", 10, 9, -10);
test("abcde", 0, 5, "abcdefghijklmnopqrst", 10, 10, -10);
test("abcde", 0, 5, "abcdefghijklmnopqrst", 10, 11, -10);
test("abcde", 0, 5, "abcdefghijklmnopqrst", 19, 0, 5);
test("abcde", 0, 5, "abcdefghijklmnopqrst", 19, 1, -19);
test("abcde", 0, 5, "abcdefghijklmnopqrst", 19, 2, -19);
test("abcde", 0, 5, "abcdefghijklmnopqrst", 20, 0, 5);
test("abcde", 0, 5, "abcdefghijklmnopqrst", 20, 1, 5);
test("abcde", 0, 5, "abcdefghijklmnopqrst", 21, 0, 0);
test("abcde", 0, 6, "", 0, 0, 5);
test("abcde", 0, 6, "", 0, 1, 5);
test("abcde", 0, 6, "", 1, 0, 0);
test("abcde", 0, 6, "abcde", 0, 0, 5);
test("abcde", 0, 6, "abcde", 0, 1, 4);
test("abcde", 0, 6, "abcde", 0, 2, 3);
test("abcde", 0, 6, "abcde", 0, 4, 1);
test("abcde", 0, 6, "abcde", 0, 5, 0);
}
void test6()
{
test("abcde", 0, 6, "abcde", 0, 6, 0);
test("abcde", 0, 6, "abcde", 1, 0, 5);
test("abcde", 0, 6, "abcde", 1, 1, -1);
test("abcde", 0, 6, "abcde", 1, 2, -1);
test("abcde", 0, 6, "abcde", 1, 3, -1);
test("abcde", 0, 6, "abcde", 1, 4, -1);
test("abcde", 0, 6, "abcde", 1, 5, -1);
test("abcde", 0, 6, "abcde", 2, 0, 5);
test("abcde", 0, 6, "abcde", 2, 1, -2);
test("abcde", 0, 6, "abcde", 2, 2, -2);
test("abcde", 0, 6, "abcde", 2, 3, -2);
test("abcde", 0, 6, "abcde", 2, 4, -2);
test("abcde", 0, 6, "abcde", 4, 0, 5);
test("abcde", 0, 6, "abcde", 4, 1, -4);
test("abcde", 0, 6, "abcde", 4, 2, -4);
test("abcde", 0, 6, "abcde", 5, 0, 5);
test("abcde", 0, 6, "abcde", 5, 1, 5);
test("abcde", 0, 6, "abcde", 6, 0, 0);
test("abcde", 0, 6, "abcdefghij", 0, 0, 5);
test("abcde", 0, 6, "abcdefghij", 0, 1, 4);
test("abcde", 0, 6, "abcdefghij", 0, 5, 0);
test("abcde", 0, 6, "abcdefghij", 0, 9, -4);
test("abcde", 0, 6, "abcdefghij", 0, 10, -5);
test("abcde", 0, 6, "abcdefghij", 0, 11, -5);
test("abcde", 0, 6, "abcdefghij", 1, 0, 5);
test("abcde", 0, 6, "abcdefghij", 1, 1, -1);
test("abcde", 0, 6, "abcdefghij", 1, 4, -1);
test("abcde", 0, 6, "abcdefghij", 1, 8, -1);
test("abcde", 0, 6, "abcdefghij", 1, 9, -1);
test("abcde", 0, 6, "abcdefghij", 1, 10, -1);
test("abcde", 0, 6, "abcdefghij", 5, 0, 5);
test("abcde", 0, 6, "abcdefghij", 5, 1, -5);
test("abcde", 0, 6, "abcdefghij", 5, 2, -5);
test("abcde", 0, 6, "abcdefghij", 5, 4, -5);
test("abcde", 0, 6, "abcdefghij", 5, 5, -5);
test("abcde", 0, 6, "abcdefghij", 5, 6, -5);
test("abcde", 0, 6, "abcdefghij", 9, 0, 5);
test("abcde", 0, 6, "abcdefghij", 9, 1, -9);
test("abcde", 0, 6, "abcdefghij", 9, 2, -9);
test("abcde", 0, 6, "abcdefghij", 10, 0, 5);
test("abcde", 0, 6, "abcdefghij", 10, 1, 5);
test("abcde", 0, 6, "abcdefghij", 11, 0, 0);
test("abcde", 0, 6, "abcdefghijklmnopqrst", 0, 0, 5);
test("abcde", 0, 6, "abcdefghijklmnopqrst", 0, 1, 4);
test("abcde", 0, 6, "abcdefghijklmnopqrst", 0, 10, -5);
test("abcde", 0, 6, "abcdefghijklmnopqrst", 0, 19, -14);
test("abcde", 0, 6, "abcdefghijklmnopqrst", 0, 20, -15);
test("abcde", 0, 6, "abcdefghijklmnopqrst", 0, 21, -15);
test("abcde", 0, 6, "abcdefghijklmnopqrst", 1, 0, 5);
test("abcde", 0, 6, "abcdefghijklmnopqrst", 1, 1, -1);
test("abcde", 0, 6, "abcdefghijklmnopqrst", 1, 9, -1);
test("abcde", 0, 6, "abcdefghijklmnopqrst", 1, 18, -1);
test("abcde", 0, 6, "abcdefghijklmnopqrst", 1, 19, -1);
test("abcde", 0, 6, "abcdefghijklmnopqrst", 1, 20, -1);
test("abcde", 0, 6, "abcdefghijklmnopqrst", 10, 0, 5);
test("abcde", 0, 6, "abcdefghijklmnopqrst", 10, 1, -10);
test("abcde", 0, 6, "abcdefghijklmnopqrst", 10, 5, -10);
test("abcde", 0, 6, "abcdefghijklmnopqrst", 10, 9, -10);
test("abcde", 0, 6, "abcdefghijklmnopqrst", 10, 10, -10);
test("abcde", 0, 6, "abcdefghijklmnopqrst", 10, 11, -10);
test("abcde", 0, 6, "abcdefghijklmnopqrst", 19, 0, 5);
test("abcde", 0, 6, "abcdefghijklmnopqrst", 19, 1, -19);
test("abcde", 0, 6, "abcdefghijklmnopqrst", 19, 2, -19);
test("abcde", 0, 6, "abcdefghijklmnopqrst", 20, 0, 5);
test("abcde", 0, 6, "abcdefghijklmnopqrst", 20, 1, 5);
test("abcde", 0, 6, "abcdefghijklmnopqrst", 21, 0, 0);
test("abcde", 1, 0, "", 0, 0, 0);
test("abcde", 1, 0, "", 0, 1, 0);
test("abcde", 1, 0, "", 1, 0, 0);
test("abcde", 1, 0, "abcde", 0, 0, 0);
test("abcde", 1, 0, "abcde", 0, 1, -1);
test("abcde", 1, 0, "abcde", 0, 2, -2);
test("abcde", 1, 0, "abcde", 0, 4, -4);
test("abcde", 1, 0, "abcde", 0, 5, -5);
test("abcde", 1, 0, "abcde", 0, 6, -5);
test("abcde", 1, 0, "abcde", 1, 0, 0);
test("abcde", 1, 0, "abcde", 1, 1, -1);
test("abcde", 1, 0, "abcde", 1, 2, -2);
test("abcde", 1, 0, "abcde", 1, 3, -3);
test("abcde", 1, 0, "abcde", 1, 4, -4);
test("abcde", 1, 0, "abcde", 1, 5, -4);
test("abcde", 1, 0, "abcde", 2, 0, 0);
test("abcde", 1, 0, "abcde", 2, 1, -1);
test("abcde", 1, 0, "abcde", 2, 2, -2);
test("abcde", 1, 0, "abcde", 2, 3, -3);
test("abcde", 1, 0, "abcde", 2, 4, -3);
test("abcde", 1, 0, "abcde", 4, 0, 0);
test("abcde", 1, 0, "abcde", 4, 1, -1);
test("abcde", 1, 0, "abcde", 4, 2, -1);
test("abcde", 1, 0, "abcde", 5, 0, 0);
test("abcde", 1, 0, "abcde", 5, 1, 0);
test("abcde", 1, 0, "abcde", 6, 0, 0);
test("abcde", 1, 0, "abcdefghij", 0, 0, 0);
test("abcde", 1, 0, "abcdefghij", 0, 1, -1);
test("abcde", 1, 0, "abcdefghij", 0, 5, -5);
test("abcde", 1, 0, "abcdefghij", 0, 9, -9);
test("abcde", 1, 0, "abcdefghij", 0, 10, -10);
test("abcde", 1, 0, "abcdefghij", 0, 11, -10);
test("abcde", 1, 0, "abcdefghij", 1, 0, 0);
test("abcde", 1, 0, "abcdefghij", 1, 1, -1);
}
void test7()
{
test("abcde", 1, 0, "abcdefghij", 1, 4, -4);
test("abcde", 1, 0, "abcdefghij", 1, 8, -8);
test("abcde", 1, 0, "abcdefghij", 1, 9, -9);
test("abcde", 1, 0, "abcdefghij", 1, 10, -9);
test("abcde", 1, 0, "abcdefghij", 5, 0, 0);
test("abcde", 1, 0, "abcdefghij", 5, 1, -1);
test("abcde", 1, 0, "abcdefghij", 5, 2, -2);
test("abcde", 1, 0, "abcdefghij", 5, 4, -4);
test("abcde", 1, 0, "abcdefghij", 5, 5, -5);
test("abcde", 1, 0, "abcdefghij", 5, 6, -5);
test("abcde", 1, 0, "abcdefghij", 9, 0, 0);
test("abcde", 1, 0, "abcdefghij", 9, 1, -1);
test("abcde", 1, 0, "abcdefghij", 9, 2, -1);
test("abcde", 1, 0, "abcdefghij", 10, 0, 0);
test("abcde", 1, 0, "abcdefghij", 10, 1, 0);
test("abcde", 1, 0, "abcdefghij", 11, 0, 0);
test("abcde", 1, 0, "abcdefghijklmnopqrst", 0, 0, 0);
test("abcde", 1, 0, "abcdefghijklmnopqrst", 0, 1, -1);
test("abcde", 1, 0, "abcdefghijklmnopqrst", 0, 10, -10);
test("abcde", 1, 0, "abcdefghijklmnopqrst", 0, 19, -19);
test("abcde", 1, 0, "abcdefghijklmnopqrst", 0, 20, -20);
test("abcde", 1, 0, "abcdefghijklmnopqrst", 0, 21, -20);
test("abcde", 1, 0, "abcdefghijklmnopqrst", 1, 0, 0);
test("abcde", 1, 0, "abcdefghijklmnopqrst", 1, 1, -1);
test("abcde", 1, 0, "abcdefghijklmnopqrst", 1, 9, -9);
test("abcde", 1, 0, "abcdefghijklmnopqrst", 1, 18, -18);
test("abcde", 1, 0, "abcdefghijklmnopqrst", 1, 19, -19);
test("abcde", 1, 0, "abcdefghijklmnopqrst", 1, 20, -19);
test("abcde", 1, 0, "abcdefghijklmnopqrst", 10, 0, 0);
test("abcde", 1, 0, "abcdefghijklmnopqrst", 10, 1, -1);
test("abcde", 1, 0, "abcdefghijklmnopqrst", 10, 5, -5);
test("abcde", 1, 0, "abcdefghijklmnopqrst", 10, 9, -9);
test("abcde", 1, 0, "abcdefghijklmnopqrst", 10, 10, -10);
test("abcde", 1, 0, "abcdefghijklmnopqrst", 10, 11, -10);
test("abcde", 1, 0, "abcdefghijklmnopqrst", 19, 0, 0);
test("abcde", 1, 0, "abcdefghijklmnopqrst", 19, 1, -1);
test("abcde", 1, 0, "abcdefghijklmnopqrst", 19, 2, -1);
test("abcde", 1, 0, "abcdefghijklmnopqrst", 20, 0, 0);
test("abcde", 1, 0, "abcdefghijklmnopqrst", 20, 1, 0);
test("abcde", 1, 0, "abcdefghijklmnopqrst", 21, 0, 0);
test("abcde", 1, 1, "", 0, 0, 1);
test("abcde", 1, 1, "", 0, 1, 1);
test("abcde", 1, 1, "", 1, 0, 0);
test("abcde", 1, 1, "abcde", 0, 0, 1);
test("abcde", 1, 1, "abcde", 0, 1, 1);
test("abcde", 1, 1, "abcde", 0, 2, 1);
test("abcde", 1, 1, "abcde", 0, 4, 1);
test("abcde", 1, 1, "abcde", 0, 5, 1);
test("abcde", 1, 1, "abcde", 0, 6, 1);
test("abcde", 1, 1, "abcde", 1, 0, 1);
test("abcde", 1, 1, "abcde", 1, 1, 0);
test("abcde", 1, 1, "abcde", 1, 2, -1);
test("abcde", 1, 1, "abcde", 1, 3, -2);
test("abcde", 1, 1, "abcde", 1, 4, -3);
test("abcde", 1, 1, "abcde", 1, 5, -3);
test("abcde", 1, 1, "abcde", 2, 0, 1);
test("abcde", 1, 1, "abcde", 2, 1, -1);
test("abcde", 1, 1, "abcde", 2, 2, -1);
test("abcde", 1, 1, "abcde", 2, 3, -1);
test("abcde", 1, 1, "abcde", 2, 4, -1);
test("abcde", 1, 1, "abcde", 4, 0, 1);
test("abcde", 1, 1, "abcde", 4, 1, -3);
test("abcde", 1, 1, "abcde", 4, 2, -3);
test("abcde", 1, 1, "abcde", 5, 0, 1);
test("abcde", 1, 1, "abcde", 5, 1, 1);
test("abcde", 1, 1, "abcde", 6, 0, 0);
test("abcde", 1, 1, "abcdefghij", 0, 0, 1);
test("abcde", 1, 1, "abcdefghij", 0, 1, 1);
test("abcde", 1, 1, "abcdefghij", 0, 5, 1);
test("abcde", 1, 1, "abcdefghij", 0, 9, 1);
test("abcde", 1, 1, "abcdefghij", 0, 10, 1);
test("abcde", 1, 1, "abcdefghij", 0, 11, 1);
test("abcde", 1, 1, "abcdefghij", 1, 0, 1);
test("abcde", 1, 1, "abcdefghij", 1, 1, 0);
test("abcde", 1, 1, "abcdefghij", 1, 4, -3);
test("abcde", 1, 1, "abcdefghij", 1, 8, -7);
test("abcde", 1, 1, "abcdefghij", 1, 9, -8);
test("abcde", 1, 1, "abcdefghij", 1, 10, -8);
test("abcde", 1, 1, "abcdefghij", 5, 0, 1);
test("abcde", 1, 1, "abcdefghij", 5, 1, -4);
test("abcde", 1, 1, "abcdefghij", 5, 2, -4);
test("abcde", 1, 1, "abcdefghij", 5, 4, -4);
test("abcde", 1, 1, "abcdefghij", 5, 5, -4);
test("abcde", 1, 1, "abcdefghij", 5, 6, -4);
test("abcde", 1, 1, "abcdefghij", 9, 0, 1);
test("abcde", 1, 1, "abcdefghij", 9, 1, -8);
test("abcde", 1, 1, "abcdefghij", 9, 2, -8);
test("abcde", 1, 1, "abcdefghij", 10, 0, 1);
test("abcde", 1, 1, "abcdefghij", 10, 1, 1);
test("abcde", 1, 1, "abcdefghij", 11, 0, 0);
test("abcde", 1, 1, "abcdefghijklmnopqrst", 0, 0, 1);
test("abcde", 1, 1, "abcdefghijklmnopqrst", 0, 1, 1);
test("abcde", 1, 1, "abcdefghijklmnopqrst", 0, 10, 1);
test("abcde", 1, 1, "abcdefghijklmnopqrst", 0, 19, 1);
test("abcde", 1, 1, "abcdefghijklmnopqrst", 0, 20, 1);
test("abcde", 1, 1, "abcdefghijklmnopqrst", 0, 21, 1);
test("abcde", 1, 1, "abcdefghijklmnopqrst", 1, 0, 1);
test("abcde", 1, 1, "abcdefghijklmnopqrst", 1, 1, 0);
test("abcde", 1, 1, "abcdefghijklmnopqrst", 1, 9, -8);
test("abcde", 1, 1, "abcdefghijklmnopqrst", 1, 18, -17);
}
void test8()
{
test("abcde", 1, 1, "abcdefghijklmnopqrst", 1, 19, -18);
test("abcde", 1, 1, "abcdefghijklmnopqrst", 1, 20, -18);
test("abcde", 1, 1, "abcdefghijklmnopqrst", 10, 0, 1);
test("abcde", 1, 1, "abcdefghijklmnopqrst", 10, 1, -9);
test("abcde", 1, 1, "abcdefghijklmnopqrst", 10, 5, -9);
test("abcde", 1, 1, "abcdefghijklmnopqrst", 10, 9, -9);
test("abcde", 1, 1, "abcdefghijklmnopqrst", 10, 10, -9);
test("abcde", 1, 1, "abcdefghijklmnopqrst", 10, 11, -9);
test("abcde", 1, 1, "abcdefghijklmnopqrst", 19, 0, 1);
test("abcde", 1, 1, "abcdefghijklmnopqrst", 19, 1, -18);
test("abcde", 1, 1, "abcdefghijklmnopqrst", 19, 2, -18);
test("abcde", 1, 1, "abcdefghijklmnopqrst", 20, 0, 1);
test("abcde", 1, 1, "abcdefghijklmnopqrst", 20, 1, 1);
test("abcde", 1, 1, "abcdefghijklmnopqrst", 21, 0, 0);
test("abcde", 1, 2, "", 0, 0, 2);
test("abcde", 1, 2, "", 0, 1, 2);
test("abcde", 1, 2, "", 1, 0, 0);
test("abcde", 1, 2, "abcde", 0, 0, 2);
test("abcde", 1, 2, "abcde", 0, 1, 1);
test("abcde", 1, 2, "abcde", 0, 2, 1);
test("abcde", 1, 2, "abcde", 0, 4, 1);
test("abcde", 1, 2, "abcde", 0, 5, 1);
test("abcde", 1, 2, "abcde", 0, 6, 1);
test("abcde", 1, 2, "abcde", 1, 0, 2);
test("abcde", 1, 2, "abcde", 1, 1, 1);
test("abcde", 1, 2, "abcde", 1, 2, 0);
test("abcde", 1, 2, "abcde", 1, 3, -1);
test("abcde", 1, 2, "abcde", 1, 4, -2);
test("abcde", 1, 2, "abcde", 1, 5, -2);
test("abcde", 1, 2, "abcde", 2, 0, 2);
test("abcde", 1, 2, "abcde", 2, 1, -1);
test("abcde", 1, 2, "abcde", 2, 2, -1);
test("abcde", 1, 2, "abcde", 2, 3, -1);
test("abcde", 1, 2, "abcde", 2, 4, -1);
test("abcde", 1, 2, "abcde", 4, 0, 2);
test("abcde", 1, 2, "abcde", 4, 1, -3);
test("abcde", 1, 2, "abcde", 4, 2, -3);
test("abcde", 1, 2, "abcde", 5, 0, 2);
test("abcde", 1, 2, "abcde", 5, 1, 2);
test("abcde", 1, 2, "abcde", 6, 0, 0);
test("abcde", 1, 2, "abcdefghij", 0, 0, 2);
test("abcde", 1, 2, "abcdefghij", 0, 1, 1);
test("abcde", 1, 2, "abcdefghij", 0, 5, 1);
test("abcde", 1, 2, "abcdefghij", 0, 9, 1);
test("abcde", 1, 2, "abcdefghij", 0, 10, 1);
test("abcde", 1, 2, "abcdefghij", 0, 11, 1);
test("abcde", 1, 2, "abcdefghij", 1, 0, 2);
test("abcde", 1, 2, "abcdefghij", 1, 1, 1);
test("abcde", 1, 2, "abcdefghij", 1, 4, -2);
test("abcde", 1, 2, "abcdefghij", 1, 8, -6);
test("abcde", 1, 2, "abcdefghij", 1, 9, -7);
test("abcde", 1, 2, "abcdefghij", 1, 10, -7);
test("abcde", 1, 2, "abcdefghij", 5, 0, 2);
test("abcde", 1, 2, "abcdefghij", 5, 1, -4);
test("abcde", 1, 2, "abcdefghij", 5, 2, -4);
test("abcde", 1, 2, "abcdefghij", 5, 4, -4);
test("abcde", 1, 2, "abcdefghij", 5, 5, -4);
test("abcde", 1, 2, "abcdefghij", 5, 6, -4);
test("abcde", 1, 2, "abcdefghij", 9, 0, 2);
test("abcde", 1, 2, "abcdefghij", 9, 1, -8);
test("abcde", 1, 2, "abcdefghij", 9, 2, -8);
test("abcde", 1, 2, "abcdefghij", 10, 0, 2);
test("abcde", 1, 2, "abcdefghij", 10, 1, 2);
test("abcde", 1, 2, "abcdefghij", 11, 0, 0);
test("abcde", 1, 2, "abcdefghijklmnopqrst", 0, 0, 2);
test("abcde", 1, 2, "abcdefghijklmnopqrst", 0, 1, 1);
test("abcde", 1, 2, "abcdefghijklmnopqrst", 0, 10, 1);
test("abcde", 1, 2, "abcdefghijklmnopqrst", 0, 19, 1);
test("abcde", 1, 2, "abcdefghijklmnopqrst", 0, 20, 1);
test("abcde", 1, 2, "abcdefghijklmnopqrst", 0, 21, 1);
test("abcde", 1, 2, "abcdefghijklmnopqrst", 1, 0, 2);
test("abcde", 1, 2, "abcdefghijklmnopqrst", 1, 1, 1);
test("abcde", 1, 2, "abcdefghijklmnopqrst", 1, 9, -7);
test("abcde", 1, 2, "abcdefghijklmnopqrst", 1, 18, -16);
test("abcde", 1, 2, "abcdefghijklmnopqrst", 1, 19, -17);
test("abcde", 1, 2, "abcdefghijklmnopqrst", 1, 20, -17);
test("abcde", 1, 2, "abcdefghijklmnopqrst", 10, 0, 2);
test("abcde", 1, 2, "abcdefghijklmnopqrst", 10, 1, -9);
test("abcde", 1, 2, "abcdefghijklmnopqrst", 10, 5, -9);
test("abcde", 1, 2, "abcdefghijklmnopqrst", 10, 9, -9);
test("abcde", 1, 2, "abcdefghijklmnopqrst", 10, 10, -9);
test("abcde", 1, 2, "abcdefghijklmnopqrst", 10, 11, -9);
test("abcde", 1, 2, "abcdefghijklmnopqrst", 19, 0, 2);
test("abcde", 1, 2, "abcdefghijklmnopqrst", 19, 1, -18);
test("abcde", 1, 2, "abcdefghijklmnopqrst", 19, 2, -18);
test("abcde", 1, 2, "abcdefghijklmnopqrst", 20, 0, 2);
test("abcde", 1, 2, "abcdefghijklmnopqrst", 20, 1, 2);
test("abcde", 1, 2, "abcdefghijklmnopqrst", 21, 0, 0);
test("abcde", 1, 3, "", 0, 0, 3);
test("abcde", 1, 3, "", 0, 1, 3);
test("abcde", 1, 3, "", 1, 0, 0);
test("abcde", 1, 3, "abcde", 0, 0, 3);
test("abcde", 1, 3, "abcde", 0, 1, 1);
test("abcde", 1, 3, "abcde", 0, 2, 1);
test("abcde", 1, 3, "abcde", 0, 4, 1);
test("abcde", 1, 3, "abcde", 0, 5, 1);
test("abcde", 1, 3, "abcde", 0, 6, 1);
test("abcde", 1, 3, "abcde", 1, 0, 3);
test("abcde", 1, 3, "abcde", 1, 1, 2);
test("abcde", 1, 3, "abcde", 1, 2, 1);
}
void test9()
{
test("abcde", 1, 3, "abcde", 1, 3, 0);
test("abcde", 1, 3, "abcde", 1, 4, -1);
test("abcde", 1, 3, "abcde", 1, 5, -1);
test("abcde", 1, 3, "abcde", 2, 0, 3);
test("abcde", 1, 3, "abcde", 2, 1, -1);
test("abcde", 1, 3, "abcde", 2, 2, -1);
test("abcde", 1, 3, "abcde", 2, 3, -1);
test("abcde", 1, 3, "abcde", 2, 4, -1);
test("abcde", 1, 3, "abcde", 4, 0, 3);
test("abcde", 1, 3, "abcde", 4, 1, -3);
test("abcde", 1, 3, "abcde", 4, 2, -3);
test("abcde", 1, 3, "abcde", 5, 0, 3);
test("abcde", 1, 3, "abcde", 5, 1, 3);
test("abcde", 1, 3, "abcde", 6, 0, 0);
test("abcde", 1, 3, "abcdefghij", 0, 0, 3);
test("abcde", 1, 3, "abcdefghij", 0, 1, 1);
test("abcde", 1, 3, "abcdefghij", 0, 5, 1);
test("abcde", 1, 3, "abcdefghij", 0, 9, 1);
test("abcde", 1, 3, "abcdefghij", 0, 10, 1);
test("abcde", 1, 3, "abcdefghij", 0, 11, 1);
test("abcde", 1, 3, "abcdefghij", 1, 0, 3);
test("abcde", 1, 3, "abcdefghij", 1, 1, 2);
test("abcde", 1, 3, "abcdefghij", 1, 4, -1);
test("abcde", 1, 3, "abcdefghij", 1, 8, -5);
test("abcde", 1, 3, "abcdefghij", 1, 9, -6);
test("abcde", 1, 3, "abcdefghij", 1, 10, -6);
test("abcde", 1, 3, "abcdefghij", 5, 0, 3);
test("abcde", 1, 3, "abcdefghij", 5, 1, -4);
test("abcde", 1, 3, "abcdefghij", 5, 2, -4);
test("abcde", 1, 3, "abcdefghij", 5, 4, -4);
test("abcde", 1, 3, "abcdefghij", 5, 5, -4);
test("abcde", 1, 3, "abcdefghij", 5, 6, -4);
test("abcde", 1, 3, "abcdefghij", 9, 0, 3);
test("abcde", 1, 3, "abcdefghij", 9, 1, -8);
test("abcde", 1, 3, "abcdefghij", 9, 2, -8);
test("abcde", 1, 3, "abcdefghij", 10, 0, 3);
test("abcde", 1, 3, "abcdefghij", 10, 1, 3);
test("abcde", 1, 3, "abcdefghij", 11, 0, 0);
test("abcde", 1, 3, "abcdefghijklmnopqrst", 0, 0, 3);
test("abcde", 1, 3, "abcdefghijklmnopqrst", 0, 1, 1);
test("abcde", 1, 3, "abcdefghijklmnopqrst", 0, 10, 1);
test("abcde", 1, 3, "abcdefghijklmnopqrst", 0, 19, 1);
test("abcde", 1, 3, "abcdefghijklmnopqrst", 0, 20, 1);
test("abcde", 1, 3, "abcdefghijklmnopqrst", 0, 21, 1);
test("abcde", 1, 3, "abcdefghijklmnopqrst", 1, 0, 3);
test("abcde", 1, 3, "abcdefghijklmnopqrst", 1, 1, 2);
test("abcde", 1, 3, "abcdefghijklmnopqrst", 1, 9, -6);
test("abcde", 1, 3, "abcdefghijklmnopqrst", 1, 18, -15);
test("abcde", 1, 3, "abcdefghijklmnopqrst", 1, 19, -16);
test("abcde", 1, 3, "abcdefghijklmnopqrst", 1, 20, -16);
test("abcde", 1, 3, "abcdefghijklmnopqrst", 10, 0, 3);
test("abcde", 1, 3, "abcdefghijklmnopqrst", 10, 1, -9);
test("abcde", 1, 3, "abcdefghijklmnopqrst", 10, 5, -9);
test("abcde", 1, 3, "abcdefghijklmnopqrst", 10, 9, -9);
test("abcde", 1, 3, "abcdefghijklmnopqrst", 10, 10, -9);
test("abcde", 1, 3, "abcdefghijklmnopqrst", 10, 11, -9);
test("abcde", 1, 3, "abcdefghijklmnopqrst", 19, 0, 3);
test("abcde", 1, 3, "abcdefghijklmnopqrst", 19, 1, -18);
test("abcde", 1, 3, "abcdefghijklmnopqrst", 19, 2, -18);
test("abcde", 1, 3, "abcdefghijklmnopqrst", 20, 0, 3);
test("abcde", 1, 3, "abcdefghijklmnopqrst", 20, 1, 3);
test("abcde", 1, 3, "abcdefghijklmnopqrst", 21, 0, 0);
test("abcde", 1, 4, "", 0, 0, 4);
test("abcde", 1, 4, "", 0, 1, 4);
test("abcde", 1, 4, "", 1, 0, 0);
test("abcde", 1, 4, "abcde", 0, 0, 4);
test("abcde", 1, 4, "abcde", 0, 1, 1);
test("abcde", 1, 4, "abcde", 0, 2, 1);
test("abcde", 1, 4, "abcde", 0, 4, 1);
test("abcde", 1, 4, "abcde", 0, 5, 1);
test("abcde", 1, 4, "abcde", 0, 6, 1);
test("abcde", 1, 4, "abcde", 1, 0, 4);
test("abcde", 1, 4, "abcde", 1, 1, 3);
test("abcde", 1, 4, "abcde", 1, 2, 2);
test("abcde", 1, 4, "abcde", 1, 3, 1);
test("abcde", 1, 4, "abcde", 1, 4, 0);
test("abcde", 1, 4, "abcde", 1, 5, 0);
test("abcde", 1, 4, "abcde", 2, 0, 4);
test("abcde", 1, 4, "abcde", 2, 1, -1);
test("abcde", 1, 4, "abcde", 2, 2, -1);
test("abcde", 1, 4, "abcde", 2, 3, -1);
test("abcde", 1, 4, "abcde", 2, 4, -1);
test("abcde", 1, 4, "abcde", 4, 0, 4);
test("abcde", 1, 4, "abcde", 4, 1, -3);
test("abcde", 1, 4, "abcde", 4, 2, -3);
test("abcde", 1, 4, "abcde", 5, 0, 4);
test("abcde", 1, 4, "abcde", 5, 1, 4);
test("abcde", 1, 4, "abcde", 6, 0, 0);
test("abcde", 1, 4, "abcdefghij", 0, 0, 4);
test("abcde", 1, 4, "abcdefghij", 0, 1, 1);
test("abcde", 1, 4, "abcdefghij", 0, 5, 1);
test("abcde", 1, 4, "abcdefghij", 0, 9, 1);
test("abcde", 1, 4, "abcdefghij", 0, 10, 1);
test("abcde", 1, 4, "abcdefghij", 0, 11, 1);
test("abcde", 1, 4, "abcdefghij", 1, 0, 4);
test("abcde", 1, 4, "abcdefghij", 1, 1, 3);
test("abcde", 1, 4, "abcdefghij", 1, 4, 0);
test("abcde", 1, 4, "abcdefghij", 1, 8, -4);
test("abcde", 1, 4, "abcdefghij", 1, 9, -5);
test("abcde", 1, 4, "abcdefghij", 1, 10, -5);
}
void test10()
{
test("abcde", 1, 4, "abcdefghij", 5, 0, 4);
test("abcde", 1, 4, "abcdefghij", 5, 1, -4);
test("abcde", 1, 4, "abcdefghij", 5, 2, -4);
test("abcde", 1, 4, "abcdefghij", 5, 4, -4);
test("abcde", 1, 4, "abcdefghij", 5, 5, -4);
test("abcde", 1, 4, "abcdefghij", 5, 6, -4);
test("abcde", 1, 4, "abcdefghij", 9, 0, 4);
test("abcde", 1, 4, "abcdefghij", 9, 1, -8);
test("abcde", 1, 4, "abcdefghij", 9, 2, -8);
test("abcde", 1, 4, "abcdefghij", 10, 0, 4);
test("abcde", 1, 4, "abcdefghij", 10, 1, 4);
test("abcde", 1, 4, "abcdefghij", 11, 0, 0);
test("abcde", 1, 4, "abcdefghijklmnopqrst", 0, 0, 4);
test("abcde", 1, 4, "abcdefghijklmnopqrst", 0, 1, 1);
test("abcde", 1, 4, "abcdefghijklmnopqrst", 0, 10, 1);
test("abcde", 1, 4, "abcdefghijklmnopqrst", 0, 19, 1);
test("abcde", 1, 4, "abcdefghijklmnopqrst", 0, 20, 1);
test("abcde", 1, 4, "abcdefghijklmnopqrst", 0, 21, 1);
test("abcde", 1, 4, "abcdefghijklmnopqrst", 1, 0, 4);
test("abcde", 1, 4, "abcdefghijklmnopqrst", 1, 1, 3);
test("abcde", 1, 4, "abcdefghijklmnopqrst", 1, 9, -5);
test("abcde", 1, 4, "abcdefghijklmnopqrst", 1, 18, -14);
test("abcde", 1, 4, "abcdefghijklmnopqrst", 1, 19, -15);
test("abcde", 1, 4, "abcdefghijklmnopqrst", 1, 20, -15);
test("abcde", 1, 4, "abcdefghijklmnopqrst", 10, 0, 4);
test("abcde", 1, 4, "abcdefghijklmnopqrst", 10, 1, -9);
test("abcde", 1, 4, "abcdefghijklmnopqrst", 10, 5, -9);
test("abcde", 1, 4, "abcdefghijklmnopqrst", 10, 9, -9);
test("abcde", 1, 4, "abcdefghijklmnopqrst", 10, 10, -9);
test("abcde", 1, 4, "abcdefghijklmnopqrst", 10, 11, -9);
test("abcde", 1, 4, "abcdefghijklmnopqrst", 19, 0, 4);
test("abcde", 1, 4, "abcdefghijklmnopqrst", 19, 1, -18);
test("abcde", 1, 4, "abcdefghijklmnopqrst", 19, 2, -18);
test("abcde", 1, 4, "abcdefghijklmnopqrst", 20, 0, 4);
test("abcde", 1, 4, "abcdefghijklmnopqrst", 20, 1, 4);
test("abcde", 1, 4, "abcdefghijklmnopqrst", 21, 0, 0);
test("abcde", 1, 5, "", 0, 0, 4);
test("abcde", 1, 5, "", 0, 1, 4);
test("abcde", 1, 5, "", 1, 0, 0);
test("abcde", 1, 5, "abcde", 0, 0, 4);
test("abcde", 1, 5, "abcde", 0, 1, 1);
test("abcde", 1, 5, "abcde", 0, 2, 1);
test("abcde", 1, 5, "abcde", 0, 4, 1);
test("abcde", 1, 5, "abcde", 0, 5, 1);
test("abcde", 1, 5, "abcde", 0, 6, 1);
test("abcde", 1, 5, "abcde", 1, 0, 4);
test("abcde", 1, 5, "abcde", 1, 1, 3);
test("abcde", 1, 5, "abcde", 1, 2, 2);
test("abcde", 1, 5, "abcde", 1, 3, 1);
test("abcde", 1, 5, "abcde", 1, 4, 0);
test("abcde", 1, 5, "abcde", 1, 5, 0);
test("abcde", 1, 5, "abcde", 2, 0, 4);
test("abcde", 1, 5, "abcde", 2, 1, -1);
test("abcde", 1, 5, "abcde", 2, 2, -1);
test("abcde", 1, 5, "abcde", 2, 3, -1);
test("abcde", 1, 5, "abcde", 2, 4, -1);
test("abcde", 1, 5, "abcde", 4, 0, 4);
test("abcde", 1, 5, "abcde", 4, 1, -3);
test("abcde", 1, 5, "abcde", 4, 2, -3);
test("abcde", 1, 5, "abcde", 5, 0, 4);
test("abcde", 1, 5, "abcde", 5, 1, 4);
test("abcde", 1, 5, "abcde", 6, 0, 0);
test("abcde", 1, 5, "abcdefghij", 0, 0, 4);
test("abcde", 1, 5, "abcdefghij", 0, 1, 1);
test("abcde", 1, 5, "abcdefghij", 0, 5, 1);
test("abcde", 1, 5, "abcdefghij", 0, 9, 1);
test("abcde", 1, 5, "abcdefghij", 0, 10, 1);
test("abcde", 1, 5, "abcdefghij", 0, 11, 1);
test("abcde", 1, 5, "abcdefghij", 1, 0, 4);
test("abcde", 1, 5, "abcdefghij", 1, 1, 3);
test("abcde", 1, 5, "abcdefghij", 1, 4, 0);
test("abcde", 1, 5, "abcdefghij", 1, 8, -4);
test("abcde", 1, 5, "abcdefghij", 1, 9, -5);
test("abcde", 1, 5, "abcdefghij", 1, 10, -5);
test("abcde", 1, 5, "abcdefghij", 5, 0, 4);
test("abcde", 1, 5, "abcdefghij", 5, 1, -4);
test("abcde", 1, 5, "abcdefghij", 5, 2, -4);
test("abcde", 1, 5, "abcdefghij", 5, 4, -4);
test("abcde", 1, 5, "abcdefghij", 5, 5, -4);
test("abcde", 1, 5, "abcdefghij", 5, 6, -4);
test("abcde", 1, 5, "abcdefghij", 9, 0, 4);
test("abcde", 1, 5, "abcdefghij", 9, 1, -8);
test("abcde", 1, 5, "abcdefghij", 9, 2, -8);
test("abcde", 1, 5, "abcdefghij", 10, 0, 4);
test("abcde", 1, 5, "abcdefghij", 10, 1, 4);
test("abcde", 1, 5, "abcdefghij", 11, 0, 0);
test("abcde", 1, 5, "abcdefghijklmnopqrst", 0, 0, 4);
test("abcde", 1, 5, "abcdefghijklmnopqrst", 0, 1, 1);
test("abcde", 1, 5, "abcdefghijklmnopqrst", 0, 10, 1);
test("abcde", 1, 5, "abcdefghijklmnopqrst", 0, 19, 1);
test("abcde", 1, 5, "abcdefghijklmnopqrst", 0, 20, 1);
test("abcde", 1, 5, "abcdefghijklmnopqrst", 0, 21, 1);
test("abcde", 1, 5, "abcdefghijklmnopqrst", 1, 0, 4);
test("abcde", 1, 5, "abcdefghijklmnopqrst", 1, 1, 3);
test("abcde", 1, 5, "abcdefghijklmnopqrst", 1, 9, -5);
test("abcde", 1, 5, "abcdefghijklmnopqrst", 1, 18, -14);
test("abcde", 1, 5, "abcdefghijklmnopqrst", 1, 19, -15);
test("abcde", 1, 5, "abcdefghijklmnopqrst", 1, 20, -15);
test("abcde", 1, 5, "abcdefghijklmnopqrst", 10, 0, 4);
test("abcde", 1, 5, "abcdefghijklmnopqrst", 10, 1, -9);
}
void test11()
{
test("abcde", 1, 5, "abcdefghijklmnopqrst", 10, 5, -9);
test("abcde", 1, 5, "abcdefghijklmnopqrst", 10, 9, -9);
test("abcde", 1, 5, "abcdefghijklmnopqrst", 10, 10, -9);
test("abcde", 1, 5, "abcdefghijklmnopqrst", 10, 11, -9);
test("abcde", 1, 5, "abcdefghijklmnopqrst", 19, 0, 4);
test("abcde", 1, 5, "abcdefghijklmnopqrst", 19, 1, -18);
test("abcde", 1, 5, "abcdefghijklmnopqrst", 19, 2, -18);
test("abcde", 1, 5, "abcdefghijklmnopqrst", 20, 0, 4);
test("abcde", 1, 5, "abcdefghijklmnopqrst", 20, 1, 4);
test("abcde", 1, 5, "abcdefghijklmnopqrst", 21, 0, 0);
test("abcde", 2, 0, "", 0, 0, 0);
test("abcde", 2, 0, "", 0, 1, 0);
test("abcde", 2, 0, "", 1, 0, 0);
test("abcde", 2, 0, "abcde", 0, 0, 0);
test("abcde", 2, 0, "abcde", 0, 1, -1);
test("abcde", 2, 0, "abcde", 0, 2, -2);
test("abcde", 2, 0, "abcde", 0, 4, -4);
test("abcde", 2, 0, "abcde", 0, 5, -5);
test("abcde", 2, 0, "abcde", 0, 6, -5);
test("abcde", 2, 0, "abcde", 1, 0, 0);
test("abcde", 2, 0, "abcde", 1, 1, -1);
test("abcde", 2, 0, "abcde", 1, 2, -2);
test("abcde", 2, 0, "abcde", 1, 3, -3);
test("abcde", 2, 0, "abcde", 1, 4, -4);
test("abcde", 2, 0, "abcde", 1, 5, -4);
test("abcde", 2, 0, "abcde", 2, 0, 0);
test("abcde", 2, 0, "abcde", 2, 1, -1);
test("abcde", 2, 0, "abcde", 2, 2, -2);
test("abcde", 2, 0, "abcde", 2, 3, -3);
test("abcde", 2, 0, "abcde", 2, 4, -3);
test("abcde", 2, 0, "abcde", 4, 0, 0);
test("abcde", 2, 0, "abcde", 4, 1, -1);
test("abcde", 2, 0, "abcde", 4, 2, -1);
test("abcde", 2, 0, "abcde", 5, 0, 0);
test("abcde", 2, 0, "abcde", 5, 1, 0);
test("abcde", 2, 0, "abcde", 6, 0, 0);
test("abcde", 2, 0, "abcdefghij", 0, 0, 0);
test("abcde", 2, 0, "abcdefghij", 0, 1, -1);
test("abcde", 2, 0, "abcdefghij", 0, 5, -5);
test("abcde", 2, 0, "abcdefghij", 0, 9, -9);
test("abcde", 2, 0, "abcdefghij", 0, 10, -10);
test("abcde", 2, 0, "abcdefghij", 0, 11, -10);
test("abcde", 2, 0, "abcdefghij", 1, 0, 0);
test("abcde", 2, 0, "abcdefghij", 1, 1, -1);
test("abcde", 2, 0, "abcdefghij", 1, 4, -4);
test("abcde", 2, 0, "abcdefghij", 1, 8, -8);
test("abcde", 2, 0, "abcdefghij", 1, 9, -9);
test("abcde", 2, 0, "abcdefghij", 1, 10, -9);
test("abcde", 2, 0, "abcdefghij", 5, 0, 0);
test("abcde", 2, 0, "abcdefghij", 5, 1, -1);
test("abcde", 2, 0, "abcdefghij", 5, 2, -2);
test("abcde", 2, 0, "abcdefghij", 5, 4, -4);
test("abcde", 2, 0, "abcdefghij", 5, 5, -5);
test("abcde", 2, 0, "abcdefghij", 5, 6, -5);
test("abcde", 2, 0, "abcdefghij", 9, 0, 0);
test("abcde", 2, 0, "abcdefghij", 9, 1, -1);
test("abcde", 2, 0, "abcdefghij", 9, 2, -1);
test("abcde", 2, 0, "abcdefghij", 10, 0, 0);
test("abcde", 2, 0, "abcdefghij", 10, 1, 0);
test("abcde", 2, 0, "abcdefghij", 11, 0, 0);
test("abcde", 2, 0, "abcdefghijklmnopqrst", 0, 0, 0);
test("abcde", 2, 0, "abcdefghijklmnopqrst", 0, 1, -1);
test("abcde", 2, 0, "abcdefghijklmnopqrst", 0, 10, -10);
test("abcde", 2, 0, "abcdefghijklmnopqrst", 0, 19, -19);
test("abcde", 2, 0, "abcdefghijklmnopqrst", 0, 20, -20);
test("abcde", 2, 0, "abcdefghijklmnopqrst", 0, 21, -20);
test("abcde", 2, 0, "abcdefghijklmnopqrst", 1, 0, 0);
test("abcde", 2, 0, "abcdefghijklmnopqrst", 1, 1, -1);
test("abcde", 2, 0, "abcdefghijklmnopqrst", 1, 9, -9);
test("abcde", 2, 0, "abcdefghijklmnopqrst", 1, 18, -18);
test("abcde", 2, 0, "abcdefghijklmnopqrst", 1, 19, -19);
test("abcde", 2, 0, "abcdefghijklmnopqrst", 1, 20, -19);
test("abcde", 2, 0, "abcdefghijklmnopqrst", 10, 0, 0);
test("abcde", 2, 0, "abcdefghijklmnopqrst", 10, 1, -1);
test("abcde", 2, 0, "abcdefghijklmnopqrst", 10, 5, -5);
test("abcde", 2, 0, "abcdefghijklmnopqrst", 10, 9, -9);
test("abcde", 2, 0, "abcdefghijklmnopqrst", 10, 10, -10);
test("abcde", 2, 0, "abcdefghijklmnopqrst", 10, 11, -10);
test("abcde", 2, 0, "abcdefghijklmnopqrst", 19, 0, 0);
test("abcde", 2, 0, "abcdefghijklmnopqrst", 19, 1, -1);
test("abcde", 2, 0, "abcdefghijklmnopqrst", 19, 2, -1);
test("abcde", 2,